Управление Hyper-V из командной строки (часть 4)

Опубликовано: 20 Апреля, 2023

  • Управление Hyper-V из командной строки (часть 6)
  • Управление Hyper-V из командной строки (часть 7)
  • Управление Hyper-V из командной строки (часть 8)

Введение

Из всех физических аппаратных ресурсов, которые обычно назначаются виртуальным машинам, пожалуй, ни один из них не является столь важным, как память. Имея это в виду, я хотел посмотреть, как работает управление памятью с помощью Windows PowerShell.

Прежде чем я начну

Прежде чем я начну, я хочу быстро отметить для всех, кто только присоединяется к этой серии, что команды, которые я буду обсуждать, не являются родными для Hyper-V. Они являются частью библиотеки управления Hyper-V. Кроме того, эту библиотеку необходимо импортировать в PowerShell каждый раз, когда вы планируете использовать какие-либо команды, связанные с Hyper-V. Команда импорта:

Импорт модуля «C:Program FilesModulesHypervHyperv.psd1»

Полные инструкции по загрузке и установке библиотеки управления Hyper-V приведены в части 1 этой серии.

Создание отчета об использовании памяти

Поскольку физическая память является важным, но ограниченным аппаратным ресурсом, важно иметь возможность определить, сколько памяти выделено вашим виртуальным машинам. Хотя это относительно просто сделать с помощью диспетчера Hyper-V, диспетчер Hyper-V не предлагает никаких функций отчетности. К счастью, мы можем построить собственный отчет об использовании памяти непосредственно через Windows PowerShell.

Команда, которая используется для проверки того, сколько памяти использует виртуальная машина, называется Get-VMMemory. Синтаксис этой команды следующий:

Get-VMMemory –VM”<имя виртуальной машины>” –Server “<имя хост-сервера Hyper-V>”

Технически переключатель Server является обязательным параметром (по крайней мере, согласно документации), но если его опустить, то команда Get-VMMemory по умолчанию будет запрашивать локальный сервер. Обычно вы указываете одно имя сервера, но можно указать несколько имен серверов. При запросе нескольких хостов Hyper-V необходимо указать полные имена серверов. Вы не можете использовать подстановочные знаки.

Параметр имени виртуальной машины — совсем другая история. Этот параметр не является обязательным. Если вы не укажете имя виртуальной машины, PowerShell покажет вам выделение памяти для каждой виртуальной машины на указанном хост-сервере. Если вы хотите сузить список, вы можете указать одну виртуальную машину или несколько имен виртуальных машин. Вы даже можете использовать частичные имена серверов с подстановочными знаками.

Если вы введете команду Get-VMMemory без указания параметров, команда отобразит выделение памяти для каждой виртуальной машины, размещенной на локальном сервере. Вы можете увидеть, как это выглядит на рисунке А.

Изображение 26727
Рисунок A: Команда Get-VMMemory возвращает информацию о выделении памяти для каждой виртуальной машины на локальном сервере.

Как вы можете видеть на рисунке выше, команда перечисляет виртуальное количество, лимит и резервирование для каждой виртуальной машины. Если вам интересно, причина, по которой значения виртуального количества, лимита и резервирования идентичны на каждой из виртуальных машин на рисунке, заключается в том, что на моем сервере не включена функция выделения памяти Hyper-V. В противном случае эти значения будут отличаться.

Хотя удобно иметь возможность просматривать данные о виртуальном количестве, лимите и резервировании для каждой виртуальной машины, на самом деле вы можете использовать Get-VMMemory для получения гораздо большего количества данных, связанных с памятью. Для этого вам необходимо знать имена свойств, поддерживаемых командлетом Get-VMMemory.

Чтобы увидеть список всех доступных свойств, введите следующую команду:

Get-VMMemory | Get-Member –MemberType *Property | Имя объекта выбора

Вы можете увидеть результаты этой команды на рисунке B.

Изображение 26728
Рисунок B: Вы можете просмотреть список свойств, доступных для команды Get-VMMemory.

