PowerCLI от VMWare становится всеобщим интерфейсом для администраторов виртуализации гипервизоров на поддерживаемом оборудовании ESXi. Изучение управления VMware с помощью PowerShell и PowerCLI является важным дополнением к вашему инструментарию. В этом руководстве по PowerCLI вы узнаете, как именно это сделать.
В этом руководстве вы узнаете:
- основы подключения к инфраструктуре VMware с помощью PowerCLI
- ознакомление с cmdlet’ами для работы с объектами VMware
- получение знаний для исследования
- управление VMware с помощью PowerCLI
Приступим!
Что вам нужно знать и иметь
Прежде чем вы начнете изучать этот урок PowerCLI, важно убедиться, что мы оба находимся на одной волне. Для этой статьи я предполагаю, что:
- У вас есть базовый опыт работы с PowerShell. Вам не обязательно быть экспертом по PowerShell, но любой опыт работы с PowerShell будет вам полезен.
- У вас есть хост VMware ESXi или виртуальный центр vCenter для подключения и тестирования
- Вы работаете на рабочей станции Windows (или Mac / Linux)
- У вас уже установлен PowerCLI и вы подключены. Если нет, ознакомьтесь с этой статьей о установке PowerCLI.
I’ll be using PowerCLI v 11.4.0. I will be working from a Windows 10 workstation with Windows PowerShell 5.1, but you’re welcome to use PowerShell 6 instead as there’s feature parity for this tutorial.
Сбор информации о хостах ESXi с помощью PowerCLI
Перед тем как погрузиться в виртуальный слой нашей среды vSphere, хорошей идеей будет рассмотреть физический аппаратный слой. VMware PowerCLI предоставляет специальную командлету для этой цели, чтобы получить подробную информацию, называемую Get-VMHost
.
Пока вы подключены к вашему серверу vCenter или хосту ESXi, выполните следующий командлет.

Поскольку я подключен к серверу vCenter Appliance, управляющему двумя отдельными хостами ESXi, мне предоставлена базовая информация о управляемых хостах. Get-VMHost
позволяет рассмотреть аппаратные возможности ваших виртуализированных хостов. Однако, по умолчанию, Get-VMHost
не возвращает всю доступную информацию.
Если вы направите вывод командлета Get-VMHost
в Format-List
, вы получите консольный вывод для всей информации о заданных хостах.

Get-VMHost | Format-List
В качестве альтернативы, вы можете быть более избирательными и выбирать только отдельные свойства объекта VMHost, с которым вы работаете, например:
Использование этого более подробного вывода предоставит еще более полное представление об аппаратной основе, на которой выполняются ваши виртуализированные рабочие нагрузки. Некоторая из важной информации включает:
- Информация о проверке лицензии
- Общие суммы по CPU/памяти
- Модель поставщика оборудования
- DNS-имя хоста
После рассмотрения этого можно скомпилировать в файл CSV, возможно, с использованием Export-CSV
командлета.
Проверка ВМ с использованием PowerCLI
Давайте перейдем к следующей теме в этом уроке PowerCLI, рассмотрев виртуальные хосты и то, как можно проверить, какие виртуальные машины в данный момент присутствуют на указанном хосте ESXi.
Команда Get-VM
– это удобная команда, которую можно использовать для просмотра информации о виртуальных машинах.
Вывод этой команды будет выглядеть примерно так:

Вышеуказанный вывод предоставляет полный список статусов в данный момент работающих виртуальных машин на указанном хосте. Если вы не укажете индивидуальный хост, как я сделал выше, вы получите таблицу с информацией для каждого последующего хоста и виртуальных машин на каждом из них.
Если вы когда-либо решите проблему и вам понадобится знать количество виртуальных машин на определенном хосте или если у вас есть необходимость использовать VMware PowerCLI для сбора информации о хосте ESXi, вы можете использовать эти команды впереди. Функциональность отчетности, которую у вас под рукой, начинает расширяться!
Инспекция виртуальных переключателей с использованием PowerCLI
Для тех из нас, кому предоставлена задача настройки или администрирования виртуальных сетей кластера vCenter, существует полный набор сетевых команд для любого случая использования. Если вы хотите увидеть настроенные виртуальные переключатели в вашей среде vSphere, вы будете использовать следующее:
В зависимости от количества виртуальных сетей и виртуальных переключателей ваш список может быть довольно большим. В моем случае, как видите ниже, у меня есть один DSwitch, который является Distributed Virtual Switch.
В реализации Enterprise vSphere, где есть множество хостов ESXi в кластере, DSwitches упрощают развертывание виртуальных коммутаторов и групп портов по множеству хостов с одинаковой конфигурацией. Это позволяет избежать ручного труда при создании идентичных сетевых конфигураций на каждом хосте и является отличным способом масштабирования вашего кластера!

