谢谢。
我正在研究Azure PowerShell脚本,该脚本将获取所有NSG并查找它是否已连接到NIC或子网,并以CSV格式提供相同的名称。
我被困在解析NSG中,因为它具有SubnetsText属性,该属性以以下格式输出数据。我正在尝试使用子字符串方法来解析它,但是没有用。有人尝试过吗?
critical.css
下面是cmdlet
[
{
"TapConfigurations": [],
"HostedWorkloads": [],
"Id": "/subscriptions/xxxx-xxxx-xxx-xxx-xxxxxx/resourceGroups/vm-test-group/providers/Microsoft.Network/networkInterfaces/testvm1VMNic"
}
]
答案 0 :(得分:1)
您可以这样做:
$nsg.Subnets.Id.Split('/')[-1]
这将拆分/
上的字符串,并从该操作中获取最后一项,即NIC名称。
答案 1 :(得分:0)
您应该能够使用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()填充idList的id值
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中以类似的方式进行操作