克隆Hyper-V Win11虚拟机
克隆Hyper-V Win11虚拟机

克隆Hyper-V Win11虚拟机

在Hyper-V 上克隆 Windows 11 虚拟机实现以下功能:

  1. 获取虚拟机和宿主操作系统的配置信息。
  2. 提示用户输入要克隆的虚拟机数量。
  3. 根据宿主操作系统的物理内存大小建议分配内存。
  4. 克隆指定数量的虚拟机,并设置内存和处理器数量,然后启动虚拟机。

CloneWin11VM_new.ps1脚本代码如下:

# 定义虚拟机名称

$VMName = "Win11VM"

# 获取虚拟机配置信息

$VMInfo = Get-VM -Name $VMName | Select-Object Name, ProcessorCount, @{Name="MemoryStartupGB"; Expression={[math]::Round($_.MemoryAssigned / 1GB, 2)}}, State, Version

# 获取宿主操作系统信息,包括物理内存(以GB为单位)

$HostOSInfo = Get-WmiObject -Class Win32_OperatingSystem | Select-Object CSName, Caption, Version, @{Name="TotalPhysicalMemoryGB"; Expression={[math]::Round($_.TotalVisibleMemorySize / 1024 / 1024, 0)}}, @{Name="InstallDate"; Expression={[Management.ManagementDateTimeConverter]::ToDateTime($_.InstallDate)}}

# 显示虚拟机配置信息

Write-Host "虚拟机配置信息:"
$VMInfo | Format-Table

# 显示宿主操作系统信息,包括物理内存(以GB为单位)

Write-Host "宿主操作系统信息:"
$HostOSInfo | Format-Table

# 用户输入克隆虚拟机数量

$NumberOfClones = Read-Host "请输入要克隆的虚拟机数量"

# 定义变量

$SourceVMName = "Win11VM" # 源虚拟机的名称
$SwitchName = "Default Switch"

# 停止源虚拟机,如果虚拟机处于运行状态

if ((Get-VM -Name $SourceVMName).State -eq "Running") {
Stop-VM -Name $SourceVMName -Force
}

# 克隆虚拟机

$VMTemplatePath = "D:\Hyper-V\Win11VM\Win11VM.vhdx" # 虚拟机模板的路径
$NewVMs = @()

# 生成新虚拟机名称列表

for ($i = 1; $i -le $NumberOfClones; $i++) {
$NewVMs += "Win11vm" + "{0:D3}" -f $i
}

foreach ($NewVMName in $NewVMs) {
$NewVHDPath = "D:\Hyper-V\$NewVMName\$NewVMName.vhdx" # 新虚拟机的VHD路径

# 检查虚拟机文件是否存在
$VHDExists = Test-Path $NewVHDPath

# 检查虚拟机是否存在
$VMExists = Get-VM -Name $NewVMName -ErrorAction SilentlyContinue

# 如果虚拟机文件和虚拟机名称都存在,则直接启动虚拟机
if ($VHDExists -and $VMExists) {
    Start-VM -Name $NewVMName
}
else {
    # 创建目标文件夹
    $TargetFolder = Split-Path -Path $NewVHDPath
    if (!(Test-Path $TargetFolder)) {
        New-Item -Path $TargetFolder -ItemType Directory
    }

    # 克隆虚拟硬盘文件
    Copy-Item -Path $VMTemplatePath -Destination $NewVHDPath -Force

    # 根据宿主操作系统的物理内存,建议分配内存
    if ($HostOSInfo.TotalPhysicalMemoryGB -lt 8) {
        $Memory = 4GB
    }
    else {
        $Memory = 8GB
    }

    # 创建新的虚拟机
    New-VM -Name $NewVMName -MemoryStartupBytes $Memory -VHDPath $NewVHDPath -SwitchName $SwitchName -Generation 2

    Set-VM -Name $NewVMName -ProcessorCount 2

    # 启动虚拟机
    Start-VM -Name $NewVMName
}

}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Title - Artist
0:00