如何使用powershell在azure resourcemanager门户中使用相同的NIC创建多个vm



我正试图使用powershell在azure resourcemanager门户中使用相同的NIC创建多个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=设置AzureRmVMOperatingSystem-vm$vmconfig-Windows-ComputerName$vmArray1-凭据$credvm-ProvisionVMAgent-启用自动更新但出现了一个例外。请让我知道如何解决这个问题。

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

我为你写了一些东西,我已经在最后测试了它。它将在一个资源组和一个虚拟网络中创建一组虚拟机。如果您希望虚拟机位于不同的资源组或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) 

最新更新