Hyper-V PowerShell的基本命令:它們是什麼以及如何使用它們

管理 Hyper-V 環境可能是一項具有挑戰性的任務。因此,您需要一個強大的管理工具,從中央控制台配置和控制您的虛擬基礎設施。除了圖形用戶界面之外,Hyper-V 還提供了一個使用 PowerShell 的命令行界面,用於 Hyper-V 管理。

在這篇博客文章中,我們描述了 PowerShell 的工作原理,哪些 Hyper-V PowerShell 命令可以改善虛擬機器(VM)的性能,以及這個 CLI 工具如何大幅簡化 Hyper-V 管理的過程。

PowerShell 是什麼?

PowerShell 是由 Microsoft 開發的任務自動化和配置管理框架,包括基於 .NET Framework 和 .NET Core 的命令行 shell 和相關的腳本語言。

PowerShell 命令,也被稱為 cmdlet,可以通過將多個 cmdlet 排列在單個 PowerShell 腳本中來自動化各種任務。Microsoft 已經開發了一百多個核心 PowerShell 命令,可用於執行複雜以及基本的任務。

PowerShell 能做什麼?

PowerShell 可以幫助 Hyper-V 管理員快速自動化管理操作系統(Linux、macOS 和 Windows)和相關進程的任務。與 GUI 工具不同,PowerShell 允許您僅使用命令行管理整個系統。

此外,您可以將所需的 Hyper-V PowerShell 命令保存在文本文件中(帶有 .ps1 擴展名),然後運行此腳本來執行某些任務。更重要的是,您可以使用任務計劃程序安排 PowerShell 腳本在設定的時間運行。

如何打開 PowerShell

在 Hyper-V 中运行 PowerShell 有几种方法。 获得 PowerShell 访问权限的一种简单方法是直接连接到 Hyper-V 服务器并从那里启动它。 要远程连接到 Hyper-V 主机,我们需要确保启用了远程桌面。 启用远程桌面后,我们可以使用远程桌面实用程序,远程连接到服务器,就像远程连接到任何 Windows Server 图形用户界面一样。

从 GUI 中打开 PowerShell

要在基于 GUI 的操作系统中打开 PowerShell,请按照以下步骤操作:

  1. 您需要单击开始,在搜索栏中键入PowerShell
  2. 右键单击 PowerShell 图标,然后选择以管理员身份运行以以提升模式打开 PowerShell。

从命令行中打开 PowerShell

如果您正在运行 Windows Server Core 或 Hyper-V Server,则按照以下步骤运行 PowerShell:

  1. 在命令提示符中键入PowerShell,然后按Enter
  2. A Windows PowerShell session should start automatically in the Command Prompt window. A PS prefix is then added to the command prompt to indicate that you have started a Windows PowerShell session.
  3. 一旦您进入 PowerShell,您可以使用特定于 Hyper-V 的 PowerShell 命令,在本文中我们将对此进行介绍。

远程设置

要检查 Windows Server Core 或 Hyper-V Server 中的远程桌面设置,您可以启动sconfig实用程序(如果尚未启动),并使用选项 7 进行配置。 此外,一旦远程连接到 Hyper-V 主机,您可以使用选项15退出到命令行

一旦在常規cmd.exe環境中,而不是PowerShell中,要啟動PowerShell環境,只需在命令行中輸入powershell。

遠程PowerShell

使用PowerShell,您還可以遠程與Hyper-V互動。換句話說,您可以在不建立遠程桌面連接的情況下,在Hyper-V主機上遠程執行PowerShell命令。

從我們加載了Hyper-V管理工具的管理工作站上,我們可以執行我們的Hyper-V命令。首先,我們需要安裝Hyper-V工具,包括這些命令(cmdlets)。

Install-WindowsFeature RSAT-Hyper-V-Tools

一旦我們加載了工具,我們可以運行相同類型的命令,使用-computername參數指向我們的Hyper-V主機,就像下面的屏幕截圖中那樣。我們將主機的名稱傳遞給get-vm PowerShell命令。

12個必要的Hyper-V PowerShell命令