Как вы можете видеть на рисунке, среди перечисленных свойств есть VirtualQuantity, Limit и Reservation, но есть и много других свойств. Вы можете использовать команду Get-VMMemory для отображения любой комбинации этих свойств. Предположим, например, что вы хотите увидеть VMElementName, Address и AllocationUnits. Вы можете просмотреть эти параметры, введя следующую команду:

Get-VMMemory | FT VMElementName, адрес, единицы распределения

Вы можете увидеть, как это выглядит на рисунке C.

Изображение 26729
Рисунок C. Вы можете просмотреть любые свойства команды Get-VMMemory.

Создание отчета

Ранее я упоминал, что для создания отчета можно использовать команду Get-VMMemory. Я уже показал вам некоторые приемы извлечения нужной информации о выделении памяти и использовании, но до сих пор все, что мы сделали, это отобразили эту информацию в окне консоли. Если вы хотите сохранить информацию, чтобы ее можно было использовать позже, один из способов сделать это — экспортировать выходные данные командлета Get-VMMemory в файл HTML.

Вы можете сделать это, используя следующую команду:

Get-VMMemory | Преобразовать в HTML | Внешний файл C: empTest.HTM

Как вы можете видеть на рисунке D, эта команда не выводит никаких видимых результатов. Это связано с тем, что вывод команды перенаправляется в файл HTML с именем C: emp est.htm. Вы можете использовать проводник Windows, чтобы найти и открыть файл, но в качестве альтернативы вы можете открыть файл, даже не выходя из PowerShell. Просто введите следующую команду:

Изображение 26730
Рисунок D: Команда не производит видимого вывода.

Вызов-выражение C: emp est.htm

Если вы посмотрите на рисунок E, то увидите, что эта команда запускает Internet Explorer и отображает созданный нами HTML-файл. Вы, вероятно, также заметите, что отчет в формате HTML сильно отличается от отчета, показанного на рис. A, несмотря на то, что обе команды использовали команду Get-VMMemory без каких-либо дополнительных параметров. На самом деле, если вы посмотрите на нижнюю часть рисунка, вы заметите, что полоса прокрутки указывает на то, что отображается намного больше данных, чем умещается на экране.

Изображение 26731
Рисунок E: Так выглядит HTML-отчет.

Поскольку необходимо отобразить так много данных памяти, может быть полезнее создать файл CSV, чтобы данные можно было просматривать как электронную таблицу Excel, а не как веб-страницу. К счастью, PowerShell также имеет эту возможность. Команда, которую вы будете использовать для этого, почти идентична команде, используемой для создания отчета в формате HTML. Однако на этот раз вместо использования ConvertTo-HTML мы используем ConvertTo-CSV. Полная команда:

Get-VMMemory | Преобразовать в CSV | Исходящий файл C: emp est.csv

После создания файла CSV вы можете дважды щелкнуть файл, чтобы открыть его в Excel. Однако, если вы это сделаете, он не будет отображаться правильно. Чтобы файл отображался правильно, вы должны открыть Excel, а затем открыть файл. Это приведет к тому, что Excel запустит мастер импорта текста. Вы должны указать мастеру начать импорт файла со строки 2 и обрабатывать данные как разделенные. Вы можете увидеть пример этого на рисунке F.

Изображение 26732
Рисунок F: Импорт должен начинаться со строки 2.

На следующем экране вы должны установить параметр разделителя на запятую. После этого нажмите Готово. Данные будут импортированы, как показано на рисунке G.

Изображение 26733
Рисунок G. Данные импортированы в Excel.

Вывод

До сих пор я показал вам, как извлечь данные конфигурации памяти виртуальной машины из PowerShell. В следующей статье я буду использовать эту технику и покажу вам, как изменить распределение памяти.

  • Управление Hyper-V из командной строки (часть 5)
  • Управление Hyper-V из командной строки (часть 6)
  • Управление Hyper-V из командной строки (часть 7)
  • Управление Hyper-V из командной строки (часть 8)