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