自动化创建Hyper-V Win11虚拟机
自动化创建Hyper-V Win11虚拟机

自动化创建Hyper-V Win11虚拟机

编写一个 PowerShell 脚本来实现自动化生成 Hyper-V Win11 虚拟机的过程。以下是一个简单的示例脚本,用于创建 Win11 虚拟机并自动激活:

install_Win11_new.ps1脚本代码如下:

# 添加程序集以使用 Windows 窗体

Add-Type -AssemblyName System.Windows.Forms

# 创建文件浏览器对话框选择 ISO 文件

$openFileDialog = New-Object System.Windows.Forms.OpenFileDialog
$openFileDialog.Title = "选择 Windows 11 ISO 文件"
$openFileDialog.Filter = "ISO 文件 (.iso)|.iso"
$openFileDialog.InitialDirectory = [Environment]::GetFolderPath("MyComputer") # 默认指向此电脑

# 如果用户点击了“确定”按钮

if ($openFileDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
$ISOPath = $openFileDialog.FileName

# 提示用户输入虚拟机硬盘大小(默认为100GB)
$VHDSizeGB = Read-Host "请输入虚拟机硬盘大小,单位为GB(默认为100GB)"
if ([string]::IsNullOrEmpty($VHDSizeGB)) {
    $VHDSize = 100GB
} else {
    $VHDSize = [int]$VHDSizeGB * 1GB
}

# 提示用户输入分配内存(默认为8GB)
$MemoryGB = Read-Host "请输入分配内存,单位为GB(默认为8GB)"
if ([string]::IsNullOrEmpty($MemoryGB)) {
    $Memory = 8GB
} else {
    $Memory = [int]$MemoryGB * 1GB
}

# 获取宿主机内核数量
$hostCores = (Get-WmiObject -Class Win32_Processor).NumberOfCores

# 提示用户输入 CPU 内核数量(默认为2)
$ProcessorCount = Read-Host "请输入 CPU 内核数量(默认为2)"
if ([string]::IsNullOrEmpty($ProcessorCount)) {
    $ProcessorCount = "2"
}

# 检查用户输入的内核数量是否超过宿主机内核数量
if ($ProcessorCount -gt $hostCores) {
    Write-Host "输入的内核数量超过了宿主机的内核数量,请重新输入。"
    # 重新提示用户输入 CPU 内核数量
    $ProcessorCount = Read-Host "请输入 CPU 内核数量(默认为2)"
    if ([string]::IsNullOrEmpty($ProcessorCount)) {
        $ProcessorCount = "2"
    }
}

# 创建文件夹浏览器对话框选择安装路径
$folderBrowserDialog = New-Object System.Windows.Forms.FolderBrowserDialog
$folderBrowserDialog.Description = "选择安装虚拟机的路径"

# 设置默认路径为 "D:\Hyper-V"
$folderBrowserDialog.SelectedPath = "D:\Hyper-V"

# 如果用户点击了“确定”按钮
if ($folderBrowserDialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {
    $InstallPath = $folderBrowserDialog.SelectedPath

    # 定义虚拟机名称和虚拟硬盘文件路径
    $VMName = "Win11VM"
    $VHDPath = "$InstallPath\$VMName\$VMName.vhdx"
    $SwitchName = "Default Switch"

    # 检查是否存在名为“Win11VM”的虚拟机
    $existingVM = Get-VM -Name $VMName -ErrorAction SilentlyContinue
    if ($existingVM) {
        # 如果存在,则停止并删除虚拟机以及相关的虚拟硬盘文件
        Stop-VM -Name $VMName -Force
        Remove-VM -Name $VMName -Force
    }

    # 删除现有虚拟硬盘文件
    if (Test-Path $VHDPath) {
        Remove-Item $VHDPath -Force
    }

    # 创建虚拟机
    New-VM -Name $VMName -MemoryStartupBytes $Memory -SwitchName $SwitchName -NewVHDPath $VHDPath -NewVHDSizeBytes $VHDSize -Generation 2

    # 设置虚拟机的处理器数和内存
    Set-VM -Name $VMName -ProcessorCount $ProcessorCount -MemoryStartupBytes $Memory

    # 挂载 ISO 到虚拟机
    Add-VMDvdDrive -VMName $VMName -Path $ISOPath

    # 将 DVD 驱动器设置为第一启动项
    Set-VMFirmware -VMName $VMName -FirstBootDevice (Get-VMDvdDrive -VMName $VMName)

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

} else {
Write-Host "未选择 ISO 文件。脚本终止。"
}

需要找一个Win11绕过TPM检查的ISO文件,并且里面放了Autounattend.xml 应答文件,可以进行无人值守自动安装Windows并激活。

根据提供的 XML 内容,Win11 的磁盘分区方案如下:

  1. 第一个分区为 EFI 分区,大小为 100MB,格式为 FAT32,用于存储引导和UEFI固件接口。
  2. 第二个分区为主分区,大小为 51200MB(50GB),格式为 NTFS,可能用于安装操作系统和存储用户数据。
  3. 第三个分区扩展到剩余的空间,格式为 NTFS,可用于存储额外的用户数据或者扩展主分区。

下载ISO地址(基于Windows 11 23H2官方正式版2024年2月版修改):

https://cloud.189.cn/t/myAf63IBV3Qn (访问码:de9g)

发表回复

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

Title - Artist
0:00