1. 程式人生 > >如何在Windows中批量創建VMware的虛擬機

如何在Windows中批量創建VMware的虛擬機

sub 自動 重新 ddr net centos 改變 deb specific

在最近的工作中,需要創建一批類似的機器。在VMware中創建了模板,然後根據自義向導部署之後,發現可以快速的完成新vm的部署。系統中的計算機名,IP地址都可以自動的完成更新。唯一的缺點是,系統自帶的向導每次只能完成一臺vm的安裝。所以,必須尋找合適的方法,使得這個工作可以批量完成。

首先需要在Windows的powershell上安裝VMware的Powercli。以管理員身份運行一個powershell的窗口,輸入以下命令:

Install-Module -Name VMware.PowerCLI -AllowClobber
技術分享圖片

系統會提示是否要從不信任的源來安裝模塊,輸入Y回車之後就開始自動安裝了。

技術分享圖片

等待安裝完畢後,可以查看當前安裝的PowerCLI版本

Import-Module VMware.PowerCLI

Get-Module | FT -autosize

技術分享圖片

接下去就可以使用powershell對vCenter操作了。

Connect-VIServer -Server 10.10.10.10 -Username [email protected] -Password YourPassword

由於我有多臺vCenter需要管理,在對話框中輸入Y,以確保每次都要我輸入連接的服務器。
技術分享圖片

由於Linux系統在使用模板功能部署時,由於MAC地址改變會引起網絡不可用。需要修改/etc/udev/rules.d/70-persistent-net.rules文件才可以。所以,我們要充分利用vCenter的Customization Specications能來創建虛擬機。

在VMware中我們需要創建一個Customization Specifications用於虛擬機部署的基準配置。Customization Specifications分為三種,Fixed, Custom,VM。經過測試,其中Fixed可以正常用於我們自定義vm的部署。

New-OSCustomizationSpec -NamingScheme Fixed -OSType Linux -DnsServer 114.114.114.114,8.8.8.8 -Domain qishine.csdn -NamingPrefix $osname -Type Persistent -Name $Customization

接下去需要對現有的Customization Specification創建映射,映射的字段我們需要在csv文件中事先準備好。

Get-OSCustomizationSpec $Customization | Get-OSCustomizationNicMapping | Set-OSCustomizationNicMapping -IpMode UseStaticIp -IpAddress $IPAddress -SubnetMask $Subnetmask -DefaultGateway $DefaultGW

然後就可以根據我們預先定義的參數來創建並配置虛擬機了
New-VM -Name $VMName -OSCustomizationSpec $Customization -Template $Template -VMHost $VMHost -DiskStorageFormat $disktype -Datastore $Datastore -ResourcePool $ResourcePool | Set-VM -NumCpu $CPU -MemoryMB $Memory -Confirm:$false -RunAsync
Get-VM -Name $VMName | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName $VLAN -Confirm:$false

整個CSV文件是這樣的
name,host,datastore,template,customization,ipaddress,subnetmask,defaultgw,dns1,dns2,vlan,mem,cpu,resourcepool,osname,disktype
10.11.24.78-vm1,10.11.24.131,datastore1 (19),CentOS6.8,VM2,10.11.24.78,255.255.255.0,10.11.24.254,114.114.114.114,8.8.8.8,VM Network,1024,2,All,qishine-csdn1,Thick
10.11.24.79-vm2,10.11.24.131,datastore1 (19),CentOS6.8,VM2,10.11.24.79,255.255.255.0,10.11.24.254,114.114.114.114,8.8.8.8,VM Network,1024,2,All,qishine-csdn2,Thick
10.11.24.80-vm3,10.11.24.131,datastore1 (19),CentOS6.8,VM2,10.11.24.80,255.255.255.0,10.11.24.254,114.114.114.114,8.8.8.8,VM Network,1024,2,All,qishine-csdn3,Thick

然後將以下內容保存成ps1文件

$vms = import-csv -path "D:\VM\Deployvm2.csv"
foreach ($vm in $vms){

$VMName = $vm.name
$VMHost = $vm.host
$Datastore = $vm.datastore
$Template = $vm.template
$Customization = $vm.customization
$IPAddress = $vm.ipaddress
$Subnetmask = $vm.subnetmask
$DefaultGW = $vm.defaultgw
$DNS1 = $vm.dns1
$DNS2 = $vm.dns2
$VLAN = $vm.vlan
$Memory = $vm.mem
$CPU = $vm.cpu
$ResourcePool = $vm.resourcepool
$osname = $vm.osname
$disktype = $vm.disktype
New-OSCustomizationSpec -NamingScheme Fixed -OSType Linux -DnsServer 114.114.114.114,8.8.8.8 -Domain qishine.csdn -NamingPrefix $osname -Type Persistent -Name $Customization
Get-OSCustomizationSpec $Customization | Get-OSCustomizationNicMapping | Set-OSCustomizationNicMapping -IpMode UseStaticIp -IpAddress $IPAddress -SubnetMask $Subnetmask -DefaultGateway $DefaultGW
New-VM -Name $VMName -OSCustomizationSpec $Customization -Template $Template -VMHost $VMHost -DiskStorageFormat $disktype -Datastore $Datastore -ResourcePool $ResourcePool | Set-VM -NumCpu $CPU -MemoryMB $Memory -Confirm:$false -RunAsync
Get-VM -Name $VMName | Get-NetworkAdapter | Set-NetworkAdapter -NetworkName $VLAN -Confirm:$false
Remove-OSCustomizationSpec $Customization -Confirm:$false
Start-VM -VM $VMName -RunAsync
}

因為,Fixed的Customization Specification不支持重新定義NamingPrefix。所以,對於每一個vm,我都創建了一個Customization Specification並且在部署後刪除。

有了兩個文件後,我們就可以批量創建vm了。直接運行剛才創建的ps1文件。
技術分享圖片

等待命令完成後,我們就能在vCenter中或者SCVMM中看到這3臺虛擬機了。

技術分享圖片

並且這些vm都會按照我們之前的定義自動配置系統中的IP和計算機名。然後就可以直接使用這些vm了。

技術分享圖片
註意,這些vm在開機後會重啟一次,以應用我們自定義的內容。

如何在Windows中批量創建VMware的虛擬機