有一些有效的Hyper-V PowerShell命令可以使管理Hyper-V的過程變得簡單易行。讓我們看看如何使用不同的Hyper-V PowerShell命令。

Get-Command

讓我們從對PowerShell新手有幫助並且不知道應該使用哪些cmdlet以及如何使用的Hyper-V PowerShell命令開始。通過運行Get-Command cmdlet,您可以看到計算機上安裝的所有可用cmdlet(Windows PowerShell命令),函數和別名的完整列表。

然而,如果您希望縮小搜尋範圍並獲取符合特定標準的 Hyper-V PowerShell 命令列表,您可以使用 Get-Command *-VM cmdlet 來找到允許您控制和配置 VM 的命令列表。

通過將 VM 參數更改為 VHD,您可以獲得用於管理虛擬硬盤的所有 cmdlet 的完整列表。因此,您可以嘗試使用各種搜索參數來獲取所需的結果。

Get-Help

一旦您決定要使用哪個 Hyper-V PowerShell 命令,您可以了解更多有關該 cmdlet 的信息。為此,您可以使用 Get-Help cmdlet。例如,要查找有關 Get-VM cmdlet 的更多信息,輸入以下命令:

Get-Help Get-VM

Get-VM

Get-VM PowerShell 命令允許您查看一個或多個 Hyper-V 主機上的所有 VM。要查看本地 Hyper-V 主機上的所有 VM,您應該運行 Get-VM PowerShell cmdlet。

在 PowerShell 屏幕上,您可以看到可用 VM 的列表,包括它們的名稱、狀態、CPU 使用情況、分配的記憶體、正常運行時間、狀態和版本。

Start-VM

這個特定的 start VM PowerShell cmdlet 幫助您啟動一個 VM。為此,運行以下 Hyper-V PowerShell 命令:

Start-VM -Name 'Windows Server 2016'

結果,名為 Windows Server 2016 的 VM 在您的本地 Hyper-V 主機上啟動了。讓我們檢查一下 VM 是否已實際啟動,方法是運行 Get-VM cmdlet。

你可以使用修改版的Start-VM PowerShell cmdlet只启动名称以Hyper-V开头的VMs:

Start-VM -Name Hyper-V*

如你所见,名为Hyper-V Server Desktop的VM已成功启动。然而,另一个VM(Hyper-V Server 2012)已经处于运行状态,PowerShell通知了你。

Stop-VM

Stop-VM cmdlet允许你关闭或关闭VM。为此,你可以运行以下cmdlet:

Stop-VM -Name 'Windows Server 2016'

如你所见,所选的VM已通过客户OS成功关闭。

另一个例子是你可以关闭名称以Hyper-V开头的VMs:

Stop-VM -Name Hyper-V* -TurnOff

如果发现你的VM无响应,可以强制关闭它。为此,请运行以下PowerShell cmdlet:

Stop-VM -Name 'Windows Server 2016' -Force

请注意,强制关闭类似于在物理机器上断电,这意味着可能会导致未保存的应用程序数据丢失。在这种情况下,建议保存VM以避免潜在数据丢失。为此,你需要运行Save-VM cmdlet,它相当于休眠物理计算机:

Save-VM -Name 'Windows Server 2016'

如果要保存名称以Hyper-V开头的VMs,请运行以下Hyper-V PowerShell命令:

Get-VM -Name Hyper-V* | Save-VM

Checkpoint-VM

使用 Checkpoint-VM 命令讓您建立一個 Hyper-V VM 檢查點(也稱為 Hyper-V 快照)。執行以下命令以建立名為 Update1 的檢查點,對應特定 VM(Windows Server 2016):

Checkpoint-VM -Name 'Windows Server 2016' -SnapshotName Update1

要驗證 VM 是否成功建立,請使用以下 Hyper-V PowerShell 命令:

Get-VMSnapshot -VMName 'Windows Server 2016'

另一方面,如果您想要刪除特定的 Hyper-V 快照,您可以使用 Remove-VMSnapshot 命令。例如,如果我們想要刪除所有以 Testing 開頭的 VM 快照,我們應該執行以下命令:

