如何在Hyper-V里使用PowerShell或VBScript腳本?
為了有效地管理虛擬化平臺(tái),你需要強(qiáng)有力的腳本工具。這能允許幾種級(jí)別的配置,并且縮短配置時(shí)間。微軟hypervisor的腳本選項(xiàng)包括能在Hyper-V腳本環(huán)境里使用VBScript和增強(qiáng)型PowerShell。在本文中,TechTarget中國(guó)特約虛擬化專家Rick Vanover將介紹Hyper-V腳本是如何工作的,并舉出幾個(gè)例子。
Hyper-V的腳本環(huán)境通常叫做Windows Management Instrumentation(WMI),我們將注重虛擬化命名空間。使用WMI界面,管理員擁有使用Hyper-V完成大量任務(wù)的腳本。使用PowerShell Management Library讓管理更加輕松。
確定使用何種腳本取決于需要什么及可用什么。我會(huì)關(guān)注不能由System Center Virtual Machine Manager(SCVMM)集中管理的Hyper-V服務(wù)器,因?yàn)槲④洖镾CVMM實(shí)施提供了額外的腳本選項(xiàng)。檢查TechNet頁(yè)查看SCVMM腳本概況。
微軟更擅長(zhǎng)書寫腳本
我的職業(yè)就是圍繞著所需的腳本打轉(zhuǎn)。微軟有比你或者我自己獨(dú)立創(chuàng)建的更好的腳本。幸好有許多資源可以使用。下面是一個(gè)清單,列出了開始使用Hyper-V腳本的在線資源:
Virtual PC Guy的網(wǎng)絡(luò)日志。Ben Armstrong的Microsoft Developer Network (MSDN)博客有來自所有微軟虛擬化系統(tǒng)的簡(jiǎn)單腳本資源。
Taylor Brown的博客。這是另一個(gè)強(qiáng)有力的資源。Brown包括了幾個(gè)使用案例,包括關(guān)于SCVMM的一個(gè)案例。
微軟虛擬化團(tuán)隊(duì)博客地址。這個(gè)博客包括所有與Hyper-V相關(guān)的東西,也有其他虛擬化資源。
PowerGUI.org的Hyper-V PowerPack。這相當(dāng)于VMware的VI Toolkit,來自PowerGUI的功能是必須要有的,確保查看TechTarget上Eric Seibert寫的關(guān)于這個(gè)工具包的技巧。
獲取虛擬機(jī)信息的案例
既然我們對(duì)腳本選項(xiàng)作了一個(gè)概述,現(xiàn)在我們來看看實(shí)例。在Hyper-V里使用的PowerShell腳本,幾乎每個(gè)資源都以查詢腳本開始,尤其是包括決定性操作的腳本。這只是與Hyper-V的虛擬化命名空間交互影響的一個(gè)單行方式,并獲取虛擬機(jī)信息就像它存在于命名空間。許多腳本想要查詢這個(gè)獲取當(dāng)前的狀態(tài),如OperationalStatus的值,這表明了虛擬機(jī)的運(yùn)行狀態(tài)。下面這個(gè)簡(jiǎn)單的命令能從名為“TESTVM1”的虛擬機(jī)獲取信息:
Get-WmiObject -Namespace root\virtualization -Query "Select * From Msvm_ComputerSystem Where ElementName='TESTVM1'"
如果你想在自己的環(huán)境中運(yùn)行虛擬機(jī),那它的名字是唯一需要更改的地方。當(dāng)在PowerShell里執(zhí)行時(shí),顯示結(jié)果見下圖1:
點(diǎn)擊放大
注意,虛擬機(jī)的OperationalStatus值顯示為“2”,意味著它在運(yùn)行。
使用VBScript腳本停止或啟動(dòng)虛擬機(jī)
開啟和停止虛擬機(jī)這樣的基本任務(wù)是學(xué)習(xí)腳本的好的開始。不同于PowerShell,Hyper-V機(jī)器能通過VBScript交互,并且能完全訪問WMI虛擬化命名空間。下面的腳本執(zhí)行的是啟動(dòng)使用由VBScript關(guān)閉的虛擬機(jī):
Option Explicit
Dim CallWMI
Dim InventoryVMs
Dim YourVM
YourVM = "TESTVM1"
Set CallWMI = GetObject("winmgmts:\\.\root\virtualization")
Set InventoryVMs = CallWMI.ExecQuery("SELECT * FROM Msvm_ComputerSystem
WHERE ElementName='" & YourVM & "'")
InventoryVMs.ItemIndex(0).RequestStateChange(2)
如PowerShell,腳本里唯一需要更改的地方是“YourVM”的在線值,VBScript。保存這個(gè)文本為本地文件系統(tǒng)上的.VBS文件,允許其在本地執(zhí)行。
現(xiàn)在我們?cè)谶h(yuǎn)程Hyper-V服務(wù)器上執(zhí)行關(guān)閉命令。先前的例子是為了在擁有Hyper-V和特定虛擬機(jī)的服務(wù)器上本地運(yùn)行腳本。有多臺(tái)Hyper-V服務(wù)器并且不執(zhí)行SCVMM對(duì)環(huán)境有利。這個(gè)腳本將在Server55上遠(yuǎn)程關(guān)閉(強(qiáng)制關(guān)閉)TESTVM1虛擬機(jī)。
Option Explicit
Dim CallWMI
Dim InventoryVMs
Dim YourVM
YourVM = "TESTVM1"
Set CallWMI = GetObject("winmgmts:\\SERVER55\root\virtualization")
Set InventoryVMs = CallWMI.ExecQuery("SELECT * FROM Msvm_ComputerSystem
WHERE ElementName='" & YourVM & "'")
InventoryVMs.ItemIndex(0).RequestStateChange(3)
注意,第六行輸入了Server55的名字,這是宿主TESTVM1的Hyper-V服務(wù)器。它能從系統(tǒng)遠(yuǎn)程運(yùn)行,注意WMI命名空間,如另一臺(tái)Windows Server 2008服務(wù)器。強(qiáng)制關(guān)閉如上面例子中最后一行的代號(hào)3發(fā)送。其他流行的虛擬機(jī)代號(hào)包括以下這些:
Reboot (10):這個(gè)代號(hào)在虛擬機(jī)上執(zhí)行硬啟動(dòng)。
Pause (32768):這個(gè)代號(hào)暫停虛擬機(jī)。
測(cè)試Hyper-V腳本
Hyper-V腳本應(yīng)該在測(cè)試環(huán)境里執(zhí)行。如廣告所說,PowerShell是一個(gè)非常有力的shell環(huán)境。寫入在VBScript里的腳本有同樣的風(fēng)險(xiǎn),因?yàn)樗鼈冏隽四愀嬷氖?,就如它們也將做你告知的事。但發(fā)送命令時(shí),沒有撤銷按鈕或者退回命令。簡(jiǎn)單來說,這個(gè)命令假定知道你要做什么。同樣,權(quán)限也是遠(yuǎn)程Hyper-V服務(wù)器需要關(guān)注的問題。更多信息可以參照技巧:Hyper-V的權(quán)限模式。
總結(jié)
要自動(dòng)化Hyper-V環(huán)境要素,管理員有大量的選擇。有了經(jīng)驗(yàn)和耐心,你就能讓Hyper-V與你所創(chuàng)建的PowerShell或VBScripts協(xié)調(diào)工作。
【編輯推薦】