如果您使用 Microsoft 的 Hyper-V 虛擬化平台來運行虛擬機器,您可能熟悉使用 Hyper-V 管理員。但您是否知道使用 Hyper-V PowerShell 模塊可以更快地完成更多工作呢?
在這個教程中,您將學會如何使用 PowerShell 管理 Hyper-V 虛擬機,包括創建、移除,還將深入了解虛擬機快照!
先備條件
在這個教程中,您將需要以下列出的東西:
- A Windows client to connect to a remote Hyper-V host. This tutorial uses Windows 10 Pro.
- A Hyper-V host with PowerShell Remoting enabled. The tutorial’s Hyper-V host is named HYPER and is in a workgroup but an Active-Directory joined client and host will work as well.
- A user account on the Hyper-V host in the local administrators group or in the Hyper-V Administrators group. This tutorial will use an account called localadmin.
連接到遠程 Hyper-V 主機
要使用 PowerShell 來操作 Hyper-V,您必須能夠以某種方式與 Hyper-V 主機通信。您可以在本地運行 Hyper-V PowerShell cmdlets 並提供 Hyper-V 主機的名稱,或者您可以使用 PowerShell Remoting 來連接到 Hyper-V 主機本身。
在本教程中,您將建立一個與 Hyper-V 主機的持久連接,並在 Hyper-V 主機上運行命令。
1. 在本地計算機上打開 PowerShell。
2. 執行 Enter-PSSession
cmdlet 並提供遠端 Hyper-V 主機的主機名稱給 ComputerName
參數。此動作會建立互動式工作階段,讓您可以在遠端 Hyper-V 主機上互動式執行命令。
如果您的客戶端和 Hyper-V 主機是同一個 Active Directory 網域的成員,您無需使用
Credential
參數。
3. 接著您將會提示輸入使用者名稱和密碼以連接到 Hyper-V 主機。此使用者名稱和密碼將是遠端主機上的本地管理員使用者。連接成功後,您應該會看到您的 PowerShell 提示已更改為顯示 Hyper-V 主機的主機名稱。
現在您已經準備好開始執行命令了!
使用 PowerShell 創建 Hyper-V VM
假設您現在使用 PowerShell Remoting 連接到您的 Hyper-V 主機,讓我們開始執行命令來創建一個 Hyper-V VM。
創建一個簡單的 VM
當您在連接到遠端 Hyper-V 主機的 PSRemoting 會話中時:
執行 New-VM
cmdlet 以創建一個新的 VM。使用 New-VM
cmdlet 創建 VM 時,您有許多不同的選項可以選擇如何創建它。
1. 在下面的示例中,教程正在創建一個 VM,具有:
- A name of MyVM (
HYPER
) - 512MB 的 RAM (
MemoryStartupBytes
)

基於其他 VM 屬性來創建 VM
有時候您需要創建一個具有類似屬性的虛擬機(VM)。您可以這樣做,但要將各種VM屬性分配給變量,然後在創建新的VM時使用這些變量。例如:
1. 運行Get-VM
來查詢現有VM的屬性,並將輸出分配給一個變量,如下所示。
2. 使用Get-VMMemory
cmdlet運行命令,提供要從中收集屬性的VM的名稱(在本例中為內存),並將內存值分配給一個變量。
3. 接下來,使用New-VM
cmdlet創建一個新的VM,提供Name
、VM生成(Generation
)使用其他VM的Generation
屬性,以及從其他VM獲得的內存量。

使用PowerShell列出現有的VM
現在,您至少在Hyper-V主機上創建了兩個VM,讓我們探索如何列舉已創建的VM。要做到這一點:
1. 僅運行Get-VM
cmdlet。當您不帶參數運行時,Get-VM
會查詢所有現有VM的Hyper-V主機。

2. 或許您只想查找單個VM。在這種情況下,使用-Name
參數。下面的代碼命令正在查詢Hyper-V中之前創建的名為HYPER_old
的VM。Get-VM -Name HYPER_old

接下來,也許您需要找到所有處於特定State
的VM。沒問題。要做到這一點,運行Get-VM
,這會查詢所有VM,但將輸出導向Where-Object
cmdlet。
在下面的示例中,管道 ‘|’ 將 Get-VM
的輸出限制為僅具有 State
為 Running
的 VM 物件。 Get-VM -VMName HYPER_old | Where-Object {$_.State -eq 'Running'}

開始和停止 VM
此時,之前創建的 VM 可能已停止。讓我們通過啟動它,然後學習如何停止 VM 來改變這一點。
在遠程 Hyper-V 主機的 PowerShell 會話中:
1. 使用 -Name
參數提供先前使用 -Name
參數創建的 VM 的名稱來運行 Start-VM
cmdlet。

現在 VM 已啟動,通過使用 Name
參數提供 VM 的名稱來停止它,使用 Stop-VM
cmdlet。
當您執行上述命令時,您將看到 VM 關閉,如下面的截圖所示;

修改 Hyper-V VM
VM 不總是保持不變。也許您需要增加 CPU 資源,或者 VM 不斷耗盡內存。在這種情況下,Set-VM
cmdlet 是您的好幫手。
作為修改現有 VM 的示例,在遠程 Hyper-V 主機的 PowerShell 會話中:
執行Set-VM
cmdlet以自動關閉目前正在運行的HYPER_old虛擬機器。使用Name
參數來指定您想要設置的虛擬機器,並將Shutdown
指定為AutomaticStopAction
參數的值,以確保在關閉Hyper-V主機時虛擬機器會被正確地自動關閉。
保存 Hyper-V 虛擬機器
在遠程 Hyper-V 主機的 PowerShell 會話中,您可能需要保存您創建的虛擬機器,以保留虛擬機器內存的狀態以供以後使用。要做到這一點,使用Save-VM
cmdlet,並使用Name
參數指定要保存的虛擬機器的名稱。
請注意,您要保存的虛擬機器必須處於運行狀態。

管理 Hyper-V 虛擬機器檢查點
如果您需要在進行更改之前保存虛擬機器的現有狀態,或者回復虛擬機器的更改,您應該了解檢查點。檢查點是一種快速保存任何 Hyper-V 虛擬機器的磁盤和內存狀態的便捷方式。
在您的 Hyper-V 主機上,運行Checkpoint-VM
cmdlet,並提供虛擬機器的名稱以保存和檢查點的名稱。
參數名
SnapshotName
仍然參考了在 Hyper-V 2012 中使用的舊術語。快照與檢查點是相同的東西。

一旦您创建了检查点,您可以使用 Get-VMSnapshot
cmdlet 检索存储在 Hyper-V 主机上的所有快照。您可以看到下面的 VM HYPER_old 具有三个检查点。

结论
如果您已完成本教程中的所有演示,那么您已经掌握了使用 PowerShell 管理 Hyper-V VMs 所需的知识。现在,您应该具备管理 1、10 或甚至 100 台 VMs 所需的知识!
您认为现在可以使用 PowerShell 和 Hyper-V 自动化哪些任务?