Get-VM 'Hyper-V Server 2012' | Remove-VMSnapshot -Name Testing*

上面的螢幕截圖展示了刪除所選擇的 Hyper-V 快照的整個過程。

Test-VHD

這個 Hyper-V PowerShell 命令用於驗證虛擬硬碟檔案是否存在並且可以用於 Hyper-V 部署。此命令如下:

Test-VHD -Path C:\Testing.vhd

如果 VHD 路徑有效,您將在螢幕上看到以下輸出:

若要了解如何使用 PowerShell 命令管理虛擬硬碟,我們建議您閱讀我們關於使用 Hyper-V VHD 和 VHDX 檔案的基礎知識的部落格文章。

Measure-VM

這個 Hyper-V PowerShell 命令可讓您收集特定虛擬機器的資源利用率資料。例如,執行以下命令以瞭解名為Windows Server 2016的虛擬機器的 CPU 使用率、RAM 使用率、磁碟容量和網路流量:

Measure-VM -VMName 'Windows Server 2016'

請注意,在虛擬機器上啟用資源計量後,Measure-VM命令才能報告所需的資料。若要啟用資源計量,請使用以下 Hyper-V PowerShell 命令:

Enable-VMResourceMetering -VMName 'Windows Server 2016'

Get-VMNetworkAdapter

另一個有用的 PowerShell 命令是Get-VMNetworkAdapter,它可讓您識別所選虛擬機器的虛擬網路適配器。例如,如果您想要查找所有虛擬機器以及管理作業系統的虛擬網路適配器,您應該執行以下 Hyper-V PowerShell 命令:

Get-VMNetworkAdapter –All

如果一切正確,您應該在 PowerShell 控制台中看到以下資訊:

使用 Hyper-V PowerShell 命令,您可以使用您的 Hyper-V 网络适配器执行各种简单和复杂的任务。查看我们的指南,了解可以帮助您在 Hyper-V 环境中管理和配置虚拟网络适配器的 cmdlet。

Update-VMVersion

PowerShell 具有一个 cmdlet,允许您更新所选 VM 的版本:

Update-VMVersion -Name 'TestVM'

运行 Hyper-V PowerShell 命令后,名为TestVM的虚拟机可以更新到当前的虚拟机版本。

Get-Process

此 Hyper-V PowerShell 命令可帮助您查看本地计算机上的所有当前进程。运行Get-Process cmdlet 后,您可以在屏幕上获得以下信息:

此表包含以下信息:

  • 进程打开的句柄数
  • 进程正在使用的非分页内存量
  • 进程正在使用的可分页内存量
  • 进程的工作集大小
  • 进程正在使用的虚拟内存量
  • 已分配给所有处理器的处理器时间量
  • 进程 ID
  • 进程名称

縮小搜索範圍並找到特定過程,您應該輸入過程名稱或ID。例如,如果您想了解當前 Microsoft Word 的運行情況,您應該查看所有運行中過程的列表,找到包含有關 Microsoft Word(即 WinWord)信息的行,包括其進程ID。使用進程ID,您可以運行以下命令碼來獲取必要的數據:

Get-Process -ID 8892

此外,有關當前 WinWord 過程的數據可以以另一種格式呈現,即作為屬性列表。運行此命令碼以獲取更詳細的輸出:

Get-Process WINWORD | Format-List *

獲取了過程數據後,您可以運行以下命令碼:

  • Stop-Process 允許您停止一個或多個運行中的過程。
  • Wait-Process 允許您等待一個或多個運行中的過程停止後再啟用任何其他輸入。
  • Start-Process 允許您在本地計算機上啟動一個或多個過程。
  • Debug-Process 允許您將調試器附加到本地計算機上運行中的一個或多個過程。

例如,如果您想要從 PowerShell 啟動 記事本 應用程序,您應該運行以下命令碼:

Start-Process -FilePath "notepad.exe"

另一個例子是當您在“普通”模式下打開了 PowerShell,但需要以提升模式運行 PowerShell 以獲取管理權限時。在這種情況下,運行以下 Hyper-V PowerShell 命令:

Start-Process -FilePath "powershell" -Verb RunAs

