среда, 3 февраля 2016 г.

VMware PowerCLI: скрипт включения/выключения виртуальных машин в обозначенный временной период для установки обновлений

Эти скрипты пригодятся вам для следующего сценария: включение виртуальных машин на ночь или на выходные дни для автоматической установки обновлений на гостевую ОС или обновления прикладного ПО.

Последовательность операций следующая:
Скрипт включения при выполнении стартует все виртуалки в указанных папках ("Folder1", "Folder2", "Folder3" и т.д.), которые находятся в выключенном состоянии или паузе. Далее список всех затронутых виртуальных машин сохраняется в .xml файл.

########## Change here for your infrastructure
# vCenter Server Name or Ip
$vCenter="vc.mydomain.local"
# vCenter User Name
$vCenterUser="user"
# vCenter User Password
$vCenterUserPassword="yourpassword"
##############################################
Add-PSSnapin VMware.VimAutomation.Core
Connect-viserver $vCenter -user $vCenterUser -password $vCenterUserPassword -WarningAction 0
$vms = Get-Folder "Folder1" | get-vm *
$vms += Get-Folder "Folder2" | get-vm *
$vms += Get-Folder "Folder3" | get-vm *
$vmArray = @()
foreach ($vm in $vms) {
if($vm.PowerState -ne "PoweredOn"){
  $vm | Start-Vm
  $vmArray += $vm.Id
 }
}
$vmArray | Export-Clixml "C:\Temp\VMs_list.xml"

Скрипт выключения, который выполняется спустя некоторое время после того, как будут установлены необходимые обновления, из .xml файла извлекает список машин и выключает их, посылая команду через "VMware Tools", а при отсутствии утилит - жёстко по питанию.

########## Change here for your infrastructure
# vCenter Server Name or Ip
$vCenter="vc.mydomain.local"
# vCenter User Name
$vCenterUser="user"
# vCenter User Password
$vCenterUserPassword="yourpassword"
##############################################
Add-PSSnapin VMware.VimAutomation.Core
Connect-viserver $vCenter -user $vCenterUser -password $vCenterUserPassword -WarningAction 0
$vmArray = Import-Clixml "C:\Temp\VMs_list.xml"
$vms = Get-Folder "Folder1" | get-vm *
$vms += Get-Folder "Folder2" | get-vm *
$vms += Get-Folder "Folder3" | get-vm *
foreach ($vm in $vms) {
 if($vm.PowerState -eq "PoweredOn" -And $vmArray -match $vm.Id){
  $vmTools = Stop-VMGuest -vm $vm.Name -Confirm:$false
  if($vmTools -eq $null){ 
   Stop-VM -vm $vm.Name -Confirm:$false 
  }
 }
}

Комментариев нет:

Отправить комментарий