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
Как её запустить после установки в виде модуля PowerShell?
Для загрузки модуля PowerCLI используйте:
Import-Module VMware.VimAutomation.Core -ErrorAction SilentlyContinue
Пример использования есть в статье https://winitpro.ru/index.php/2019/11/21/sopostavit-diski-windows-s-vmdk-vmware/
имхо проще ставить через Install-Module VMware.PowerCLI -Scope CurrentUser в текущего пользователя, без админских прав.
Толстый клиент к сожалению недоступен на оф сайте(ехе), теперь установка только через powerShell, пробовал ради интереса поставить через базовый шелл(v1.0) в вин7, не вышло. Поставил PowerShell7 — все ок скачалось.
Здравствуйте.
Одинаковый URL у ссылок:
Обновление версии vm hardware
Настройка автозапуска виртуальных машин VMware
Спасибо, пофиксили!
Коллеги выложите пожал уста готовый образ для Hyper-V, не получается собрать, постоянные ошибки .\ESXi-Customizer-PS-v2.6.0.ps1 вида:
The VMware.ImageBuilder module is not currently supported on the Core edition of PowerShell
Буду признателен
Судя по ошибке нужно использовать Windows POwerShell 5.1 (powershell.exe) вместо PowerShell Core (pwsh.exe)
не Set_PSRepository, а Set-PSRepository
Если установка была произведена в ручном режиме, из ZIP файла, то может появляться ошибка похожа на указанную ниже, отличаясь путем к модулю или файлом.
Import-Module : Could not load file or assembly 'file:///C:\Program Files\WindowsPowerShell\Modules\VMware.VimAutomation.Sdk\net45\VMware.VimAutomation.Ceip.dll' or one of its dependencies. Operation is not supporte d. (Exception from HRESULT: 0x80131515)
то необходимо разблокировать файлы командой, указав путь к папке с модулями
Get-ChildItem -Path 'C:\Program Files\WindowsPowerShell\Modules\VMware*' -Recurse |Unblock-File -Verbose
Добрый день, подскажите пожалуйста, есть ли команды для копирования файлов остановленной виртуальной машины в другую папку esxi сервера?
Copy-HardDisk
Copies a virtual hard disk to another destination.
Get-HardDisk -VM $vm | Copy-HardDisk "[Storage1]/"
Copy-HardDisk -HardDisk $hdd -DestinationPath "[Storage1] vms/disks" -DestinationStorageFormat Thick
спасибо большое!
подскажите пожалуйста, написал скрип для PS, выполняет ряд определенных действий с нодами запускаясь через планировщик. но этот срипт содержит логин и пароль vCenter.
Есть ли способ скрыть этот пароль или использовать какой-то токен? что-то гугл не подсказал очевидного решения.
Можно сохранить пароль во встроенное шифрованное хранилище:
New-VICredentialStoreItem -Host 192.168.1.100 -User "xx" -Password "xx"
Для подключения без пароля затем нужно просто указать это же имя хоста:
Connect-VIServer 192.168.1.100
Или можно сохранить пароль в файл:
New-VICredentialStoreItem -Host 192.168.1.100 -User "xx" -Password 'xxx' -File C:\vcreds.xml
ПОдключение с сохраненным паролем из файла:
$Creds = Get-VICredentialStoreItem -Host 192.168.1.100 -File C:\vcreds.xml
Connect-VIServer192.168.1.100 -User $Creds.User -Password $Creds.Password
Если при установке модуля указать область CurrentUser, то модули упадут в $HOME\Documents\PowerShell\Modules
Это не очень удобно, потому как данный каталог синхронизируется с облаком по умолчанию и как следствие занимает доступное пространство.
Необходимо либо исключить синхронизацию, либо определить область AllUsers, тогда модули будут в $env:ProgramFiles\PowerShell\Modules
-Scope
The AllUsers scope installs modules in a location that’s accessible to all users of the computer:
$env:ProgramFiles\PowerShell\Modules
The CurrentUser installs modules in a location that’s accessible only to the current user of the computer. For example:
$HOME\Documents\PowerShell\Modules
Выдает ошибку, помогите разобраться
PS C:\WINDOWS\system32> Install-Module -Name VMware.PowerCLI
PackageManagement\Install-Package : Совпадения для указанных условий поиска и имени пакета «VMware.PowerCLI» не найдены
. Чтобы просмотреть все доступные зарегистрированные источники пакетов, используйте командлет Get-PSRepository.
C:\Users\фвьшт\Documents\WindowsPowerShell\Modules\PowerShellGet\1.0.0.1\PSModule.psm1:1809 знак:21
+ … $null = PackageManagement\Install-Package @PSBoundParameters
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (Microsoft.Power….InstallPackage:InstallPackage) [Install-Package], Ex
ception
+ FullyQualifiedErrorId : NoMatchFoundForCriteria,Microsoft.PowerShell.PackageManagement.Cmdlets.InstallPackage
PS C:\WINDOWS\system32>
Проверьте поисков галереи, виден ли ваш пакет:
Find-Module -Name vmware.powercli -Repository PSGallery
Посмотрите, подключен (доступен) ли репозиторий psgallery:
get-PSRepository