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

管理 Hyper-V 环境可能是一项具有挑战性的任务。因此,您需要一个强大的管理工具,从中央控制台配置和控制您的虚拟基础设施。除了图形用户界面外,Hyper-V 还提供了使用 PowerShell 进行 Hyper-V 管理的命令行界面。

在本博客文章中,我们描述了 PowerShell 的工作原理,哪些 Hyper-V PowerShell 命令可以提高虚拟机(VM)的性能,以及这个 CLI 工具如何大大简化了 Hyper-V 管理的过程。

什么是 PowerShell?

PowerShell 是由微软开发的任务自动化和配置管理框架,包括一个基于 .NET Framework 和 .NET Core 的命令行 Shell 和相关脚本语言。

PowerShell 命令,也称为 cmdlet,可以通过将多个 cmdlet 排列在单个 PowerShell 脚本中来自动化各种任务。微软开发了一百多个核心 PowerShell 命令,可用于执行复杂和基本任务。

PowerShell 能做什么?

PowerShell 可以帮助 Hyper-V 管理员快速自动化管理操作系统(Linux、macOS 和 Windows)和相关进程的任务。与图形界面工具不同,PowerShell 允许您仅使用命令行来管理整个系统。

此外,您可以将所需的 Hyper-V PowerShell 命令保存在一个文本文件中(带有 .ps1 扩展名),然后运行此脚本来执行某些任务。更重要的是,您可以使用任务计划程序安排 PowerShell 脚本在设定的时间运行。

如何打开 PowerShell

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

从 GUI 中打开 PowerShell

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

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

从命令行打开 PowerShell

如果您正在运行 Windows Server Core 或 Hyper-V 服务器,则按照以下步骤运行 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 服务器中的远程桌面设置,您可以启动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

让我们从一个对于新手用户很有帮助的Hyper-V PowerShell命令开始,他们不知道应该使用哪些cmdlet以及如何使用。通过运行Get-Command cmdlet,您可以查看计算机上安装的所有可用cmdlet(Windows PowerShell命令)、函数和别名的完整列表。

然而,如果你想要缩小搜索范围并获取符合特定条件的 Hyper-V PowerShell 命令列表,你可以使用 Get-Command *-VM cmdlet 来查找允许你控制和配置虚拟机的命令列表。

通过将 VM 参数更改为 VHD,你可以获得用于管理虚拟硬盘的完整 cmdlet 列表。因此,你可以尝试各种搜索参数以获取所需的结果。

获取帮助

一旦你决定要使用哪个 Hyper-V PowerShell 命令,你可以了解有关该 cmdlet 的更多信息。为此,你可以使用 Get-Help cmdlet。例如,要了解有关 Get-VM cmdlet 的更多信息,请键入以下内容:

Get-Help Get-VM

获取 VM

Get-VM PowerShell 命令允许你查看一个或多个 Hyper-V 主机上可用的所有 VM。要查看本地 Hyper-V 主机上的所有 VM,请运行 Get-VM PowerShell cmdlet。

在 PowerShell 屏幕上,你可以看到可用 VM 的列表,包括它们的名称、状态、CPU 使用率、分配的内存、正常运行时间、状态和版本。

开始 VM

这个特定的 启动 VM PowerShell cmdlet 帮助你启动一个 VM。为此,请运行以下 Hyper-V PowerShell 命令:

Start-VM -Name 'Windows Server 2016'

因此,在你本地的 Hyper-V 主机上启动了名为 Windows Server 2016 的 VM。让我们通过运行 Get-VM cmdlet 来检查 VM 是否已经启动。

根据您的要求,下面是您提供的文本的简体中文翻译:Start-VM PowerShell 命令已被修改,只能启动以 Hyper-V 开头的虚拟机:

Start-VM -Name Hyper-V*

正如您所见,名为 Hyper-V 服务器桌面 的虚拟机已成功启动。然而,另一个虚拟机(Hyper-V 服务器 2012)已处于运行状态,PowerShell 通知您了这一点。

Stop-VM

Stop-VM 命令允许您关闭或关闭虚拟机。为此,您可以运行以下命令:

Stop-VM -Name 'Windows Server 2016'

正如您所见,通过客户操作系统成功关闭了所选的虚拟机。

另一个例子是,您可以关闭以 Hyper-V 开头的虚拟机:

Stop-VM -Name Hyper-V* -TurnOff

如果发现您的虚拟机没有响应,您可以强制关闭它。要执行此操作,请运行以下 PowerShell 命令:

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

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

Save-VM -Name 'Windows Server 2016'

如果您想保存以 Hyper-V 开头的虚拟机,请运行以下 Hyper-V PowerShell 命令:

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

Checkpoint-VM

Checkpoint-VM 命令可帮助您创建 Hyper-V 虚拟机检查点(也称为 Hyper-V 快照)。运行以下命令以创建名为 Update1 的特定虚拟机(Windows Server 2016)的检查点:

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

要验证虚拟机是否已成功创建,请使用以下 Hyper-V PowerShell 命令:

Get-VMSnapshot -VMName 'Windows Server 2016'

另一方面,如果您想要删除特定的 Hyper-V 快照,您可以使用 Remove-VMSnapshot 命令。例如,如果我们想要删除所有以 Testing 开头的虚拟机快照,我们应该运行以下命令:

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

上面的截图演示了删除所选 Hyper-V 快照的整个过程。

Test-VHD

此 Hyper-V PowerShell 命令旨在验证虚拟硬盘文件实际存在且可用于 Hyper-V 部署。此 cmdlet 如下:

Test-VHD -Path C:\Testing.vhd

在 VHD 路径有效的情况下,您将在屏幕上看到以下输出:

了解如何使用 PowerShell 命令管理虚拟硬盘,我们建议您阅读我们关于使用 Hyper-V VHD 和 VHDX 文件的基础知识的博客文章。

Measure-VM

这个 Hyper-V PowerShell 命令允许您收集特定虚拟机的资源利用数据。例如,运行以下命令以了解名为Windows Server 2016的虚拟机的 CPU 使用率、内存使用率、磁盘容量和网络流量:

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,允许您更新所选虚拟机的版本:

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,您可以运行以下 cmdlet 来获取所需的数据:

Get-Process -ID 8892

此外,关于当前 WinWord 进程的数据可以以另一种格式呈现,即作为属性列表。运行此 cmdlet 以获取更详细的输出:

Get-Process WINWORD | Format-List *

获取到进程数据后,您可以运行以下 cmdlet:

  • Stop-Process 允许您停止一个或多个运行中的进程。
  • Wait-Process 允许您在启用任何其他输入之前等待一个或多个运行中的进程停止。
  • Start-Process 允许您在本地计算机上启动一个或多个进程。
  • Debug-Process 允许您将调试器附加到本地计算机上运行中的一个或多个进程。

例如,如果您想要从 PowerShell 启动 Notepad 应用程序,您应该运行以下 cmdlet:

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 命令

要创建一个新的第二代 VM,并连接到一个全新的 60 GB VHDX 硬盘,并将其连接到特定的虚拟交换机(在本例中为“ExternalSwitch”),请在您的 Hyper-V 主机上运行以下 PowerShell 命令。

  1. 创建 VM:

    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备份与复制是一款可靠且强大的数据保护解决方案,可帮助您保护VMware、Hyper-V、Nutanix、AWS EC2、Linux、Windows和Microsoft 365环境。

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