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 + ‘.‘ + $IP2
New-NetIPAddress -InterfaceIndex 12 -IPAddress $IPaddr1 -PrefixLength 16 -DefaultGateway 172.1.0.250
Set-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 3
gpupdate /force
cd  C:\Windows\System32
wuauclt.exe /DetectNow /UpdateNow
::cd  C:\FalconAgent
::falcon-agent.exe -service install
::sc.exe config  falconagent Start=delayed-auto
::falcon-agent.exe -service start
del C:\Windows\Setup\Scripts\FirstRun.ps1
del %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-Host
Write-Host -NoNewline -ForegroundColor Magenta ‘请输入需要放在哪台宿主机上(如:PWSR******)‘
[String]$VM_HostName= Read-Host
Write-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 Server
if (($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系管理服务器,用以自动加入不同OU
if ($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模板VHDX
Mount-diskimage $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 -Force
Copy-Item $DjoinSource  $DjoinDestination -Force
Djoin /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模板VHDX
dismount-diskimage $Template_VHDX

#Remove应答文件和Djoin文件
Remove-Item -Path $DjoinSource
Remove-Item -Path $UnattendXml

#Copy虚拟机VHDX文件
New-item -path $VM_RemotePath\$VM_Name -name "Virtual Hard Disks" -ItemType directory
Copy-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  

#添加DVDDrive
Get-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 virtualmachinemanager
Read-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_HostName
Start-SCVirtualMachine -VM $VM_Name
时间: 2024-10-09 06:59:16

PowerShell批量部署Hyper-V Windows虚机的相关文章

Windows 10企业批量部署实战之Windows 10客户端部署

本章为Windows 10企业批量部署实战系列的高潮部分客户端批量部署验证,话不多述直接进入正题. 1.客户端通过网络启动后获取到IP地址后,根据提示按F12键: 2.连接并开始加载启动PE: 如果我们想跳过按F12键操作,可以修改WDS设置以达到我们的需求(生产环境中如有修改此选项,建议开启部署验证密码页面,否则容易造成生产事故,因为许多员工PC可能网卡默认第一启动项为网络启动): 3.选择windows 10 enterprise 任务序列,Next继续: 4.开始操作系统的部署: 5.In

windows虚机环境下,如何快速有效的删除大文件夹?

在调试稳定性测试过程中,由于有的机器C盘越来越小,就必须进行电脑清理,清理%tmp%目录和回收站是必须的. 现在我的虚机的%tmp%目录下有15万个文件,该如何快速有效删除呢?这些文件中有的是拒绝删除的. 方法1:直接删除Temp文件夹,它会一直扫描,最后会告诉你,不能删除,说什么有其他地方在用,而我压根就没有: 方法2:进入Temp文件夹,Ctrl+A选中所有文件进行删除,但是,资源管理器的地址栏会一直处于加载过程中,无法删除: 方法3:一个一个删?直接不用: 方法4:搞个安全卫士,电脑管家什

PowerShell 批量创建Linux虚机

Write-Host -NoNewline -ForegroundColor Magenta '请输入要创建的虚机名称(如:VLNX******)' [String]$VM_Name = Read-Host Write-Host -NoNewline -ForegroundColor Magenta '请输入需要放在哪台宿主机上(如:PWSR******)' [String]$VM_HostName= Read-Host Write-Host -NoNewline -ForegroundColo

批量部署Windows NanoServer 2016 With Hyper-V

微软Nano Server 2016的部署方式是采用WIM文件和Package打包后生成的VHDX文件,从Windows Server 2016 ISO镜像中的Nano Server文件夹下可以看到包含了17个相关的包,本章节将分享如果批量的生成VHDX镜像和创建Hyper-V虚拟机,将Compute.Storage和Clustering一同安装,并将Nano Server自动加入现有域环境中. 1. 先决条件 1.1 在Nano Server文件夹下可以看到如下默认的包 1.2 在本实验中已提

Windows 10企业批量部署实战之ADK 10安装

本章为大家带来Windows 10企业批量部署实战之ADK 10安装,本章浅谈ADK 10的作用.新功能及安装操作. 适用于 Windows 10 的 Windows 评估和部署工具包 (ADK),以获取用于自动进行 Windows 10 大规模部署的全新和改进的部署工具.Windows ADK 包括: 用于自定义 Windows 10 映像的 Windows 映像和配置设计器 (Windows ICD) 用于评估系统或组件的质量和性能的 Windows 评估工具包和 Windows Perfo

WDS批量部署Windows系统

1.WDS的介绍 1.1什么是WDS WDS,即WindowsDeployment Services的缩写,中文含义为Windows部署服务,类似于Linux系统的PXE,可以用来批量部署Windows操作系统 1.2 WDS的组件 1) 服务器组件.用于网络启动客户端的PXE服务器和TFTP服务器,以加载并安装操作系统.此外还包括一个共享文件夹和映像存储库,其包含网络启动所需要的启动映像.安装映像及文件.Windows Server 2008的WDS不但提供了PXE的支持,对用于传输启动映像的

如何批量部署Office 2013 (四)——多机部署Office 2013

接下来来看Office的多机部署,如何在多台客户端中批量部署Office,其实方法并不唯一,可以通过MDT结合操作系统一同部署,也可以单独批量部署Office,这两种方法我们都会讲,首先来看下单独实现Office的批量部署 1.将Office 2013安装文件复制到网络存储位置 2. 将制作好的OCT文件拷贝到updates文件夹下 3.将部署文件夹共享并设置读写权限 4.在开始屏幕中打开AD用户和计算机 5.创建一个名为Office的OU 6.在Computers中将OfficeClient.

windows azure使用powershell批量创建虚拟机

这里向大家介绍下如何使用powershell批量创建vm虚拟机,本博文中,我打算用powershell批量创建100台VM. 首先,从官网下载页面,下载并安装Windows Azure PowerShell:http://www.windowsazure.cn/zh-cn/downloads/#cmd-line-tools 安装完毕后以管理员身份运行,右键点击PowerShell图标然后选择以管理员身份运行执行命令Get-AzurePublishSettingsFile-Environment

zabbix批量部署Windows和Linux的agent

对Linux进行批量部署Zabbix-agent 我们这里使用的是ansible来对zabbix-agent进行批量部署,当然在Linux上也可以使用脚本来完成部署 环境 ansible:10.127.0.133 agent1:172.168.0.4 agent2:172.168.0.5 进行密钥授权认证实现免密登陆 为方便ansible对agent主机的管理,需要将ansible与agent进行公钥认证来实现免密登陆 ssh-keygen -t rsa ssh-copy-id -i /root