如何使用PowerShell在具有相同NIC的azure resourcemanager门户中创建多个vms

时间:2016-01-07 06:04:27

标签: azure virtual-machine azure-powershell azure-resource-manager

我正在尝试使用PowerShell在azure resourcemanager门户中使用相同的NIC创建多个vms。但单独创建VM。当我使用数组发生此异常时。

$i = 1;
[System.Collections.ArrayList]$vmArray1=@()
Do 
{ 
$i; 
switch($i){
{$vmName="Namenode"+$i}
{$vmName="Namenode"+$i}
default {$vmName="Datanode"+($i-2)}
}
$vmconfig=New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize
$vmArray1.Add($vmconfig)

$ i + = 1  直到($ i -gt $ NumberOfVM) $ vm = Set-AzureRmVMOperatingSystem -VM $ vmconfig -Windows -ComputerName $ vmArray1 -Credential $ credvm -ProvisionVMAgent -EnableAutoUpdate 但是会发生异常。请让我知道如何解决这个问题。

1 个答案:

答案 0 :(得分:1)

我不确定这是否是您的输入错误。您的Set-AzureRmVMOperatingSystem命令不在循环内。这意味着它将始终只运行一次。除操作系统外,还需要提供源映像,操作系统磁盘和网络接口。

我已经为你写了一些东西,我已经在我的最后测试了它。它将在一个资源组和一个虚拟网络中创建一组VM。如果您希望VM位于不同的资源组或VNet中,则可以将资源组或Vnet的创建命令移动到循环中。

$credvm = Get-Credential
$NumberOfVM = <the number of VM you want to create>;
$ResourceGroupName = "<your resource group name>"
$Location = "East Asia"

## Storage
$StorageName = "<your storage account name>"
$StorageType = "Standard_GRS"



# Resource Group, if resource group has been created comment this out.
New-AzureRmResourceGroup -Name $ResourceGroupName -Location $Location


## Network
$InterfaceName = "<your interface name>"
$Subnet1Name = "Subnet1"
$VNetName = "<your vnet name>"
$VNetAddressPrefix = "10.0.0.0/16"
$VNetSubnetAddressPrefix = "10.0.0.0/24"

## Compute
$vmSize = "Standard_A2"

# Network
$SubnetConfig = New-AzureRmVirtualNetworkSubnetConfig -Name $Subnet1Name -AddressPrefix $VNetSubnetAddressPrefix
$VNet = New-AzureRmVirtualNetwork -Name $VNetName -ResourceGroupName $ResourceGroupName -Location $Location -AddressPrefix $VNetAddressPrefix -Subnet $SubnetConfig


$i = 1;

Do 
{ 
    $i; 
    $vmName="Namenode"+$i
    $vmconfig=New-AzureRmVMConfig -VMName $vmName -VMSize $vmSize

    $vm=Set-AzureRmVMOperatingSystem -VM $vmconfig -Windows -ComputerName $vmName -Credential $credvm -ProvisionVMAgent -EnableAutoUpdate

    $OSDiskName = $vmName + "osDisk"
    # Storage
    $StorageAccount = New-AzureRmStorageAccount -ResourceGroupName $ResourceGroupName -Name $StorageName$i -Type $StorageType -Location $Location
    ## Setup local VM object
    $vm = Set-AzureRmVMSourceImage -VM $vm -PublisherName MicrosoftWindowsServer -Offer WindowsServer -Skus 2012-R2-Datacenter -Version "latest"
    $PIp = New-AzureRmPublicIpAddress -Name $InterfaceName$i -ResourceGroupName $ResourceGroupName -Location $Location -AllocationMethod Dynamic
    $Interface = New-AzureRmNetworkInterface -Name $InterfaceName$i -ResourceGroupName $ResourceGroupName -Location $Location -SubnetId $VNet.Subnets[0].Id -PublicIpAddressId $PIp.Id
    $VirtualMachine = Add-AzureRmVMNetworkInterface -VM $vm -Id $Interface.Id
    $OSDiskUri = $StorageAccount.PrimaryEndpoints.Blob.ToString() + "vhds/" + $OSDiskName + ".vhd"
    $VirtualMachine = Set-AzureRmVMOSDisk -VM $VirtualMachine -Name $OSDiskName -VhdUri $OSDiskUri -CreateOption FromImage

    ## Create the VM in Azure
    New-AzureRmVM -ResourceGroupName $ResourceGroupName -Location $Location -VM $VirtualMachine
    $i +=1
} 
Until ($i -gt $NumberOfVM)