在Azure上我们有两种部署方法:资源管理器(ARM)和用powershell部署,也就是我们常说的,经典模型。截至2016/4/6,世纪互联版本的Azure 还没有ARM,需要用powershell做批量虚拟机部署。
如果需要批量建立VM,通过portal一台一台的加上去,无疑,是件很傻很傻的事情。这时候就要用到powershell啦。
第一步,你得先有个Microsoft powershell.顺道登陆到你的Azure 订阅,这里步骤就不详细写出了。
键入:Get-AzurePublishSettingsFile,将配置文件下载。
随后键入:Import-AzurePublishSettingsFile "文件完整路径"
第二步,开始创建Windows虚拟机,指定当前存储账号。
键入:
Set-AzureSubscription -SubscriptionName '' -CurrentStorageAccount ' '
第三步,找到我要建立的Windows VM的镜像。这里我们假设建的机器是windows server 2012,
先键入找找看官方镜像:
$p_w_picpathList = Get-AzureVMImage ` | where {$_.ImageName -like "*Windows-Server-2012-Datacenter*"} $p_w_picpath=$p_w_picpathList[0]
找到之后,设置镜像,键入:
$p_w_picpathList = Get-AzureVMImage ` | where {$_.ImageName -eq "a699494373c04fc0bc8f2bb1389d6106__Windows-Server-2012-Datacenter-201407.01-en.us-127GB.vhd"} $p_w_picpath=$p_w_picpathList[0]
第四步,创建虚拟机,键入:
New-AzureVMConfig -Name 'SHADOW001' -InstanceSize 'Small' -ImageName $p_w_picpath.ImageName -AvailabilitySetName 'AvbSet' ` | Add-AzureProvisioningConfig -Windows -AdminUsername 'Shadow' -Password 'Pass@word01!' ` | New-AzureVM -ServiceName 'Shadow' -Location 'East Asia'
di第五步,批量创建。批量创建,需要写一个循环创建的语句。
以下是一个已经写好的例子。需要你自己做些改动。
$ScriptBlock = {
param( [string]$ServiceName, [string]$prefix, [int]$VMnumber)
$SubscriptionName = "Windows Azure 企业"
$p_w_picpath=get-azurevmp_w_picpath|where{$_.Label -eq "Windows Server 2012 R2 Datacenter, August 2015 (zh-cn)"}
$p_w_picpathName=$p_w_picpath[0].ImageName
$adminName="***"
$adminPwd="****"
$vnetName="****"
Set-AzureSubscription -SubscriptionName $SubscriptionName -CurrentStorageAccount $ServiceName
$vmArray=@()
for($i=1;$i -le $VMnumber;$i++)
{
$instanceSize="Small"
$newName=""
if($i -lt 10)
{
$newName=$prefix+"{0:00}" -f $i
}
else
{
$newName=$prefix+"{0:0}" -f $i
}
$vm=New-AzureVMConfig -ImageName $p_w_picpathName -Name $newName -InstanceSize $instanceSize -AvailabilitySetName "CTtest"
Set-AzureSubnet -VM $vm -SubnetNames "Subnet-2"
$vm=Add-AzureProvisioningConfig -VM $vm -Windows -AdminUsername $adminName -Password $adminPwd
$vmArray+=$vm
}
New-AzureVM -ServiceName $ServiceName -VMs $vmArray -VNetName $vnetName -WaitForBoot
}
[String]$Array = read-host "请输入想创建VM的cloudservice, 输入仅限于service1...service20,请用 ',' 分割输入"
$ServicArray = @()
$ServicArray += $Array.Split(',')
[String]$prefix = read-host "请输入主机名称前缀,以英文开头,可以为英文+数字"
[int]$VMnumber = [int](read-host "请输入需要创建的主机台数 ,只允许输入数字")
foreach ($ServiceName in $ServicArray)
{
Start-Job -ScriptBlock $ScriptBlock -ArgumentList $ServiceName , $prefix , $VMnumber
}
$start = Get-Date
# Wait for all to complete
While (Get-Job -State "Running") {
Get-Job -State "Completed" | Receive-Job
Start-Sleep 1
}
# Display output from all jobs
Get-Job | Receive-Job
# Cleanup of jobs
Remove-Job *
# Displays batch completed
echo "Provisioning VM Completed"
$end =Get-Date
$timespan= $end - $start
$seconds = $timespan.TotalSeconds
Write-Host "总耗时 $seconds 秒."