在Azure上我们有两种部署方法:资源管理器(ARM)和用powershell部署,也就是我们常说的,经典模型。截至2016/4/6,世纪互联版本的Azure 还没有ARM,需要用powershell做批量虚拟机部署。


如果需要批量建立VM,通过portal一台一台的加上去,无疑,是件很傻很傻的事情。这时候就要用到powershell啦。

第一步,你得先有个Microsoft powershell.顺道登陆到你的Azure 订阅,这里步骤就不详细写出了。

键入:Get-AzurePublishSettingsFile,将配置文件下载。

随后键入:Import-AzurePublishSettingsFile "文件完整路径"

第二步,开始创建Windows虚拟机,指定当前存储账号。

键入:

Set-AzureSubscription -SubscriptionName '' -CurrentStorageAccount ''

wKiom1cFBSaC30M0AAAgRoG8IaI955.png第三步,找到我要建立的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 秒."