https://docs.vmware.com/cn/VMware-vSphere/index.html 參考文檔
獲取 引用 庫
Save-Module -Name VMware.PowerCLI -Path D:\PowerCLI
$ENV:PSModulePath 查看 ps模塊路徑
把下載的 模塊 復制到 ps模塊路徑下(如把PowerCLI里的內容移到到C:\Program Files\WindowsPowerShell\Modules內)
建立一個 powershell 文件,代碼如下,
應注意 修改下 EsxiHost 為Esxi 的IP,或vCenter的IP或安裝VMware Workstation 的IP。
還要相應的密碼EsxiPassWd 。
思路:
1:鏈接前,先禁用無證書 提示(有證書的忽略此處)。
2:獲取所有 加電的主機
3:遍歷主機的ToolsStatus ,也就是 tools 狀態
4:如果tools 狀態不為 toolsNotInstalled 的,則關閉客戶機否則關機。
5:5秒后,獲取所有加電主機。
6:如果數量不為0,則返回第2步,否則 向主機發送關機指令。
$TextUtf8 = New-Object -typename System.Text.UTF8Encoding Write-Host Write-Host " 安裝tools的關閉系統,沒安裝tools的關閉電源" Write-Host " vCnter關機要 4-6 分鍾" Write-Host pause $EsxiHost = "127.0.0.1" $EsxiUser = "root" $EsxiPassWd = "Passwd@yhc18" Write-Host " 正在連接 服務器 。。。 。。。" $ConnIgnore = Set-PowerCLIConfiguration -InvalidCertificateAction Ignore -confirm:$false $ConnectVIServer = Connect-VIServer -Server $EsxiHost -username $EsxiUser -Password $EsxiPassWd while(1 -eq 1){ $PowerOnVm = get-vm | where {$_.PowerState -eq "PoweredOn"} $PowerOnNum=$PowerOnVm.count if($PowerOnVm.count -gt 0){ cls Write-Host "ID" . "vmName" "ToolsStatus" "(正在運行中)" $index = 0 $PowerOnVm | foreach{ $index++ if($_.extensiondata.guest.ToolsStatus -ne "toolsNotInstalled"){ Write-Host $index. $_.Name " on" }else{ Write-Host $index. $_.Name " off" } } Write-Host "------------------------------------------" $index2=0 $PowerOnVm | foreach{ if($_.extensiondata.guest.ToolsStatus -ne "toolsNotInstalled"){ $index2++; Write-Host "$index2/$PowerOnNum" "關閉客戶機" $_.Name $stopGuest = Get-Vm -Name $_.Name |stop-VMGuest -confirm:$false -ErrorAction SilentlyContinue Start-Sleep -Seconds 3 }else{ $index2++; Write-Host "$index2/$PowerOnNum" "關閉機器" $_.Name $stopGuest = Get-Vm -Name $_.Name |stop-VM -confirm:$false -ErrorAction SilentlyContinue Start-Sleep -Seconds 3 } } }else{ $PowerOnHosts = Get-VMHost| Where {$_.Name -eq $EsxiHost} | Stop-VMHost -confirm:$false -Force:$true cls echo "虛擬機已關機完畢,發送Esxi關機指令,等待Esxi主機關機" pause break #跳出循環 } Start-Sleep -Seconds 5 }