PowerShell批量部署Hyper-V Windows虚机
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,第一步:制作模板VHDX文件(略);第二步:制作初始化系统脚本(自动设置IP、GW等);将以下2个脚本放置到模板VHDX中的C:\Windows\Setup\Scripts目录下:第1个脚本:Firs
千家信息网最后更新 2026年11月03日PowerShell批量部署Hyper-V Windows虚机
第一步:制作模板VHDX文件(略);第二步:制作初始化系统脚本(自动设置IP、GW等);将以下2个脚本放置到模板VHDX中的C:\Windows\Setup\Scripts目录下:第1个脚本:FirstRun.ps1#获取计算机名称$VMname=hostname#根据计算机名称获取IP地址后6位[int]$IP1=$VMname.Substring($VMname.Length - 6,3)[int]$IP2=$VMname.Substring($VMname.Length - 3,3)#设定FSNNetwork$IPaddr1=$IPaddr1='172.1.' + $IP1 + '.' + $IP2New-NetIPAddress -InterfaceIndex 12 -IPAddress $IPaddr1 -PrefixLength 16 -DefaultGateway 172.1.0.250Set-DnsClientServerAddress -InterfaceIndex 12 -ServerAddresses ("172.1.0.1","172.1.0.2")exit第2个脚本:SetupComplete.cmd (该脚本名称必须为SetupComplete)Powershell -Command "C:\Windows\Setup\Scripts\'FirstRun.ps1'"timeout 3gpupdate /forcecd C:\Windows\System32wuauclt.exe /DetectNow /UpdateNow::cd C:\FalconAgent::falcon-agent.exe -service install::sc.exe config falconagent Start=delayed-auto::falcon-agent.exe -service startdel C:\Windows\Setup\Scripts\FirstRun.ps1del %0第三步:创建自动化部署脚本# ================================ ## Create-VM_V1.0(Windows).PS1 # # 通过PowerShell创建Hyper-V虚机 # # ================================ ##Param($VM_Name,$VM_HostName)Write-Host -NoNewline -ForegroundColor Magenta '请输入要创建的虚机名称(如:VWSR******)'[String]$VM_Name = Read-HostWrite-Host -NoNewline -ForegroundColor Magenta '请输入需要放在哪台宿主机上(如:PWSR******)'[String]$VM_HostName= Read-HostWrite-Host -NoNewline -ForegroundColor Magenta '要部署App Server还是SQL Server?默认App Server回车即可(如:sql 回车或者2 回车)'[String]$VM_OSClass= Read-Host#判断虚机名称是否为大写字母if ($VM_Name |findstr 'vwsr') { Write-Host -NoNewline -ForegroundColor Yellow '注意:虚机名需要使用大写字母!!!' break } Else { } $VM_Memory= 4GB$VM_CpuCount= 4$Owner= "IT"$Org= "sxleilong.com"$NetworkSwitch= "FSNNetwork"#$AdminPassword = "Administrator Password"$SourcePath= "D:\VM_Deploy_Script"$DjoinSource= $SourcePath + '\' + $VM_Name +'.txt'#if判断要部署App Server还是SQL Server,默认是App Serverif (($VM_OSClass -eq '2') -or ($VM_OSClass -eq 'sql') -or ($VM_OSClass -eq 'SQL')) {$Template_VHDX= $SourcePath + '\' + 'En_WinSrv12R2_For_SQL.vhdx' Write-Host -ForegroundColor Green "您选择安装SQL虚机!!!" }Else {$Template_VHDX= $SourcePath + '\' + 'En_WinSrv12R2_For_APP.vhdx' Write-Host -ForegroundColor Green "您选择安装App虚机!!!" }#if判断如果虚机所在宿主机为管理系,虚机文件存放位置为E盘 if (( $VM_HostName -eq 'PWSR252001' ) -or ($VM_HostName -eq 'PWSR252002' )) { $VM_Path = 'E:\' + $VM_HostName + '_E_VMs' $VM_RemotePath = '\\' + $VM_HostName + '\E$\' + $VM_HostName + '_E_VMs' }Else { $VM_Path = 'D:\' + $VM_HostName + '_D_VMs' $VM_RemotePath = '\\' + $VM_HostName + '\D$\' + $VM_HostName + '_D_VMs' } $VM_VHDPath = $VM_Path + '\' + $VM_Name + '\Virtual Hard Disks\'+ $VM_Name + '.vhdx'$VM_VHDRemotePath = $VM_RemotePath + '\' + $VM_Name + '\Virtual Hard Disks\' + $VM_Name + '.vhdx'#if判断是否为0系管理服务器,用以自动加入不同OUif ($VM_Name |findstr 'VWSR000' ) { $VM_MachineOU= "OU=MgmtServers,OU=sxleilong,DC=sxleilong,DC=cn" }Else { $VM_MachineOU= "OU=NewInfra,OU=Production Servers,OU=sxleilong,DC=sxleilong,DC=cn" }#编辑应答文件模板$UnattendTemplate= "Unattend-template.xml"$Unattendfile= New-Object XML$Unattendfile.Load($SourcePath+"\"+$UnattendTemplate)$Unattendfile.unattend.settings.component[2].ComputerName=$VM_Name$Unattendfile.unattend.settings.component[2].RegisteredOrganization=$Org$Unattendfile.unattend.settings.component[2].RegisteredOwner=$Owner$Unattendfile.unattend.settings.Component[3].RegisteredOrganization=$Org$Unattendfile.unattend.settings.Component[3].RegisteredOwner=$Owner#$UnattendFile.unattend.settings.component[3].UserAccounts.AdministratorPassword.Value=$AdminPassword#$UnattendFile.unattend.settings.component[3].autologon.password.value=$AdminPassword$UnattendXML=$SourcePath+"\"+$VM_Name+".xml"$Unattendfile.save($UnattendXML)#Mount模板VHDXMount-diskp_w_picpath $Template_VHDX$DriveLetter=((Get-DiskImage $Template_VHDX | get-disk | get-partition | Where-Object Type -eq "Basic").DriveLetter)+":"#注入Unattend.xml文件到VHDX中$UnattendXml_Destination=$Driveletter+"\Windows\System32\Sysprep\unattend.xml"Copy-Item $UnattendXml $UnattendXml_Destination -Force#生成Offline JoinDomain文件Djoin /Provision /Domain sxleilong.com /Machine $VM_Name /MachineOU $VM_MachineOU /Savefile $DjoinSource /Reuse#注入Offline JoinDomain文件,并移除历史DjoinFile$DjoinDestination= $Driveletter+'\Windows'$His_DjoinFile= $DjoinDestination +'\'+'VWSR*.txt'Remove-Item -Path $His_DjoinFile -ForceCopy-Item $DjoinSource $DjoinDestination -ForceDjoin /RequestODJ /Loadfile "$VM_Name.txt" /WindowsPath $DjoinDestination /LocalOS#注入开机运行脚本$ScriptFolder=$DriveLetter+"\Windows\Setup\Scripts\"$Scriptname=$Scriptfolder+"FirstRun.ps1"If (Test-Path $ScriptFolder) {}Else { New-Item $ScriptFolder -ItemType Directory Copy-Item "$SourcePath\Scripts\*" $ScriptFolder -Force }#DisMount模板VHDXdismount-diskp_w_picpath $Template_VHDX#Remove应答文件和Djoin文件Remove-Item -Path $DjoinSourceRemove-Item -Path $UnattendXml#Copy虚拟机VHDX文件New-item -path $VM_RemotePath\$VM_Name -name "Virtual Hard Disks" -ItemType directoryCopy-Item -Path $Template_VHDX -Destination $VM_VHDRemotePath#新建虚机New-VM -Name $VM_Name -ComputerName $VM_HostName -Generation 2 -MemoryStartupBytes $VM_Memory -SwitchName $NetworkSwitch -Path $VM_Path -VHDPath $VM_VHDPath#设置CPU个数Set-VM -Name $VM_Name -ComputerName $VM_HostName -ProcessorCount $VM_CpuCount#禁用动态内存功能#Set-VMMemory -Name $VM_Name -ComputerName $VM_HostName -DynamicMemoryEnabled $False #添加DVDDriveGet-VM -Name $VM_Name -ComputerName $VM_HostName |Add-VMDvdDrive -ControllerNumber 0#设置VLANID#Set-VMNetworkAdapterVlan -ComputerName $VM_HostName -VMName $VM_Name -Access -VlanId 1112#通过SCVMM分配静态MACAddress#Import-Module virtualmachinemanagerRead-SCVMHost -VMHost $VM_HostName |Out-Null$VM=Get-SCVirtualMachine -Name $VM_Name$Adapter=$VM.VirtualNetworkAdapters[0]Set-SCVirtualNetworkAdapter -VirtualNetworkAdapter $Adapter[0] -MACAddressType "Static" -MACAddress "00-00-00-00-00-00" |Out-Null#启动虚机#Start-VM -Name $VM_Name -ComputerName $VM_HostNameStart-SCVirtualMachine -VM $VM_Name
虚机
文件
脚本
名称
模板
大写
大写字母
字母
宿主
计算机
还是
制作
管理
输入
选择
不同
个数
位置
内存
功能
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
科技互联网产品
深圳恒合互联网络科技有限公司
互联网科技官网
科技互联网政务服务
新华互联网科技学院
互联网核心科技是什么
新浪科技互联网
苏州大垚互联网科技
互联网科技咨询
茂名市互联网科技产业园
互联网校园科技培训
智腾互联网科技有限公司
新兴科技互联网创新大赛颁奖典礼
西安小鹰速贷互联网科技有限公司
广州千川互联网科技有限公司
皮皮虾互联网科技有限公司
江苏互联网智能科技软件
互联网硬科技公司
互联网高科技行业有哪些企业
唯美互联网科技
盈实互联网科技
互联网金融 科技金融
北京互联网络科技有限公司
互联网科技公司需要的职位
须眉科技是互联网公司吗
互联网经济与金融科技
中和天地互联网科技有限公司
从那以后互联网科技有限公司
马化腾互联网科技教学
长沙易易互联网科技有限公司