另一方面,如果其中一個運行的進程停止響應,您可以運行Stop-Process cmdlet 來停止失敗的應用程序:

Stop-Process -Name "notepad"

在這種情況下,本地計算機上的所有記事本應用程序實例都將停止運行。

每個記事本實例都有自己的進程 ID。如果要停止特定的記事本實例,應使用 Stop-Process cmdlet 中的 ID 參數。為此,您首先需要運行Get-Process cmdlet,找到所需的活動進程,並識別要停止的進程 ID。

例如,您可以通過識別其進程 ID 並運行以下 Hyper-V PowerShell 命令來停止特定的記事本進程:

Stop-Process -ID 5052

結果,只有選定的記事本進程會停止運行。

這些 PowerShell 命令允許您檢測消耗不需要的資源並降低 Hyper-V 效能的進程,以終止該進程。

Where-Object

這個 Hyper-V PowerShell 命令允許您篩選管道對象並找到您需要的精確數據。在這種情況下,您需要創建一個 PowerShell 腳本,在其中指定可以通過管道傳遞哪些對象。使用各種搜索標準,您可以在本地計算機上找到任何對象。

例如,如果您想要定位已停止運行的進程,請使用此 cmdlet:

Get-Service | Where-Object {$_.Status -eq 'Stopped'}

另一個使用 Where-Object cmdlet 的例子是當您想要查找特定的 cmdlet 時。下面的 Hyper-V PowerShell 命令可以幫助您找到所有以 Wait 開頭的 cmdlet:

Get-Command | Where-Object {$_.Name -like '*wait*'}

下一個 Where-Object cmdlet 可以幫助您根據其名稱找到特定進程。通過運行以下命令,您可以獲得所有名稱以 sys 開頭的進程列表:

Get-Process | Where-Object {$_.ProcessName -Match "^sys.*"}

使用 PowerShell 創建 Hyper-V VM 的方法

Hyper-V 的強大內置功能之一是允許使用 PowerShell 進行管理操作。在 Hyper-V 中,我們可以使用 PowerShell 做許多事情之一是創建虛擬機器。讓我們看一組用於創建新 VM 的 Hyper-V PowerShell 命令。

用於創建新 VM 的 PowerShell 命令

要在Hyper-V主機上創建一個帶有全新的60 GB VHDX硬碟並連接到特定虛擬交換機(在這種情況下,“ExternalSwitch”),請運行以下PowerShell命令。

  1. 創建虛擬機:

    new-vm -Name "WSTEST" -MemoryStartupBytes 2GB -Generation 2 -NewVHDPath "D:\hyper-v\virtualhard disks\WSTEST.vhdx" -NewVHDSizeBytes 60000000000 -Switchname "ExternalSwitch"

  2. 要添加一個帶有ISO映像以引導的DVD驅動器,我們可以運行額外的命令:

    Add-vmscsicontroller -vmname WSTEST

    Add-vmdvddrive -vmnname WSTEST -controllernumber 1 -controllerlocation 0 -path D:\ISO\my.iso

  3. 如果我們想要創建一個固定大小的磁碟並將其附加到我們的虛擬機器,我們可以運行以下命令來創建一個固定大小的 VHDX 並將其附加到我們的虛擬機器:

    new-vhd -path "d:\hyper-v\virtual hard disks.wstest.vhdx" -sizebytes 60GB -fixed

    add-vmharddiskdrive -vmname WSTEST -path "d:\hyper-v\virtual hard disks\wstest.vhdx"

結論

一開始 PowerShell 可能看起來令人生畏,但一旦你學會了如何使用它,你就可以快速發現如何使用 Hyper-V PowerShell 命令並優化你的 Hyper-V 環境管理。只需記住,無論你使用什麼來管理你的虛擬機器,你都需要創建備份以避免數據丟失和停機。

NAKIVO Backup & Replication 是一款可靠且強大的數據保護解決方案,可以幫助您保護 VMware、Hyper-V、Nutanix、AWS EC2、Linux、Windows 和 Microsoft 365 環境。

Source:
https://www.nakivo.com/blog/essential-hyper-v-powershell-commands/