Поиск ВМ, подключенных к виртуальной сети с помощью PowerCLI
При попытке сузить область проблемы, вы можете задаться вопросом, какие ВМ подключены к каким сетям. Чтобы выяснить это, вы можете использовать команду Get-VirtualPortGroup
. Давайте изучим эту команду в этом учебнике по PowerCLI.
A port group is essentially a virtual network. To display all port groups, run Get-VirtualPortGroup
without any parameters. You should then see a listing of all virtual port groups present in your vSphere environment.

Чтобы найти все ВМ внутри этой группы портов (DPortGroup в моем случае), вы можете запустить следующий сценарий. Обязательно замените значение DPortGroup на имя вашей виртуальной группы портов.
В этой однострочной команде мы получаем список всех виртуальных машин, существующих в этом виртуальном центре, и затем фильтруем его с помощью команды Where-Object
, чтобы получить только те ВМ, у которых имя сети совпадает с нашей группой портов.

С этим выводом вы сможете определить, какие машины подключены и сконфигурированы для каждой сети.
Когда вам зададут вопрос о том, как найти и проанализировать, какие ВМ подключены к определенной сети в VMware, теперь вы сможете предоставить решение на основе PowerCLI для этого вопроса.
Получение информации о версии ОС на ваших ВМ с помощью PowerCLI
Основная часть административной работы внутри VMware выполняется на уровне виртуальных машин. Вероятно, вам придется выполнить бесчисленные запросы на выполнение задач, таких как получение списка всех размеров жестких дисков на виртуальных машинах или получение версий гостевых ОС для всех ваших серверов, среди прочего.
Эти задачи являются тяжеловесными в масштабе. PowerCLI способен оптимизировать их с помощью нескольких важных командлетов, которые следует добавить в ваш арсенал, так что давайте рассмотрим их в этом уроке по PowerCLI.
В какой-то момент вам могли задать вопрос: “Сколько у нас серверов Ubuntu в нашем кластере VMware?”. Возможно, вы затем потратили слишком много времени, щелкая вокруг в vCenter в поисках ответа. PowerCLI может упростить этот процесс, просматривая объекты виртуальных машин в vCenter и применяя некоторую магию PowerShell к выводу.
Взгляните на следующий сценарий, который собирает информацию о виртуальных машинах. В этом отрывке используется команда Get-View
, о которой мы поговорим немного позже, но пока вы должны знать, что это продвинутый способ получения свойств объектов VMware. В данном случае мы собираем вложенные свойства, которые легче всего извлекать этим методом.
Вышеуказанный код получает список виртуальных машин с помощью командлета PowerCLI Get-VM
, сортирует этот список с помощью командлета PowerShell Sort-Object
, а затем получает некоторые свойства объекта с использованием командлета PowerCLI Get-View
.
Запуск этого в моей среде дает следующий результат. Вы можете увидеть имя виртуальной машины в vCenter, Configured OS
, который определяет, как виртуальное оборудование VMware настроено на интерпретацию гостевой операционной системы, и фактическую Running OS
, представляющую фактическую операционную систему.

Когда виртуальные машины replicant и Scriptrunner отключены в кластере, вы не сможете увидеть значение Running OS
для них. Операционная система собирается службой VMware Tools. Если она недоступна, PowerCLI не может получить информацию об операционной системе.
Создание отчетов CSV с помощью PowerCLI
VMware Tools – это служба в гостевой операционной системе как для виртуальных машин Windows, так и для Linux, которая предоставляет гипервизору дополнительную информацию и административные возможности. Обычно это включает чистое завершение работы, информацию об операционной системе и более высокое разрешение консоли для просмотра виртуальных машин.
A convenient way to report on and provide this information would be to pipe the above script into the Export-CSV
cmdlet. Export-Csv
will create a CSV file with the same information you see in the console.
После выполнения приведенного выше кода вы сможете открыть CSV-файл с помощью Excel для просмотра отчета.

