编写一个 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 的磁盘分区方案如下:
- 第一个分区为 EFI 分区,大小为 100MB,格式为 FAT32,用于存储引导和UEFI固件接口。
- 第二个分区为主分区,大小为 51200MB(50GB),格式为 NTFS,可能用于安装操作系统和存储用户数据。
- 第三个分区扩展到剩余的空间,格式为 NTFS,可用于存储额外的用户数据或者扩展主分区。
下载ISO地址(基于Windows 11 23H2官方正式版2024年2月版修改):
https://cloud.189.cn/t/myAf63IBV3Qn (访问码:de9g)