vSphere自動化管理-PowerCLI

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包。

image

解開

image

掛上ovf。

image

5. Perl+vSphere API:顧名思義使用perl語言來定義自動化工作。perl個人不熟,有興趣的朋友自行研究。

 

(以下僅針對PowerCLI做部分示範。)

二、使用PowerCLI Script進行自動化管理。

現行PowerCLI包含了幾乎260個以上的cmdlet,幾乎涵蓋vSphere管理的各個面向。

安裝PowerCLI(VMWare官網下載,如果是Windows 7或2008以前的系統,必須先至微軟官網下載安裝PowerShell)。

image

image

這個提示是告訴你,安裝完畢要執行vSphere相關PowerShell指令,必須使用Set-ExecutionPolicy指令調整安全性原則。

image

預設元件安裝。

image

安裝完,即可看見多了”VMWare vSphere PowerCLI”這區。

image

這就是沒有調整安全原則,執行指令產生的錯誤。

image

原廠建議指令。

Set-ExecutionPolicy RemoteSigned

Set-ExecutionPolicy Bypass

image

就能正常執行了。

image

 

範例:

1. 連線vCenter

Connect-VIServer –Server <vCenter Server hostname> –User <Username>–Password <password>

 

2. 查閱幫助

Get-Help Connect-VIServer

 

3. vCenter內目前連線主機

Get-VMHost

image

 

4. 取得主機內的VMs

Get-VMHost "192.168.157.50" | Get-VM

image

 

5. 取得VMs網路設定

Get-VMHost "192.168.157.50" | Get-VM | Get-NetworkAdapter

image

 

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

image

 

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

image

 

12. 加上Get-Member,可傳回該物件可用的方法或屬性。

Get-ResourcePool dynamic-xp | Get-VM | Get-Member

image

 

13. 把取得回傳的物件指定給變數,後續就可以以物件導向的方式,存去物件及屬性,不用重複打一長串指令。

$VM = Get-VM xp-2

$VM.PowerState

image

於是就可以檢查Guest OS內,VMTools的執行狀況。

$VM.Guest.ExtensionData.ToolsStatus

找出所有過期VMTools的Guest

Get-VM | Where-Object{$_.Guest.ExtensionData.ToolsStatus -eq "ToolsOld"}

image

 

14. 同一般PowerShell指令碼一樣,把指令集結成檔,副檔名為ps1,可自動批次執行。

test1.ps1

Move-VM -Destination "192.168.157.50" -VM "xp-4"

Get-VM "xp-4" | Get-VMHost

在PowerCLI下直接執行

image

 

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

image

 

16. 查詢Host上所有VMs的Snapshot

Get-VMHost "192.168.157.50" | Get-VM | Get-Snapshot

image

 

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的母本)

image

 

18. 取得在” dynamic-xp”這個Resource Pool內的VMs含作業系統列表。

Get-ResourcePool "dynamic-xp" | Get-VM | Get-VMGuest

image

 

19. 作業系統是XP的VM表,可加上ResourcePool名稱作為篩選要件。

Get-ResourcePool | Get-VM | Get-VMGuest | Where-Object {$_.OSFullName -match "xp"}

image

 

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: }

image

如果有頻繁撰寫PowerShell的朋友,強烈建議下載PowerGUI SCript Editor這套軟體,不僅免費,同時有直接支援VMWare PowerCLI智慧語法功能,助益不小。

下載網址

http://powergui.org/downloads.jspa