设为首页 收藏本站
查看: 1438|回复: 0

[经验分享] PowerShell批量部署Hyper

[复制链接]

尚未签到

发表于 2018-6-7 11:58:03 | 显示全部楼层 |阅读模式
第一步:制作模板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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-520230-1-1.html 上篇帖子: Processor Compatibility Mode in Hyper 下篇帖子: 为部署ASP.NET Core准备:使用Hyper
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表