Получение списка NSG и соответствующей подсети или NIC - PullRequest
2 голосов
/ 20 июня 2019

Заранее спасибо.

Я работаю над сценарием Azure PowerShell, который получит весь NSG и определит, подключен ли он к NIC или подсети, и присвоит его имя в CSV.

Я застрял в разборе NSG, так как он имеет свойство SubnetsText, которое выводит данные в следующем формате.Я пытаюсь разобрать его с помощью метода подстроки, но это не сработало.Кто-нибудь пробовал это раньше?

[
  {
    "TapConfigurations": [],
    "HostedWorkloads": [],
    "Id": "/subscriptions/xxxx-xxxx-xxx-xxx-xxxxxx/resourceGroups/vm-test-group/providers/Microsoft.Network/networkInterfaces/testvm1VMNic"
  }
]

Ниже приведен командлет

$nsg = Get-AzureRmNetworkSecurityGroup -Name  testvm1NSG -ResourceGroupName vm-test-group

$nsg.SubnetsText.ToString().Substring(lastindexof('/')+1)

Ответы [ 2 ]

1 голос
/ 20 июня 2019

Вы могли бы просто сделать это:

$nsg.Subnets.Id.Split('/')[-1]

это разделит строку на / и получит последний элемент этой операции, который будет именем NIC.

0 голосов
/ 20 июня 2019

Вы должны быть в состоянии сделать это с 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>();

Наконец, я заполнил idList значениями id, используя .Split () и .ToList ()

idList = id.Split('/').ToList();

При записи x [0]. Идя в консоль, я получаю:

/ подписок / хххх-хххх-хххххх-хххххх / resourceGroups / VM-тест-группа / поставщики / Microsoft.Network / networkInterfaces / testvm1VMNic

И когда я получаю конкретное значение, которое я хочу из списка (в этом случае я хочу имя интерфейса, которое является восьмым элементом), я записываю 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, если сможете получить доступ к Powershell Gallery

...