使用 Windows PowerShell 管理 Azure Stack HCI 上的 VM

适用于:Azure Stack HCI 版本 23H2 和 22H2;Windows Server 2022、Windows Server 2019

本文介绍如何使用 Windows PowerShell 在 Azure Stack HCI 上创建和管理虚拟机(VM)。

注意

在 Azure Stack HCI 上创建和管理 VM 的建议方法是使用 Azure Arc 控制平面 23H2。 但是,由于本文中所述的功能尚未由 Azure Arc 提供,因此可以使用 Windows Admin Center 或 PowerShell,如下所示。 请注意,以这种方式创建的 VM 不是已启用 Arc 的 VM。 Azure Arc 控制平面的可管理性有限,Azure 混合权益更少,例如,不免费使用 Azure 更新管理器。

关于使用 PowerShell 管理 VM

通常,你可以从远程计算机(而不是群集中的主机服务器)管理 VM。 此远程计算机称为管理计算机。

从管理计算机运行 PowerShell 命令时,请包含 -ComputerName 要管理的主机服务器的名称的参数。 允许使用 NetBIOS 名称、IP 地址和完全限定的域名。

有关使用 PowerShell 管理 VM 的完整参考文档,请参阅 Hyper-V 参考

创建 VM

New-VM cmdlet 用于创建新的 VM。 有关详细用法,请查看 New-VM 参考文档。

下面是使用现有虚拟硬盘创建新的 VM 时可以指定的设置,其中:

  • -Name 是为你要创建的虚拟机提供的名称。

  • -MemoryStartupBytes 是启动时虚拟机可用的内存量。

  • -BootDevice 是虚拟机在启动时引导到的设备。 通常情况下,它是虚拟硬盘 (VHD)、.iso 文件(对于基于 DVD 的引导)或网络适配器 (NetworkAdapter)(对于网络引导)。

  • -VHDPath 是要使用的虚拟机磁盘的路径。

  • -Path 是存储虚拟机配置文件的路径。

  • -Generation 是虚拟机代系。 对于 VHD,请使用第 1 代;对于 VHDX,请使用第 2 代。

  • -SwitchName 是你希望虚拟机用来连接其他虚拟机或网络的虚拟交换机的名称。 可以使用 Get-VMSwitch 获取虚拟交换机的名称。 例如:

用于创建名为 VM1 的 VM 的完整命令如下所示:

New-VM -ComputerName Server1 -Name VM1 -MemoryStartupBytes <Memory> -BootDevice <BootDevice> -VHDPath <VHDPath> -Path <Path> -Generation <Generation> -SwitchName <Switch name>

下一个示例将创建内存为 4GB 的第 2 代虚拟机。 它从当前目录中的 VMs\Win10.vhdx 文件夹引导,并使用名为 ExternalSwitch 的虚拟交换机。 虚拟机配置文件存储在 VMData 文件夹中。

New-VM -ComputerName Server1 -Name VM1 -MemoryStartupBytes 4GB -BootDevice VHD -VHDPath .\VMs\Win10.vhdx -Path .\VMData -Generation 2 -SwitchName ExternalSwitch

以下参数用于指定虚拟硬盘。

若要使用新的虚拟硬盘创建虚拟机,请将以上示例中的 -VHDPath 参数替换为 -NewVHDPath 并添加 -NewVHDSizeBytes 参数,如下所示:

New-VM -ComputerName Server1 -Name VM1 -MemoryStartupBytes 4GB -BootDevice VHD -NewVHDPath .\VMs\Win10.vhdx -Path .\VMData -NewVHDSizeBytes 20GB -Generation 2 -SwitchName ExternalSwitch

若要使用新的虚拟磁盘创建引导到操作系统映像的虚拟机,请参阅为 Windows 10 上的 Hyper-V 创建虚拟机演练中的 PowerShell 示例。

获取 VM 列表

以下示例返回 Server1 上所有 VM 的列表。

Get-VM -ComputerName Server1

以下示例使用 Where-Object 命令添加了一个筛选器,返回服务器上所有正在运行的 VM 的列表。 有关详细信息,请参阅使用 Where-Object 文档。

Get-VM -ComputerName Server1 | Where-Object -Property State -eq "Running"

下一个示例返回服务器上所有关闭 VM 的列表。

Get-VM -ComputerName Server1 | Where-Object -Property State -eq "Off"

启动和停止 VM

使用 Start-VMStop-VM 命令启动或停止 VM。 有关详细信息,请查看 Start-VMStop-VM 参考文档。

以下示例展示了如何启动名为 VM1 的 VM:

Start-VM -Name VM1 -ComputerName Server1

以下示例演示如何关闭名为 TestVM 的 VM:

Stop-VM -Name VM1 -ComputerName Server1

移动 VM

Move-VM cmdlet 可将 VM 移动到其他服务器。 有关详细信息,请查看 Move-VM 参考文档。

下面的示例展示了当 VM 存储在 Server1 的 SMB 共享上时,如何将 VM 移动到 Server2:

Move-VM -ComputerName Server1 -Name VM1 -DestinationHost Server2

下面的示例展示了如何将 VM 从 Server1 移动到 Server2,并将与该 VM 关联的所有文件移动到远程计算机上的 D:\VM_name:

