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

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

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

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

Install-Module -Name VMware.PowerCLI -AllowClobber
如何在Windows中批量建立VMware的虛擬機器

系統會提示是否要從不信任的源來安裝模組,輸入Y回車之後就開始自動安裝了。
如何在Windows中批量建立VMware的虛擬機器

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

Import-Module VMware.PowerCLI

Get-Module | FT -autosize

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

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

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

由於我有多臺vCenter需要管理,在對話方塊中輸入Y,以確保每次都要我輸入連線的伺服器。
如何在Windows中批量建立VMware的虛擬機器

由於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檔案。
如何在Windows中批量建立VMware的虛擬機器

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

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

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

如何在Windows中批量建立VMware的虛擬機器
注意,這些vm在開機後會重啟一次,以應用我們自定義的內容。