Powershell(Azure) - 创建VirtualNetwork对象

时间:2017-09-28 18:44:28

标签: powershell azure

我正在尝试创建一个新的虚拟网络对象,然后将子网附加到它。我需要一些关于循环/对象创建部分的帮助。下面的代码有效,但我必须对输入文件中的每一行使用Set-AzureRmVirtualNetwork命令。当我将该Set-命令移到Foreach循环之外时,它只提交了最后一个子网(CSV的最后一行)。

如何创建对象以便插入多个子网,然后在结束时提交一次?

function New-NCIAzureNetworks-1 {
    [CmdletBinding()]
    Param (
        # Param1 help description
        [Parameter(Mandatory = $true,
            ValueFromPipelineByPropertyName = $true,
            Position = 0)]
        $csvPath
    )

    $azureSubnets = Import-Csv -Path $csvPath

    Foreach ($azureSubnet in $AzureSubnets) {
        $vnetName = $azureSubnet.Vnetname
        $AddressPrefix = $azureSubnet.AddressPrefix
        $SubnetName = $azureSubnet.SubnetName
        $resourceGroup = $azureSubnet.ResourceGroup

        $vnet = Get-AzureRmVirtualNetwork -Name $vnetName -ResourceGroupName $resourceGroup

        Add-AzureRmVirtualNetworkSubnetConfig -Name $SubnetName -VirtualNetwork $vnet -AddressPrefix $AddressPrefix

        Set-AzureRmVirtualNetwork -VirtualNetwork $vnet
    }
}

1 个答案:

答案 0 :(得分:1)

不,这是不可能的。请参阅此official document

然后使用Add-AzureRmVirtualNetworkSubnetConfig将子网添加到虚拟网络的内存中表示中。 Set-AzureRmVirtualNetwork命令使用新子网更新现有虚拟网络。

目前,Add-AzureRmVirtualNetworkSubnetConfig只能将一个子网存储在内存中。因此,您无法使用Set-AzureRmVirtualNetwork在一个命令中添加多个子网。

但是当您创建VNet时,您可以在一个命令中附加多个子网。请参阅此link

  New-AzureRmVirtualNetwork -Name MyVirtualNetwork -ResourceGroupName TestResourceGroup 
    -Location centralus -AddressPrefix "10.0.0.0/16" -Subnet $frontendSubnet,$backendSubnet