Move-VM -ComputerName Server1 -Name VM1 -DestinationHost Server2 -IncludeStorage -DestinationStoragePath D:\VM_name

导入或导出 VM

Import-VMExport-VM cmdlet 可导入和导出 VM。 下面显示了一些示例。 有关详细信息,请查看 Import-VM 和 Export-VM 参考文档

下面的示例展示了如何基于 VM 的配置文件导入 VM。 VM 就地注册,因此不会复制其文件:

Import-VM -ComputerName Server1 -Name VM1 -Path 'C:\<vm export path>\2B91FEB3-F1E0-4FFF-B8BE-29CED892A95A.vmcx'

下面的示例将 VM 导出到 D 驱动器的根目录:

Export-VM -ComputerName Server1 -Name VM1 -Path D:\

重命名 VM

Rename-VM cmdlet 用于重命名 VM。 有关详细信息,请查看 Rename-VM 参考文档。

下面的示例将 VM1 重命名为 VM2,并显示重命名后的虚拟机:

Rename-VM -ComputerName Server1 -Name VM1 -NewName VM2

创建 VM 检查点

Checkpoint-VM cmdlet 用于为 VM 创建检查点。 有关详细信息,请查看 Checkpoint-VM 参考文档。

下面的示例为名为 Test 的 VM 创建名为 BeforeInstallingUpdates 的检查点。

Checkpoint-VM -ComputerName Server1 -Name VM1 -SnapshotName BeforeInstallingUpdates

为 VM 创建 VHD

New-VHD cmdlet 用于为 VM 创建新的 VHD。 有关如何使用该 cmdlet 的详细信息,请查看 New-VHD 参考文档。

向 VM 添加网络适配器

Add-VMNetworkAdapter cmdlet 用于向 VM 添加虚拟网络适配器。 下面显示了一些示例。 有关如何使用该 cmdlet 的详细信息,请查看 Add-VMNetworkAdapter 参考文档。

下面的示例将名为 Redmond NIC1 的虚拟网络适配器添加到名为 VM1 的虚拟机:

Add-VMNetworkAdapter -ComputerName Server1 -VMName VM1 -Name "Redmond NIC1"

此示例将一个虚拟网络适配器添加到名为 VM1 的虚拟机,并将其连接到名为 Network 的虚拟交换机:

Add-VMNetworkAdapter -ComputerName Server1 -VMName VM1 -SwitchName Network

为 VM 创建虚拟交换机

New-VMSwitch cmdlet 用于在 VM 主机上新建虚拟交换机。 有关如何使用该 cmdlet 的详细信息,请查看 New-VMSwitch 参考文档。

以下示例创建一个名为“QoS switch”的新交换机,该交换机绑定到名为 Wired Ethernet Connection 3 的网络适配器,并支持基于权重的最小带宽。

New-VMSwitch "QoS Switch" -NetAdapterName "Wired Ethernet Connection 3" -MinimumBandwidthMode Weight

为 VM 设置内存

Set-VMMemory cmdlet 用于为 VM 配置内存。 有关如何使用该 cmdlet 的详细信息,请查看 Set-VMMemory 参考文档。

以下示例在名为 VM1 的 VM 上启用动态内存,设置其最小内存、启动内存和最大内存、其内存优先级及其缓冲区。

Set-VMMemory -ComputerName Server1 -Name VM1 -DynamicMemoryEnabled $true -MinimumBytes 64MB -StartupBytes 256MB -MaximumBytes 2GB -Priority 80 -Buffer 25

为 VM 设置虚拟处理器

Set-VMProcessor cmdlet 用于为 VM 配置虚拟处理器。 有关如何使用该 cmdlet 的详细信息,请查看 Set-VMProcessor 参考文档。

下面的示例配置名为 VM1 的 VM,该 VM 具有两个虚拟处理器,预留比例为 10%,限制为 75%,相对权重为 200。

Set-VMProcessor -ComputerName Server1 -Name VM1 -Count 2 -Reserve 10 -Maximum 75 -RelativeWeight 200

删除 VM

通过 PowerShell 删除或删除 VM 会删除 VM 的配置文件,但不会删除关联的虚拟硬盘驱动器。 如果要删除包含所有文件(包括虚拟硬盘驱动器)的 VM,请考虑使用 Windows Admin Center

在删除 VM 之前,请确保 VM 已 关闭。 请记住,删除 VM 会不可逆地删除配置文件。

从服务器中删除 VM

若要从服务器中删除或删除 VM 及其资源,请先使用以下 cmdlet 查找服务器上的所有 VM:

Get-VM -Name VM1

然后,针对要从服务器中删除的每个 VM 运行以下 cmdlet:

Remove-VM -Name VM1

从群集中删除 VM

若要从群集中删除或删除 VM 及其资源,请先使用以下 cmdlet 找到它们:

Get-ClusterGroup

然后,针对要从群集中删除的每台 VM 运行以下 cmdlet:

Remove-ClusterGroup -RemoveResources -Name VM1

后续步骤

你还可以使用 Windows Admin Center 创建和管理 VM。 有关详细信息,请参阅 Windows Admin Center