获取 NSG 和相应子网或 NIC 的列表
Getting list of NSG and corresponding Subnet or NIC
提前致谢。
我正在研究 Azure PowerShell 脚本,它将获取所有 NSG 并确定它是附加到 NIC 还是子网,并在 CSV 中给出相同的名称。
我一直在解析 NSG,因为它有 属性 SubnetsText,它以下面的格式输出数据。我正在尝试使用 substring 方法解析它,但它没有用。以前有人试过这个吗?
[
{
"TapConfigurations": [],
"HostedWorkloads": [],
"Id": "/subscriptions/xxxx-xxxx-xxx-xxx-xxxxxx/resourceGroups/vm-test-group/providers/Microsoft.Network/networkInterfaces/testvm1VMNic"
}
]
下面是 cmdlet
$nsg = Get-AzureRmNetworkSecurityGroup -Name testvm1NSG -ResourceGroupName vm-test-group
$nsg.SubnetsText.ToString().Substring(lastindexof('/')+1)
你可以这样做:
$nsg.Subnets.Id.Split('/')[-1]
这将在 /
上拆分字符串并从该操作中获取最后一项,即 NIC 名称。
您应该可以使用 Newtonsoft JSON 执行此操作(理论上您应该可以对 Get-AzureRmNetworkSecurityGroup 的整个输出执行此操作)
为了尝试这个,我首先将您的 SubnetsText 变成了一个字符串。
string nsg =
"[{\"TapConfigurations\":[],\"HostedWorkloads\":[],\"Id\":\"/subscriptions/xxxx-xxxx-xxx-xxx-xxxxxx/resourceGroups/vm-test-group/providers/Microsoft.Network/networkInterfaces/testvm1VMNic\"}]";
接下来,我创建了一个名为 X 的新动态并将 JSON 作为 JArray 解析到其中。
dynamic x = JArray.Parse(nsg);
我创建了一个名为id 的新字符串并取了Id 的值。我还创建了一个名为 idList
的新列表
string id = x[0].Id.ToString();
var idList = new List<string>();
最后,我使用 .Split() 和 .ToList()
用 id 的值填充了 idList
idList = id.Split('/').ToList();
当写出 x[0].Id 到控制台时,我得到:
/subscriptions/xxxx-xxxx-xxx-xxx-xxxxxx/resourceGroups/vm-test-group/providers/Microsoft.Network/networkInterfaces/testvm1VMNic
当我从列表中得到我想要的特定值时(在本例中我想要接口名称,这是第 8 项)我将 idList[8] 写入控制台并得到:
testvm1VMNic
Console.WriteLine(x[0].Id);
Console.WriteLine(idList[1]); // subscriptions
Console.WriteLine(idList[2]); // xxxx-xxxx-xxx-xxx-xxxxxx
Console.WriteLine(idList[3]); // resourceGroups
Console.WriteLine(idList[4]); // vm-test-group
Console.WriteLine(idList[5]); // providers
Console.WriteLine(idList[6]); // Microsoft.Network
Console.WriteLine(idList[7]); // networkInterfaces
Console.WriteLine(idList[8]); // testvm1VMNic
注意:这是在 c# 中(因为这是我在使用类似工具的地方),但如果您可以访问 Powershell Gallery,您应该能够以类似的方式在 Powershell 中执行此操作
提前致谢。
我正在研究 Azure PowerShell 脚本,它将获取所有 NSG 并确定它是附加到 NIC 还是子网,并在 CSV 中给出相同的名称。
我一直在解析 NSG,因为它有 属性 SubnetsText,它以下面的格式输出数据。我正在尝试使用 substring 方法解析它,但它没有用。以前有人试过这个吗?
[
{
"TapConfigurations": [],
"HostedWorkloads": [],
"Id": "/subscriptions/xxxx-xxxx-xxx-xxx-xxxxxx/resourceGroups/vm-test-group/providers/Microsoft.Network/networkInterfaces/testvm1VMNic"
}
]
下面是 cmdlet
$nsg = Get-AzureRmNetworkSecurityGroup -Name testvm1NSG -ResourceGroupName vm-test-group
$nsg.SubnetsText.ToString().Substring(lastindexof('/')+1)
你可以这样做:
$nsg.Subnets.Id.Split('/')[-1]
这将在 /
上拆分字符串并从该操作中获取最后一项,即 NIC 名称。
您应该可以使用 Newtonsoft JSON 执行此操作(理论上您应该可以对 Get-AzureRmNetworkSecurityGroup 的整个输出执行此操作)
为了尝试这个,我首先将您的 SubnetsText 变成了一个字符串。
string nsg =
"[{\"TapConfigurations\":[],\"HostedWorkloads\":[],\"Id\":\"/subscriptions/xxxx-xxxx-xxx-xxx-xxxxxx/resourceGroups/vm-test-group/providers/Microsoft.Network/networkInterfaces/testvm1VMNic\"}]";
接下来,我创建了一个名为 X 的新动态并将 JSON 作为 JArray 解析到其中。
dynamic x = JArray.Parse(nsg);
我创建了一个名为id 的新字符串并取了Id 的值。我还创建了一个名为 idList
的新列表string id = x[0].Id.ToString();
var idList = new List<string>();
最后,我使用 .Split() 和 .ToList()
用 id 的值填充了 idListidList = id.Split('/').ToList();
当写出 x[0].Id 到控制台时,我得到:
/subscriptions/xxxx-xxxx-xxx-xxx-xxxxxx/resourceGroups/vm-test-group/providers/Microsoft.Network/networkInterfaces/testvm1VMNic
当我从列表中得到我想要的特定值时(在本例中我想要接口名称,这是第 8 项)我将 idList[8] 写入控制台并得到:
testvm1VMNic
Console.WriteLine(x[0].Id);
Console.WriteLine(idList[1]); // subscriptions
Console.WriteLine(idList[2]); // xxxx-xxxx-xxx-xxx-xxxxxx
Console.WriteLine(idList[3]); // resourceGroups
Console.WriteLine(idList[4]); // vm-test-group
Console.WriteLine(idList[5]); // providers
Console.WriteLine(idList[6]); // Microsoft.Network
Console.WriteLine(idList[7]); // networkInterfaces
Console.WriteLine(idList[8]); // testvm1VMNic
注意:这是在 c# 中(因为这是我在使用类似工具的地方),但如果您可以访问 Powershell Gallery,您应该能够以类似的方式在 Powershell 中执行此操作