Hyper-V PowerShell 模塊:完成更多任務

如果您使用 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 主機上互動式執行命令。

Enter-PSSession -ComputerName HYPER -Credential (Get-Credential)

如果您的客戶端和 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)
New-VM -Name "HYPER" -MemoryStartupBytes 512MB
New VM named “HYPER”

基於其他 VM 屬性來創建 VM

有時候您需要創建一個具有類似屬性的虛擬機(VM)。您可以這樣做,但要將各種VM屬性分配給變量,然後在創建新的VM時使用這些變量。例如:

1. 運行Get-VM來查詢現有VM的屬性,並將輸出分配給一個變量,如下所示。

$VMold = Get-VM "HYPER_old"

2. 使用Get-VMMemory cmdlet運行命令,提供要從中收集屬性的VM的名稱(在本例中為內存),並將內存值分配給一個變量。

$memory = (Get-VMMemory -VMName $VMold.name).Startup

3. 接下來,使用New-VM cmdlet創建一個新的VM,提供Name、VM生成(Generation)使用其他VM的Generation屬性,以及從其他VM獲得的內存量。

New-VM -Name "newVM" -Generation $VMold.Generation -MemoryStartupBytes $memory
New VM created from Old existing VM

使用PowerShell列出現有的VM

現在,您至少在Hyper-V主機上創建了兩個VM,讓我們探索如何列舉已創建的VM。要做到這一點:

1. 僅運行Get-VM cmdlet。當您不帶參數運行時,Get-VM會查詢所有現有VM的Hyper-V主機。

Get-VM
Output of Get-VM run with no Parameters

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

Get-VM -Name HYPER_old
Output of Get-VM run with the -Name Parameter

接下來,也許您需要找到所有處於特定State的VM。沒問題。要做到這一點,運行Get-VM,這會查詢所有VM,但將輸出導向Where-Object cmdlet。

在下面的示例中,管道 ‘|’ 將 Get-VM 的輸出限制為僅具有 StateRunning 的 VM 物件。 Get-VM -VMName HYPER_old | Where-Object {$_.State -eq 'Running'}

Get-VM -VMName HYPER_old | Where-Object {$_.State -eq 'Running'}
Output of Get-VM filtering out the VM with the state of Running

開始和停止 VM

此時,之前創建的 VM 可能已停止。讓我們通過啟動它,然後學習如何停止 VM 來改變這一點。

在遠程 Hyper-V 主機的 PowerShell 會話中:

1. 使用 -Name 參數提供先前使用 -Name 參數創建的 VM 的名稱來運行 Start-VM cmdlet。

Start-VM -Name NewVM
The Start-VM command starting the VM named HYPER_old

現在 VM 已啟動,通過使用 Name 參數提供 VM 的名稱來停止它,使用 Stop-VM cmdlet。

Stop-VM -Name HYPER_old

當您執行上述命令時,您將看到 VM 關閉,如下面的截圖所示;

Stop-VM stopping the HYPER_old VM

修改 Hyper-V VM

VM 不總是保持不變。也許您需要增加 CPU 資源,或者 VM 不斷耗盡內存。在這種情況下,Set-VM cmdlet 是您的好幫手。

作為修改現有 VM 的示例,在遠程 Hyper-V 主機的 PowerShell 會話中:

執行Set-VM cmdlet以自動關閉目前正在運行的HYPER_old虛擬機器。使用Name參數來指定您想要設置的虛擬機器,並將Shutdown指定為AutomaticStopAction參數的值,以確保在關閉Hyper-V主機時虛擬機器會被正確地自動關閉。

Set-VM -Name HYPER_old -AutomaticStopAction Shutdown

保存 Hyper-V 虛擬機器

在遠程 Hyper-V 主機的 PowerShell 會話中,您可能需要保存您創建的虛擬機器,以保留虛擬機器內存的狀態以供以後使用。要做到這一點,使用Save-VMcmdlet,並使用Name參數指定要保存的虛擬機器的名稱。

請注意,您要保存的虛擬機器必須處於運行狀態。

Save-VM -Name HYPER_old
Save-VM cmdlet saving HYPER_old VM state.

管理 Hyper-V 虛擬機器檢查點

如果您需要在進行更改之前保存虛擬機器的現有狀態,或者回復虛擬機器的更改,您應該了解檢查點。檢查點是一種快速保存任何 Hyper-V 虛擬機器的磁盤和內存狀態的便捷方式。

在您的 Hyper-V 主機上,運行Checkpoint-VMcmdlet,並提供虛擬機器的名稱以保存和檢查點的名稱。

參數名SnapshotName仍然參考了在 Hyper-V 2012 中使用的舊術語。快照與檢查點是相同的東西。

Checkpoint-VM -Name HYPER_old -SnapshotName MyVMSnapshot
Using Checkpoint-VM to create a Snapshot of HYPER_old VM called MyVMSnapshot

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

Get-VMSnapshot -VMName HYPER_old
Retrieves all the Snapshots stored for HYPER_old VM

结论

如果您已完成本教程中的所有演示,那么您已经掌握了使用 PowerShell 管理 Hyper-V VMs 所需的知识。现在,您应该具备管理 1、10 或甚至 100 台 VMs 所需的知识!

您认为现在可以使用 PowerShell 和 Hyper-V 自动化哪些任务?

Source:
https://adamtheautomator.com/hyper-v-powershell/