Проверка виртуальных жестких дисков с помощью PowerCLI
Команда Get-Harddisk
– еще одна полезная команда. Команда Get-HardDisk
позволяет получить информацию о виртуальных жестких дисках, подключенных к виртуальным машинам.
Например, чтобы запросить информацию о виртуальном жестком диске, подключенном к виртуальной машине exchange1, можно выполнить следующее:

Некоторая из этой информации может быть избыточной, например, емкость в КБ по сравнению с ГБ. Но есть ценность в знании StorageFormat
(типы тонкого/толстого выделения). И знание имени файла VMDK.
Например, если вы обнаружите общую проблему, и все виртуальные жесткие диски находятся на одном томе хранения данных, это знание может ускорить устранение неполадок.
Проверка виртуальных сетевых адаптеров с помощью PowerCLI
Кроме того, чтобы проверить информацию о жестком диске ваших виртуальных машин, вам также может потребоваться проверить виртуальные сетевые адаптеры. Для проверки этих свойств для одной виртуальной машины вы можете использовать командлет Get-NetworkAdpter
.
В то время как ранее вы искали все виртуальные машины, находящиеся в той же сети, на этот раз вы хотите увидеть только адаптеры, подключенные к определенной виртуальной машине.

Это полезно при устранении неполадок в виртуальных машинах с несколькими подключенными сетевыми адаптерами. Вы можете быстро и наглядно определить, подключены ли эти адаптеры к правильным сетям.
Запуск сценариев PowerShell в виртуальных машинах с помощью Invoke-VMScript
С помощью командлета Invoke-VMScript
вы также можете выполнять код PowerShell непосредственно внутри виртуальной машины; нет необходимости в сетевом подключении. Если вы когда-либо использовали PowerShell Direct в среде Hyper-V, это будет похожим опытом.
Вместо создания сеанса удаленного управления PowerShell или использования командлета Invoke-Command
через сеть, командлет Invoke-VMScript
может отправлять команды непосредственно в виртуальную машину без обычного подключения WinRM или SSH.
В качестве примера, возможно, вы хотели бы выполнить простой список каталога на виртуальной машине с именем exchange1. Для этого вы передадите dir C:\
в качестве значения параметра ScriptText
, как показано ниже.
Результаты такие, как если бы вы выполнили команды непосредственно из консоли виртуальной машины. Invoke-VMScript
затем передает всю выходную информацию, возвращенную командой, выполненной на виртуальной машине.

Хотя это базовый пример, вы можете усложнить его по своему усмотрению. Эта cmdlet PowerCLI позволяет указывать пакеты, PowerShell или типы Bash в параметре ScriptText
.
Вы также можете сделать это более сложным. Ниже вы можете видеть, как использовать Invoke-VMScript
для выполнения кода PowerShell с использованием отдельной переменной $script
для ввода параметра ScriptText
. Это позволяет нам создавать более настраиваемый ввод сценария для обработки виртуальной машиной.
Значение параметра ScriptText
должно быть строкой. Поэтому переменная $script
имеет внешние одинарные кавычки, как необходимость.
Вы также можете заметить использование параметра GuestCredential
. Этот параметр используется для аутентификации в операционной системе виртуальной машины. Этот параметр особенно полезен, если вы хотите выполнить сценарий от имени другой учетной записи.
Ваш сценарий в действии должен привести к результату, подобному приведенному ниже.

