Экспорт правил NSG в CSV-файл с использованием powershell - PullRequest
0 голосов
/ 11 декабря 2019

Я пытаюсь использовать powershell для экспорта всех правил группы сетевой безопасности (NSG) по всем подпискам в Azure.

  $sub = Get-AzSubscription
  $sub | foreach-object {
  $null = $PSItem | Select-AzSubscription
  $null = Get-AzNetworkSecurityGroup -OutVariable +nsg
  foreach ($obj in $nsg)
  {
   $obj.SecurityRules | Select-Object -OutVariable +rules @{ n = 'NSG Name'; e = {$obj.Name}},
   @{ n = 'ResourceGroupName'; e = {$obj.ResourceGroupName}},
   *
  }
   }


 $rules | export-csv C:\Users\ABC\Desktop\NSG.csv

Однако в экспортированных файлах csv есть много полей с именем "System.Collections.Generic. .List`1 [System.String] ", хотя я вижу, что цикл for работает нормально и все данные генерируются.

Я очень плохо знаком с powershell, поэтому любая помощь по этому вопросу будет принята с благодарностью. ,

1 Ответ

0 голосов
/ 11 декабря 2019

Если объект, который вы экспортируете как CSV с Export-Csv или ConvertTo-Csv, имеет значения свойств, которые содержат коллекцию (массив) значений, эти значения приводятся в соответствие с помощью их метода .ToString(), что приводит к бесполезному представлению.

Предполагая, что вы хотите представить все значения свойства со значением массива в одном столбце CSV, чтобы решить эту проблему , вы должны принять решение о значимом строковом представлении для коллекции в целом и реализоватьиспользуя Select-Object с вычисляемым свойством :

Например, вы можете использовать оператор -join для создания разделенного пробелами списка элементов:

$obj.SecurityRules | Select-Object -OutVariable +rules @{ n = 'NSG Name'; e = {$obj.Name -join ' '}}, @{ n = 'ResourceGroupName'; e = {$obj.ResourceGroupName -join ' '}},*

Для более подробной информации, вы можете обратиться к этому SO поток .

...