使用powercli批量创建vcenter虚拟机

问题

经常有需求批量创建类似配置的虚拟机,ui界面操作比较耗时。能否有脚本调用模板自动创建呢?

解决过程

1 下载安装powerCLI工具
2 使用PowerCLI连接vcenter

1
2
3
4
$vc = 'vcip'
#填VCenter IP
Connect-VIServer -Server $vc -username "username" -Password "passwd"
#填VCenter的SSO帐号和密码

3 根据csv内容,导入虚拟机创建时所需变量

1
2
3
4
5
$vms = Import-CSV C:\Scripts\CloneVMs.csv
#获取外部csv文件内容作为变量,csv内容为
----
host,template,datastore,custsysprep,name,ip,netmask,gateway
esxi-host,centos,vsan1,规范,vm-namne,vm-ip,vm-netmask,vm-gateway

4 自定义规范,设置虚拟机ip,创建虚拟机

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#foreach循环遍历外部csv文档获取每行的值并赋于定义的变量
foreach ($vm in $vms){
$VMHost = Get-VMHost $vm.host
$Template = Get-Template $vm.template
$Datastore = Get-Datastore $vm.datastore
$Custsysprep = Get-OSCustomizationSpec $vm.custsysprep
#获取自定义规范
$VMName = $vm.name
$IP = $vm.ip
$Netmask = $vm.netmask
$Gateway = $vm.gateway
$custsysprep | Get-OSCustomizationNicMapping | Set-OSCustomizationNicMapping -IpMode UseStaticIP -IpAddress $IP -SubnetMask $Netmask -DefaultGateway $Gateway
#通过Set-OSCustomizationNicMapping来重新定义自定义规范的网络信息
New-VM -Name $VMName -Template $Template -VMHost $VMHost -Datastore $Datastore -OSCustomizationspec $Custsysprep -RunAsync
#通过从csv和自定义规范的信息来创建虚拟机
}

5 运行powershell脚本

点开powerCLI,执行

1
PowerCLI C:]>./clonevm.PS1

遇到的问题

1 虚拟机名称中文乱码
解:PS1脚本采用GB2312编码,虚拟机名称直接写在PS1脚本中,创建虚拟机能在vcenter正常显示。csv文件为GB2312,虚拟机名称为中文,创建虚拟机中文乱码。
2 虚拟机开机后会两次重启
待解决
3 创建双网卡虚拟机,需要模板中配置双网卡,规范中添加第二个网卡位置。脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
foreach ($vm in $vms){

$VMHost = Get-VMHost $vm.host

$Template = Get-Template $vm.template

$Datastore = Get-Datastore $vm.datastore

$Custsysprep = Get-OSCustomizationSpec $vm.custsysprep
#获取自定义规范
$VMName = $vm.name

$IP1 = $vm.ip1
$Netmask1 = $vm.netmask1
$Gateway1 = $vm.gateway1

$IP2 = $vm.ip2
$Netmask2 = $vm.netmask2
$Gateway2 = $vm.gateway2

Get-OSCustomizationNicMapping -OSCustomizationSpec $custsysprep | Set-OSCustomizationNicMapping -Position 1 -IpMode UseStaticIP -IpAddress $IP1 -SubnetMask $Netmask1 -DefaultGateway $Gateway1 -ErrorAction SilentlyContinue | Out-Null
Get-OSCustomizationNicMapping -OSCustomizationSpec $custsysprep | Set-OSCustomizationNicMapping -Position 2 -IpMode UseStaticIP -IpAddress $IP2 -SubnetMask $Netmask2 -DefaultGateway $Gateway2 -ErrorAction SilentlyContinue | Out-Null
#通过Set-OSCustomizationNicMapping来重新定义自定义规范的网络信息
New-VM -Name $VMName -Template $Template -VMHost $VMHost -Datastore $Datastore -OSCustomizationspec $Custsysprep -RunAsync
#通过从csv和自定义规范的信息来创建虚拟机

}

参考连接

http://www.361way.com/powercli-deploy-vmware/4877.html