VMware vSphere 的 PowerCLI 基礎腳本編寫
先前,我們探討了 PowerCLI——它是什麼、如何安裝,以及如何與 Windows PowerShell ISE 整合。現在,讓我們來看看基本的腳本編寫,包括連線、PowerCLI 指令集,以及迴圈操作。
PowerCLI 基礎腳本編寫
讓我們來看看幾個基本的 PowerCLI 指令塊,了解使用 PowerCLI 從 vSphere 環境中擷取資訊是多麼簡單。請注意,以下內容絕非旨在成為涵蓋所有內容的教學指南,而是對 PowerCLI 的簡介,以及如何開始執行指令塊並學習自動化您的環境。
我們首先需要執行的 Commandlet 是用於實際連線至 vSphere 環境的指令。您可以選擇直接連線至 ESXi 主機,或是連線至 vCenter Server。
若要建立連線,請在已啟用 PowerCLI 的 PowerShell 工作階段中執行以下指令:
connect-viserver –server 〈yourserver〉
執行此指令時,系統會提示您輸入登入憑證。請輸入您的使用者名稱和密碼,無論是您的 ESXi 伺服器 或 vCenter Server。

當我們連線至 ESXi 或 vCenter 時,最基本的指令之一就是檢視環境中的所有虛擬機器。我們使用 get-vm 指令來顯示客體虛擬機器的相關資訊。
Get-VM - The get-vm commandlet lists VMs running on the connected host

若要從 get-vm 使用 commandlet,我們可以透過以下指令顯示完整資訊:
Get-VM | fl– 顯示更詳盡的資訊,例如來賓作業系統、資源池、虛擬機器硬體版本、位置資料夾,以及其他許多詳細資訊。

現在,讓我們透過 Get-VM 指令列指令擷取具體且有用的資訊。我們來找出處於"已關機 (PoweredOff)"狀態的虛擬機器。我們可以從 Get-VM 執行 commandlet,然後將輸出透過管道傳送至 where-object 以篩選出我們想要查詢的特定資訊——在此情況下 PowerState. 如您所見,在取得各種虛擬機器資訊並將這些資訊傳遞給另一個 PowerShell 指令塊方面,存在著無窮無盡的可能性。
Get-VM | where-object {$_.PowerState –eq “PoweredOff”}

如您所見,這只會顯示處於"PoweredOff"電源狀態的虛擬機器。這非常實用。我們甚至可以將上述指令的輸出結果透過管道傳送至 Start-VM commandlet。因此,基本上我們可以取得所有已關機的虛擬機器,然後將這些虛擬機器開機。
Get-VM | where-object {$_.PowerState –eq “PoweredOff”} | Start-VM

那麼,關閉特定的虛擬機器呢?這我們也能做到。我們可以透過名稱呼叫該虛擬機器,然後使用 Stop-VMGuest 用於啟動來賓作業系統關機的命令。
Get-VM 〈yourvm〉 | Stop-VMguest

如果您不想收到該操作的確認通知,我們可以新增 –confirm:false 參數:

假設我們想查看目前有多少台正在運行的虛擬機器,其記憶體使用量超過 1 CPU 已指派。同樣地,我們可以使用 where-object 用於篩選出 NumCpu 物件。
Get-VM | where-object {$_.NumCpu –gt 1 }

PowerCLI 迴圈
迴圈可讓您對選取的物件執行相同的操作多次,或針對特定次數進行循環處理。例如,透過 foreach 迴圈,我們可以將某項操作重複執行多次。其設定方式如下面的偽代碼所示:
foreach ($var in $vars){
Do something…
}
如果我們想具體指定要對哪些物件執行此操作,例如,可以遍歷來自文字檔的特定虛擬機器清單。要填入該文字檔的內容,我們可以執行我們的 Get-VM 透過 commandlet 篩選出所需的屬性,然後將結果傳送至文字檔。接著,我們可以使用 PowerShell 讀取該文字檔,並將虛擬機器放入陣列中,藉此進行迴圈處理並執行特定動作。以下範例將為清單中的虛擬機器新增一個網路介面卡。
Get-vm | where-object {$_.MemoryGB –eq 4 } | select -ExpandProperty Name | out-file c:VMs.txt
$vms = get-content c:VMs.txt
Foreach-object ($vm in $vms) {
new-networkadapter -vm $vms -NetworkName "〈Port group name〉" -Type "VMXNET3" –startconnected
}
資源
網路上有許多優質的資源,包括個人部落格、官方文件、程式碼範例等等。根據我的經驗,只要你能想到想要做的事情,十有八九已經有人寫過一行程式碼,能夠實現你的需求。 更棒的是,通常你能找到與需求非常接近的範例,只要掌握基礎知識後稍作修改,就能將其調整為符合你的需求。透過這種方式,你不僅能學習 PowerCLI 及其運作原理,還能掌握如何修改程式碼以完成所需的任務。
若要開始查閱文件和其他資源,VMware PowerCLI 的官方發布與文件網站是個絕佳的起點。 在此,您可以下載二進位檔以及官方《使用者指南》。
此外,還有大量包含腳本與範例的書籍,可供您深入研究並加以修改。請記住,外面的 VMware 管理員社群中,大多數人都樂於分享他們在精通 PowerCLI 的過程中,從他人那裡學到的知識。無論是針對具體問題或一般原則,都歡迎向社群中的成員尋求協助。
隨想
PowerCLI 的功能強大,這已是輕描淡寫。 在上述示例中,我們僅僅是略窺一二。任何您需要反覆執行,或在網頁客戶端操作起來繁瑣的任務,都是使用 PowerCLI 編寫腳本的絕佳候選對象。事實上,這通常也是大多數人接觸 PowerCLI 的契機——他們需要自動執行某項任務,或是基於 vSphere 中其他動作的後續操作,又或是那些非常適合透過腳本處理的重複性動作。
學習 PowerCLI 的最佳方式,就是下載並安裝它,然後在實驗環境(例如家用實驗室)中開始實際操作。唯有當您見識到透過自動化來掌控 vSphere 的潛力時,VMware vSphere 環境的真正威力才會被釋放。因此,立即開始使用 PowerCLI 編寫腳本,您將從此愛不釋手!