Windows: 使用PowerShell管理Hyper-V虚拟机

2024-06-14 13:41:20 浏览数 (1)

Hyper-V是Windows操作系统中强大的虚拟化平台,通过Hyper-V,用户可以创建和管理虚拟机(VM)。作为计算机专业人士,我们可能更倾向于使用命令行工具来高效地管理系统。在Windows上,PowerShell是一个功能强大的命令行工具,可以用来管理Hyper-V虚拟机。本文将详细介绍如何使用PowerShell管理Hyper-V虚拟机,包括创建、配置、启动和监控虚拟机。

一、启用Hyper-V功能

在使用PowerShell管理Hyper-V之前,您需要确保已启用Hyper-V功能。可以通过以下步骤启用Hyper-V:

  1. 打开PowerShell,以管理员身份运行。
  2. 输入以下命令以启用Hyper-V功能:
代码语言:javascript复制

powershell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
  1. 系统会提示重新启动以完成安装,输入Y并回车进行重启。

二、使用PowerShell管理Hyper-V

1. 创建虚拟机

创建一个新的虚拟机是使用Hyper-V的第一步。以下命令将创建一个名为“TestVM”的虚拟机:

代码语言:javascript复制

powershell
New-VM -Name "TestVM" -MemoryStartupBytes 2GB -Generation 2 -NewVHDPath "C:HyperVTestVMTestVM.vhdx" -NewVHDSizeBytes 20GB -Path "C:HyperVTestVM"
  • -Name:指定虚拟机的名称。
  • -MemoryStartupBytes:指定启动时分配给虚拟机的内存。
  • -Generation:指定虚拟机的代数(Generation 2)。
  • -NewVHDPath:指定虚拟硬盘文件的路径。
  • -NewVHDSizeBytes:指定虚拟硬盘的大小。
  • -Path:指定虚拟机的存储路径。

2. 配置虚拟机

创建虚拟机后,您需要配置其网络适配器、处理器数量以及安装源等。以下是一些常见的配置命令:

代码语言:javascript复制

powershell
# 添加网络适配器
Add-VMNetworkAdapter -VMName "TestVM" -SwitchName "Default Switch"

# 配置处理器数量
Set-VMProcessor -VMName "TestVM" -Count 4

# 配置ISO安装源
Add-VMDvdDrive -VMName "TestVM" -Path "C:UsersheishDownloadsCentOS-8.5.2111-x86_64-boot.iso"
  • Add-VMNetworkAdapter:为虚拟机添加网络适配器。
  • Set-VMProcessor:配置虚拟机的处理器数量。
  • Set-VMDvdDrive:设置虚拟机的DVD驱动器路径,以便使用ISO文件作为安装源。

在管理Hyper-V虚拟机时,您可能需要禁用安全引导和设置虚拟机从光盘优先引导。这在安装新的操作系统或进行系统恢复时尤为重要。本文将详细介绍如何使用PowerShell执行这些操作。

2.1. 禁用虚拟机的安全引导

安全引导是windows独有的一种用于确保系统启动时只加载受信任软件的功能。某些情况下,比如安装linux, 我们可能需要禁用此功能来安装特定的操作系统或进行特定的维护任务。

代码语言:javascript复制

powershell
Set-VMFirmware -VMName "TestVM" -EnableSecureBoot Off
  • Set-VMFirmware:设置虚拟机固件配置。
  • -VMName:指定虚拟机的名称。
  • -EnableSecureBoot:启用或禁用安全引导,Off表示禁用。
2.2. 设置虚拟机光盘优先引导

要使虚拟机从光盘优先引导,可以调整启动顺序。以下命令将设置虚拟机的启动顺序,使其优先从光盘引导:

代码语言:javascript复制

powershell
$DVDDrive = Get-VMDvdDrive -VMName "TestVM"
Set-VMFirmware -VMName "TestVM" -FirstBootDevice $DVDDrive
  • Get-VMDvdDrive:获取虚拟机的DVD驱动器。
  • Set-VMFirmware:设置虚拟机固件配置。
  • -FirstBootDevice:设置虚拟机的首选引导设备。

3. 启动和关闭虚拟机

一旦虚拟机配置完成,您可以启动它:

代码语言:javascript复制

powershell
Start-VM -Name "TestVM"

要关闭虚拟机,可以使用以下命令:

代码语言:javascript复制

powershell
Stop-VM -Name "TestVM"

4. 检查虚拟机状态

您可以使用PowerShell检查虚拟机的当前状态:

代码语言:javascript复制

powershell
Get-VM -Name "TestVM"

该命令将返回虚拟机的状态信息,包括运行状态、CPU使用率和内存使用情况等。

5. 监控虚拟机性能

PowerShell还可以用来监控虚拟机的性能,例如CPU和内存使用情况。以下命令将获取虚拟机的实时性能数据:

代码语言:javascript复制

powershell
Get-Counter -Counter "Hyper-V VM Vid Partition(TestVM)% Processor Time"

6. 启动交互会话:

6.1. 以管理员身份打开 PowerShell。6.2. 运行以下命令之一以使用虚拟机名称或 GUID 创建交互会话:

代码语言:javascript复制
Enter-PSSession -VMName <VMName>
Enter-PSSession -VMId <VMId>

出现提示时,提供虚拟机的凭据。

6.3. 在虚拟机上运行命令。

