如果您正在使用微软的 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 cmdlet 并提供 Hyper-V 主机的名称来实现这一点,或者您可以使用 PowerShell 远程连接到 Hyper-V 主机本身。
在本教程中,您将建立与 Hyper-V 主机的持久连接,并在 Hyper-V 主机上运行命令。
1. 在本地计算机上打开 PowerShell。
2. 运行 Enter-PSSession
cmdlet,并为 ComputerName
参数提供您远程 Hyper-V 主机的主机名。此操作将创建一个交互式会话,允许您在远程 Hyper-V 主机上交互式运行命令。
如果您的客户端和 Hyper-V 主机是同一个 Active Directory 域的成员,则不必使用
Credential
参数。
3. 然后,您将被提示输入用户名和密码以连接到 Hyper-V 主机。该用户名和密码将是远程主机上的本地管理员用户。一旦连接成功,您应该会看到您的 PowerShell 提示已更改以显示 Hyper-V 主机的主机名。
现在您已经准备好开始运行命令了!
使用 PowerShell 创建 Hyper-V 虚拟机
假设您现在正在使用 PowerShell 远程连接到您的 Hyper-V 主机,请通过创建一个 Hyper-V 虚拟机来开始运行命令。
创建一个简单的虚拟机
在连接到远程 Hyper-V 主机的 PSRemoting 会话中:
运行 New-VM
cmdlet 来创建一个新的虚拟机。使用 New-VM
cmdlet 创建虚拟机时,您有许多不同的选项可供选择。
1. 在下面的示例中,教程创建了一个具有以下配置的虚拟机:
- A name of MyVM (
HYPER
) - 512MB 的 RAM(
MemoryStartupBytes
)

基于其他虚拟机属性创建虚拟机
有时候你需要创建一个具有类似属性的虚拟机。你可以这样做,将各种虚拟机属性分配给变量,然后在创建新虚拟机时使用这些变量。例如:
1. 运行 Get-VM
来查询现有虚拟机的属性,并将输出赋值给一个变量,如下所示。
2. 运行 Get-VMMemory
cmdlet,提供要从中获取属性的虚拟机的名称(在本例中为内存),并将内存值赋给一个变量。
3. 接下来,使用 New-VM
cmdlet 创建一个新的虚拟机,提供 Name
、虚拟机的生成(Generation
)使用其他虚拟机的 Generation
属性,并从其他虚拟机获得的值中提供内存量。

使用 PowerShell 列出现有虚拟机
现在,您至少在 Hyper-V 主机上创建了两个虚拟机,让我们来看看如何枚举已创建的虚拟机。要做到这一点:
1. 单独运行 Get-VM
cmdlet。当您不带参数运行时,Get-VM
会查询 Hyper-V 主机上所有现有的虚拟机。

2. 也许您只想查找单个虚拟机。在这种情况下,使用 -Name
参数。下面的代码命令正在查询 Hyper-V 上以前创建的名为 HYPER_old
的虚拟机。Get-VM -Name HYPER_old

接下来,也许您需要查找处于特定 State
的所有虚拟机。没问题。要做到这一点,运行 Get-VM
,它查询所有虚拟机,但将输出导向到 Where-Object
cmdlet。
在下面的示例中,管道‘|’将Get-VM
的输出限制为仅具有State
为Running
的VM对象。Get-VM -VMName HYPER_old | Where-Object {$_.State -eq 'Running'}

启动和停止虚拟机
此时,之前创建的虚拟机可能已经停止。让我们通过启动它,然后学习如何停止虚拟机。
在远程Hyper-V主机的PowerShell会话中:
1. 运行Start-VM
cmdlet,并使用-Name
参数提供之前创建的虚拟机的名称(Name
)

现在虚拟机已启动,通过使用Stop-VM
cmdlet并提供Name
参数来停止它。
一旦运行上述命令,您将看到虚拟机正在关闭,如下图所示;

修改Hyper-V虚拟机
虚拟机并不总是保持不变。也许您需要增加CPU资源,或者虚拟机不断耗尽内存。在这种情况下,Set-VM
cmdlet是您的朋友。
作为修改现有虚拟机的示例,在远程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自动化执行哪些任务?