VMware vSphere PowerCLI — это набор модулей PowerShell, позволяющий администрировать компонентами инфраструктуры VMware из командной строки. Вы можете использовать PowerCLI для получения состояния виртуальных машин, хранилищ, сетей, пользователей, управлять различными настройками, создавать новые объекты и использовать PowerShell в скриптах автоматизации ESXi, vCenter Server, vSphere, vSAN и других продуктов VMware.
Установка VMware PowerCLI в Windows
Вы можете установить модуль VMvware PowerCLI в Windows в онлайн или офлайн режиме.
Для онлайн установки модуля PowerCLI из PowerShell Gallery выполните команду:
Install-Module -Name VMware.PowerCLI
Если нужно установить модуль только для текущего пользователя:
Install-Module VMware.PowerCLI -Scope CurrentUser
Find-Module -Name VMware.PowerCLI -AllVersions|select version
Install-Module -Name VMware.PowerCLI -RequiredVersion 12.1.0.17009493
В процессе установки вам будет предложено обновить Nuget провайдер. Также подтвердите установку из недоверенного репозитория PowerShell Gallery (можно сделать его доверенным с помощью командлета
Set_PSRepository
).
Проверьте, что модули PowerCLI установлены и выведите их версии:
Get-Module -ListAvailable VMware* | Select Name,version
Для обновления версии PowerCLI достаточно выполнить команду:
Update-Module -Name VMware.PowerCLI
choco search vmware
и установить его:
choco install vmware-powercli-psmodule
Модуль powercli в winget пока не доступен.
Если вы хотите установить PowerCLI на изолированном от интернета компьютере, можете использовать офлайн установщик.
- Скачайте zip архив с модулем PowerCLI https://code.vmware.com/web/tool/vmware-powercli (размер zip архива с текущей версией VMware-PowerCLI 12.4.1 около 80 Мб);
- Распакуйте zip архив в каталог с модулями PowerShell на компьютере (список таких каталогов можно получить с помощью команды
$env:PSModulePath
). Обычно используется каталогC:\Program Files\WindowsPowerShell\Modules
; - Снимите блокировку с файлов, скачанных с интернета:
cd “c:\Program Files\WindowsPowerShell\Modules”
Get-ChildItem * -Recurse | Unblock-File
- Запустите консоль PowerShell и проверьте что модуль PowerCLI теперь доступен:
Get-Module -Name VMware.PowerCLI –ListAvailable
Для импорта модуля PowerCLI в текущую сессию, в PowerShell ISE или Visual Studio Code, выполните команду:
Import-Module VMware.VimAutomation.Core
При загрузке модуля может появиться ошибка вида:
Import-Module: File C:\Program Files\WindowsPowerShell\Modules\VMware.VimAutomation.Sdk\12.4.0.18627054\VMware.VimAutomation.Sdk.psm1 cannot be loaded because running scripts is disabled on this system
В этом случае нужно настроить политику выполнения скриптов PowerShell. Чтобы разрешить запуск модуля в текущей сессии:
Set-ExecutionPolicy Unrestricted -Scope Process
Можно использовать модуль PowerCLI, установленный на другом компьютере. Для этого его нужно импортировать удаленно через PSRemoting:
$session = New-PSSession -ComputerName msk-man01
Импортируйте модуль PowerCLI на ваш компьютер:
Import-Module -PSsession $session -Name VMware.VimAutomation.Core
Не забудьте закрыть сессию после окончания:
Remove-PSSession $session
Установка модулей PowerCLI в Linux
Вы можете установить и использовать PowerCLI не только в Windows, но и в Linux. Сначала установите PowerShell Core в ваш дистрибутив Windows, а затем выполните следующие команды в консоли для установки VMware PowerCLI:
pwsh
Install-Module -Name VMware.PowerCLI
Импортируйте модуль в сессию:
Import-Module VMware.PowerCLI
Основные команды PowerCLI для управления VMware vSphere и виртуальными машинами
Список командлетов в модулях PowerCLI можно получить так (доступно более 2200 команд):
Get-Command –Module *vmware*
Чтобы при запуске модуля не появлялось предложение сбора данных через VMware Customer Experience Improvement Program (CEIP), можно отключите это уведомление:
Set-PowerCLIConfiguration -Scope AllUsers -ParticipateInCeip $false
Для подключения к vCenter Server или конкретному хосту ESXi:
Connect-VIServer <FQDN_имя_vCenter_или_ESXi_хоста>
Connect-VIServer Error: Invalid server certificate. Use Set-PowerCLIConfiguration to set the value for the InvalidCertificateAction option to Prompt if you'd like to connect once or to add a permanent exception for this server. Additional Information: Could not establish trust relationship for the SSL/TLS secure channel with authority.
Чтобы игнорировать самоподписанные сертификаты:
Set-PowerCLIConfiguration -Scope AllUsers -InvalidCertificateAction Warn
Вывести список виртуальных машин, которые зарегистрированы на вашем сервере ESXi (или vCenter):
Get–VM
Вывести только отключенные ВМ:
Get-VM | Where {$_.Powerstate -ne “PoweredOn”} | Select Name, VMHost, NumCPU, MemoryMB, Version|Format-Table
Запустить виртуальную машину:
Start-VM -VM TestVM01
Корректная перезагрузка ВМ (через агента VMware tools):
Restart-VMGuest -VM TestVM01 -Confirm:$False
Выключить ВМ:
Shutdown-VMGuest -VM TestVM01 -Confirm:$False
Вывести список снапшотов для конкретной ВМ:
Get-VM| Get-Snapshot| Format-List
Чтобы переместить запущенную ВМ на другой хост с помощью VMotion используется команда Move-VM. Например, мы хотим перенести все ВМ с хоста msk-esxi1 на msk-esxi2:
Get-VMHost msk-esxi1|Get-Vm| Move-VM –Destination (Get-VMHost msk-esxi2)
Чтобы создать новую виртуальную машину используется командлет New-VM:
New-VM –Name testVM -VMHost msk-esxi1 –ResourcePool Production –DiskGB 10 –DiskStorageFormat Thin –Datastore MSA2000_2_Prod1
Чтобы изменить настройки виртуальной машины, используйте
Set-VM
.
С помощью командлетов PowerCLI можно взаимодействовать с гостевыми операционными системами виртуальных машин. Для этого в ВМ должны быть установлены VMware Tools. Вы можете обновить VMware Tools так:
Get-VMGuest VMname1 | Update-Tools
С помощью Invoke-VMS можно выполнить скрипт в гостевой ОС с Windows:
$script = '"%programfiles%\Common Files\Microsoft Shared\MSInfo\msinfo32.exe" /report "%tmp%\inforeport"'
Invoke-VMScript -ScriptText $script -VM msk-dc01 -HostCredential $hostCred -GuestCredential $msk-dc01Cred -ScriptType Bat
Или можно скопировать файл на все ВМ:
Чтобы скопировать определенный файл на все ВМ, выполните команду:
Get-VM | Copy-VMGuestFile -Source C:\PS\get-info.ps1 -Destination C:\PS\ - LocalToGuest -GuestUser administrator -GuestPassword p@$$w0rdes2
В модуле есть командлеты для управления кластерами, датацентрами, хранилищами и хостами ESXi:
Get-VMHost
Get-Datacenter
Get-Cluster
Get-Datastore
Get-VirtualPortGroup
Вывести список ESXi хостов в кластере:
Get-Cluster mskprod1 | Get-VMHost | sort name
Перевести определенный хост ESXi в режим обслуживания:
Set-VMhost -VMHost msk-esxi1 -State Maintenance
Подключить iSCSI LUN к хосту ESXi и создать на нем VMFS хранилище:
Get-ScsiLun -VmHost msk-esxi1 | ft
New-Datastore -Name 'new-datastore' -VMHost msk-esxi1 -Path naa.6000xxxxxxxxxxxxxxxx -Vmfs
Примеры скриптов PowerCLI
На сайте есть несколько примеров использования PowerCLI для получения информации об элементах инфраструктуры VMware и автоматизации некоторых действий. Вы можете использовать примеры из этих статей в качестве основы для ваших скриптов PowerCLI:
- Проверка свободного места на VMFS хранилищах
- Сопоставить диски в ВМ Windows с vmdk дисками
- Поиск ВМ по IP или MAC адресу
- Настройка параметров SNMP на хостах VMware ESXi
- Перезапуск зависшей виртуальной машины на VMware
- Установка обновлений Windows в шаблоны виртуальных машин
- Бэкап/восстановление конфигурации ESXi хостов
- Интеграция драйверов в установочный образ ESXi
- Поиск ВМ со статусом Virtual Machine disks consolidation is needed
- Обновление версии vm hardware
- Настройка автозапуска виртуальных машин VMware