你应该会看到作为 PowerShell 提示符前缀的 VMName 显示如下:

代码语言:javascript复制
[VMName]: PS C:>

所有运行的命令将会在虚拟机上进行。若要测试,可运行 ipconfighostname 以确保这些命令正在虚拟机中运行。

6.4. 完成后,运行以下命令来关闭会话:

代码语言:javascript复制
Exit-PSSession

7. 使用 Invoke-Command 运行脚本或命令

配合使用 PowerShell Direct 和 Invoke-Command 非常适合需要在虚拟机上运行一个命令或一个脚本但在这一点之外无需继续与虚拟机进行交互的情况。

7.1 运行单个命令:

通过使用虚拟机名称或 GUID 运行以下命令之一来创建会话:

代码语言:javascript复制
Invoke-Command -VMName <VMName> -ScriptBlock { command } 
Invoke-Command -VMId <VMId> -ScriptBlock { command }

出现提示时,提供虚拟机的凭据。该命令将在虚拟机上执行,如果存在到控制台的输出,会把此输出打印到控制台。命令一运行将会自动关闭连接。

7.2 运行脚本:

通过使用虚拟机名称或 GUID 运行以下命令之一来创建会话:

代码语言:javascript复制
Invoke-Command -VMName <VMName> -FilePath C:hostscript_pathscript.ps1 
Invoke-Command -VMId <VMId> -FilePath C:hostscript_pathscript.ps1

出现提示时,提供虚拟机的凭据。该脚本将在虚拟机上执行。命令一运行将会自动关闭连接。

8. 使用 New-PSSession 和 Copy-Item 复制文件

注意: PowerShell Direct 仅支持 Windows 版本 14280 及更高版本中的持久性会话

在编写用于跨一个或多个远程计算机协调操作的脚本时,持久性 PowerShell 会话会非常有用。一经创建后,持久性会话会一直存在于后台,直到你决定将其删除。这意味着我们可以使用 Invoke-CommandEnter-PSSession 反复引用同一个会话而无需传递凭据。

通过使用相同的令牌,会话将保持原有状态。由于持久性会话具有持久性,在会话中创建的或传递给会话的任何变量将跨多个调用被保留。有多种工具可用于持久性会话。在此示例中,我们将使用 New-PSSession和 Copy-Item 在主机和虚拟机之间移动数据。

8.1. 创建会话,然后复制文件:

运行以下命令之一使用 New-PSSession 将持久性 PowerShell 会话创建到虚拟机。

代码语言:javascript复制
$s = New-PSSession -VMName <VMName> -Credential (Get-Credential)
$s = New-PSSession -VMId <VMId> -Credential (Get-Credential)

出现提示时,提供虚拟机的凭据。

警告: 14500 之前的版本中存在一个 Bug。如果不使用 -Credential 标志显式指定凭据,来宾操作系统中的服务将崩溃,并且将需要重新启动。如果你遇到此问题,可在此处获取解决方法说明。

8.2. 将文件复制到虚拟机内。

要将 C:host_pathdata.txt 从主机复制到虚拟机内,运行:

代码语言:javascript复制
Copy-Item -ToSession $s -Path C:host_pathdata.txt -Destination C:guest_path
8.3. 从虚拟机复制文件(到主机)。

要将 C:guest_pathdata.txt 从虚拟机复制到主机,运行:

代码语言:javascript复制
Copy-Item -FromSession $s -Path C:guest_pathdata.txt -Destination C:host_path
8.4. 使用 Remove-PSSession 停止持久性会话。
代码语言:javascript复制
Remove-PSSession $s

9. 删除虚拟机

如果您需要删除虚拟机,可以使用以下命令:

代码语言:javascript复制

powershell
Remove-VM -Name "TestVM" -Force

该命令将删除名为“TestVM”的虚拟机,包括其配置文件和虚拟硬盘。

10. 完整的虚拟机配置示例

以下是一个完整的PowerShell脚本示例,展示如何创建虚拟机、配置处理器和内存、设置ISO安装源、禁用安全引导以及设置光盘优先引导, 启动:

代码语言:javascript复制

powershell
New-VM -Name "TestVM" -MemoryStartupBytes 2GB -Generation 2 -NewVHDPath "C:HyperVTestVMTestVM.vhdx" -NewVHDSizeBytes 20GB -Path "C:HyperVTestVM"
Add-VMNetworkAdapter -VMName "TestVM" -SwitchName "Default Switch"
Set-VMProcessor -VMName "TestVM" -Count 4
Add-VMDvdDrive -VMName "TestVM" -Path C:UsersheishDownloadsCentOS-8.5.2111-x86_64-boot.iso
Set-VMFirmware -VMName "TestVM" -EnableSecureBoot Off
$DVDDrive = Get-VMDvdDrive -VMName "TestVM"
Set-VMFirmware -VMName "TestVM" -FirstBootDevice $DVDDrive
Start-VM -Name "TestVM"

总结

使用PowerShell管理Hyper-V虚拟机可以显著提高工作效率,特别是对于需要批量管理虚拟机的专业人士。这里介绍了如何启用Hyper-V功能,并详细说明了如何使用PowerShell创建、配置、启动、监控,访问和删除虚拟机的步骤。通过这些命令和示例,我们可以更加高效地管理我们的虚拟化环境。

0 人点赞