如何检索正确的子网资源 ID 以创建虚拟网络规则?

How to retrieve the proper Subnet Resource Id to create a virtual network rule?

我这样创建了一个虚拟网络:

$virtualNetwork = New-AzureRmVirtualNetwork -Name MyVirtualNetwork -ResourceGroupName TestResourceGroup -Location centralus -AddressPrefix "10.0.0.0/16"

然后我为它创建了一个子网,然后设置虚拟网络:

Add-AzureRmVirtualNetworkSubnetConfig -Name backendSubnet -VirtualNetwork $virtualNetwork -AddressPrefix "10.0.2.0/24"
$virtualNetwork | Set-AzureRmVirtualNetwork

然后我得到我新创建的子网并给它一个 ID:

$subnet = $virtualNetwork | Get-AzureRmVirtualNetworkSubnetConfig -Name backendSubnet
$subnet.Id = "resourceId"

并尝试将其添加到我的 AzureRmDataLakeStore,但失败了:

Add-AzureRmDataLakeStoreVirtualNetworkRule -Account MyAccount -Name VNRule -SubnetId $subnet.Id
Add-AzureRmDataLakeStoreVirtualNetworkRule: Subnet resource ID 'resourceId' is invalid.

有人知道我应该为 -SubnetId 标志输入什么吗?谢谢。

从头到尾的解决方案(感谢@AdminOfThings):

$virtualNetwork = New-AzureRmVirtualNetwork -Name MyVirtualNetwork -ResourceGroupName TestResourceGroup -Location centralus -AddressPrefix "10.0.0.0/16"
Add-AzureRmVirtualNetworkSubnetConfig -Name backendSubnet -VirtualNetwork $virtualNetwork -AddressPrefix "10.0.2.0/24"
$virtualNetwork = $virtualNetwork | Set-AzureRmVirtualNetwork
Add-AzureRmDataLakeStoreVirtualNetworkRule -Account MyAccount -Name VNRule -SubnetId $subnet.Id

在您的情况下,$virtualNetwork$subnet 将包含子网 ID 短名称。您尝试输入的 subnetID 语法是 PSSubnet 对象的 Name 属性。

Add-AzureRmDataLakeStoreVirtualNetworkRule -Account MyAccount -Name VNRule -SubnetId $subnet.Name

您似乎想给 $subnet 一个新 ID,然后将其传递给 Add-AzureRmDataLakeStoreVirtualNetworkRule。当您更新 $subnet.Id 时,您只是在更新一个变量,而不是后端 Azure 对象。我不知道甚至可以更新该对象的 属性 并在不重新创建它的情况下将其反映在 Azure 中。

当您更新 $virtualNetwork 中的属性并执行 Set-AzureRmVirtualNetwork 时,您将需要再次将该命令输出存储到 $virtualNetwork 中。只有这样 $virtualNetwork 才会包含更新后的对象,因为它存在于 Azure 中。