PowerCLI 對vm批量關機


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
}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM