vSphere自動化管理-PowerCLI
一、自動化管理途徑
對vSphere進行自動化管理可透過下列管道
1. vCenter Orchestrator:一般沒有意外的話,回跟隨vCenter一併安裝。這也是一個Web型態服務的網站。提供圖形化介面,設定或定義工作流程,其運作體系最為複雜,要經過一些設定後才能使用,需專章說明之。
2. PowerCLI:透過附加擴充PowShell指令集,並可集結寫成.ps1檔案,進行一連串自動化管理。必須有PowerShell且安裝PowerCLI(官網下載)。
3. vCLI:與PowerCLI不同之處在於這是透過安裝vSphere CLI所擴充出來的,指令也不相同,不需要PowerShell。
4. vMA:VMWare官方把一些SDK Tools及環境安裝在Linux上,並封裝成ovf,使用者掛上虛擬機之後,就能透過vCLI指令進行自動化管理。
官網下載vMA包。
解開
掛上ovf。
5. Perl+vSphere API:顧名思義使用perl語言來定義自動化工作。perl個人不熟,有興趣的朋友自行研究。
(以下僅針對PowerCLI做部分示範。)
二、使用PowerCLI Script進行自動化管理。
現行PowerCLI包含了幾乎260個以上的cmdlet,幾乎涵蓋vSphere管理的各個面向。
安裝PowerCLI(VMWare官網下載,如果是Windows 7或2008以前的系統,必須先至微軟官網下載安裝PowerShell)。
這個提示是告訴你,安裝完畢要執行vSphere相關PowerShell指令,必須使用Set-ExecutionPolicy指令調整安全性原則。
預設元件安裝。
安裝完,即可看見多了”VMWare vSphere PowerCLI”這區。
這就是沒有調整安全原則,執行指令產生的錯誤。
原廠建議指令。
Set-ExecutionPolicy RemoteSigned |
或
Set-ExecutionPolicy Bypass |
就能正常執行了。
範例:
1. 連線vCenter
Connect-VIServer –Server <vCenter Server hostname> –User <Username>–Password <password> |
2. 查閱幫助
Get-Help Connect-VIServer |
3. vCenter內目前連線主機
Get-VMHost |
4. 取得主機內的VMs
Get-VMHost "192.168.157.50" | Get-VM |
5. 取得VMs網路設定
Get-VMHost "192.168.157.50" | Get-VM | Get-NetworkAdapter |
6. 顯示VMs網路介接Switch名稱、網卡類型
PowerCLI C:\Program Files (x86)\VMware\Infrastructure\vSphere PowerCLI> Get-VMHost "192.168.157.50" | Get-VM | Get-NetworkAdapter|select | Select-Object NetworkName,Type |
7. 取得PowerCLI所有相關管理指令列表
Get-VICommand |
8. 有關VM的操作指令列表(PowerShell內建指令)
Get-Command –Noun VM |
9. 取得VMWare模組包含Get的指令(PowerShell內建指令)
Get-Command -Module VMWare* -Verb Get |
10. 從Help文件中,以萬用字元搜尋指令
Get-Help *network* |
11. 取得隸屬dynamic-xp這個ResourcePool管理的VMs
Get-ResourcePool dynamic-xp | Get-VM |
12. 加上Get-Member,可傳回該物件可用的方法或屬性。
Get-ResourcePool dynamic-xp | Get-VM | Get-Member |
13. 把取得回傳的物件指定給變數,後續就可以以物件導向的方式,存去物件及屬性,不用重複打一長串指令。
$VM = Get-VM xp-2 $VM.PowerState |
於是就可以檢查Guest OS內,VMTools的執行狀況。
$VM.Guest.ExtensionData.ToolsStatus |
找出所有過期VMTools的Guest
Get-VM | Where-Object{$_.Guest.ExtensionData.ToolsStatus -eq "ToolsOld"} |
14. 同一般PowerShell指令碼一樣,把指令集結成檔,副檔名為ps1,可自動批次執行。
test1.ps1
Move-VM -Destination "192.168.157.50" -VM "xp-4" Get-VM "xp-4" | Get-VMHost |
在PowerCLI下直接執行
15. 凡隸屬在192.168.157.50主機的VM都建立一個名為PowerCLI Snapshot 的Snapshot。(注意:連關機的也會做)
Get-VMHost "192.168.157.50" | Get-VM | New-Snapshot -Name "PowerCLI Snapshot" |
相對有增加就有移除
Get-VMHost "192.168.157.50" | Get-VM | Get-Snapshot -Name "PowerCLI Snapshot" | Remove-Snapshot |
16. 查詢Host上所有VMs的Snapshot
Get-VMHost "192.168.157.50" | Get-VM | Get-Snapshot |
17. 切換VMs隸屬的網路群組(Port Group)
PowerCLI C:\> Get-VM | Get-NetworkAdapter | Where-Object {$_.NetworkName -like "VM Network"} | Set-NetworkAdapter -NetworkName "dvPortGroup" -Confirm:$false |
若轉不過去,會顯示錯誤。(錯誤的部分是因為該VM是VMWare View Desktop Auto Pool的母本)
18. 取得在” dynamic-xp”這個Resource Pool內的VMs含作業系統列表。
Get-ResourcePool "dynamic-xp" | Get-VM | Get-VMGuest |
19. 作業系統是XP的VM表,可加上ResourcePool名稱作為篩選要件。
Get-ResourcePool | Get-VM | Get-VMGuest | Where-Object {$_.OSFullName -match "xp"} |
20. 整批移動ResourcePool內VMs,到另一個ResourcePool。(PowerShell指令集)
1: $VMs = Get-VM -Location (Get-ResourcePool "dynamic-xp")
2: foreach($vm in $VMs){
3: $vmguest = Get-VMGuest -VM $vm
4: if($vmguest.OSFullName -match "xp"){
5: Move-VM $vm -Destination (Get-ResourcePool "client-xp")
6: }
7: }
如果有頻繁撰寫PowerShell的朋友,強烈建議下載PowerGUI SCript Editor這套軟體,不僅免費,同時有直接支援VMWare PowerCLI智慧語法功能,助益不小。
下載網址