获取NSG和相应的子网或NIC的列表

时间:2019-06-20 12:17:13

标签: azure azure-powershell network-security-groups

谢谢。

我正在研究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"
  }
]

2 个答案:

答案 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中以类似的方式进行操作