Результат этого сценария предоставляет нам информацию о диске виртуальной машины. Исходя из этого, вы должны знать, что это удаленная виртуальная машина из-за VMware Virtual Disk
в качестве понятного имени диска.
Достижение продвинутого уровня с Get-View
Возможно, вы замечали, что некоторые из основных командлетов возвращают свойство с именем ExtensionData
. Вы можете найти это свойство, передавая множество командлетов PowerCLI в командлет PowerShell Get-Member
. Если вы задавались вопросом, что это такое, то сейчас у вас есть шанс узнать.
Следующим шагом в этом исследовании является понимание командлета Get-View
. VMware PowerCLI использует множество различных запросов к виртуальной машине для предоставления красивого и простого вывода командлета Get-VM
. Но под капотом есть много функций, к которым можно получить доступ только с использованием командлета Get-View
.
Вероятно, вы увидите много скриптов, использующих этот командлет. Было бы полезно потратить некоторое время, привыкая к тому, чтобы видеть этот командлет в действии. Для ознакомления используйте командлет Get-View
, чтобы получить информацию о виртуальной машине (exchange1 в этом примере).
Вы можете видеть, что параметры Filter
этого командлета требуют использования хеш-таблицы PowerShell, а не отдельных строковых значений. Будьте внимательны при создании своих собственных уникальных скриптов!
Результатом вышеуказанной команды является множество вложенной конфигурационной информации и параметров методов для выполнения действий против виртуальной машины или получения свойств объекта.

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

Возможно, вам захочется выбрать одно свойство. Если это так, вы можете выполнить следующую команду, чтобы сузить до отдельного значения.
Существует множество вариантов Get-View
для всех типов объектов VMware. Не стесняйтесь исследовать все эти варианты и изучить эту информативную статью от VMware, которая подробно описывает эту мощную команду!
Захват кода VMware – учитесь на своих действиях
Если вы хотите воспользоваться PowerCLI, но предпочитаете не писать код, Захват кода в vCenter создан специально для вас. Захват кода – это новый инструмент разработчика, действующий аналогично Центру администрирования Active Directory. Давайте рассмотрим Захват кода в этом руководстве по PowerCLI.
Этот инструмент записывает все ваши действия в графическом интерфейсе. Затем он преобразует все эти действия и предоставляет вам сценарии PowerCLI.
По умолчанию Захват кода выключен. Чтобы включить его, откройте ваше виртуальное устройство vCenter и перейдите к Меню –> Центр разработчика, как показано ниже.

После перехода на вкладку Центр разработчика переключите параметр Включить захват кода.

Когда вы включите Захват кода, вы увидите красную кнопку Запись в заголовке вашего vCenter. После включения, когда вам нужно записать действие и преобразовать его в вывод PowerCLI, вы должны записать действия в графическом интерфейсе, нажав кнопку запись.

Красная кнопка запись появится рядом с разделом вашего пользователя в vCenter, чтобы вы могли записывать в любое время.
Для демонстрации Захвата кода пройдите мастера создания Новой виртуальной машины.
- Нажмите кнопку Запись, чтобы начать запись. Это вызовет начало пульсации красной кнопки Запись.
- Щелкните правой кнопкой мыши на вашем хосте VMware и Создайте новую виртуальную машину. Пройдите через получившийся мастер, создавая новую виртуальную машину со всеми значениями по умолчанию.
- После создания виртуальной машины нажмите кнопку записи и остановите запись.
Результирующий вывод может быть немного более подробным, чем ожидалось. Вывод даже включает все действия просмотра графического интерфейса перед созданием виртуальной машины. Но вы должны увидеть раздел, обозначенный в комментариях, начиная с CreateVM_Task
. Это то место, где начинается код создания виртуальной машины.
Ниже приведен фрагмент вывода CreateVM_Task процесса Мастера создания новой виртуальной машины в графическом интерфейсе через Захват кода:

Этот вывод может быть немного подавляющим, но он непосредственно показывает вам количество доступных параметров конфигурации для ваших виртуальных машин. В зависимости от ваших собственных потребностей, теперь вы можете вносить изменения в свои собственные сценарии и настраивать их на свое усмотрение.
Утилита Захвата кода не ограничивается только созданием виртуальных машин. Она также может создавать код для изменений в сети, небольших модификаций виртуальных машин или изменений конфигурации хоста. Благодаря возможности просмотра вывода PowerCLI действий GUI вы можете сократить путь к развертыванию инфраструктуры как кода.
Сводка по руководству PowerCLI
В этой статье ты коснулся многих вопросов. Классная работа! Надеюсь, ты осознал мощь, которую PowerCLI приносит в управление инфраструктурой VMware.
В PowerCLI есть много командлетов для широкого спектра продуктов, но здесь мы рассмотрели только несколько из них. Обязательно следи за этим блогом для получения больше статей об этом замечательном инструменте!