счетчик (для цикла?) через XML в powershell - PullRequest
0 голосов
/ 23 октября 2018

У меня есть базовый массив XML в верхней части моего скрипта powershell.Планы на будущее требуют от меня, чтобы это был отдельный файл, который я вызываю, но сейчас это работает:

[xml]$xml = @"
<?xml version="1.0"?>
<PublicSubnets>
<Subnet>15.4.211.0/16</Subnet>
<Subnet>15.4.211.0/24</Subnet>
<Subnet>15.4.211.0/24</Subnet>
<Subnet>15.4.211.0/24</Subnet>
<Subnet>15.4.211.0/24</Subnet>
</PublicSubnets>
"@

Я пытаюсь вызвать это и пройти через цикл, в котором есть «приоритет»и 'counter', которые увеличиваются при каждом завершении цикла.

Например, я надеюсь получить следующее

15.4.211.0/16   counter=1   priority=250
15.4.211.0/24   counter=2   priority=251
15.4.211.0/24   counter=3   priority=252

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

В настоящее времявот что у меня есть (помните, что у меня есть массив XML в верхней части скрипта powershell)

$priority = 250
$counter = 1
foreach ($subnet in $xml.PublicSubnets)
{
$subnet.Subnet
Write-output "Counter is $counter and Priority is $priority"
$counter++
$priority++
}

Вместо того, чтобы надеяться на вывод (см. выше), я получаю это:

15.4.211.0/16
15.4.211.0/24
15.4.211.0/24
15.4.211.0/24
15.4.211.0/24
Counter is 1 and Priority is 250

Если я запустлю его снова, счетчик и приоритет увеличатся на 1, но это мне не поможет: (

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

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

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Вы вводите только свой foreach цикл один раз , для одного-единственного <PublicSubnets> элемента;внутри цикла, $subnet.Subnet - это массив из всех <Subnet> элементов.

Вместо этого вам нужно перебрать $xml.PublicSubnets.Subnet - отдельный <Subnet> элементов - напрямую:

$priority = 250
$counter = 1
foreach ($subnet in $xml.PublicSubnets.Subnet) {
  "$subnet   counter=$counter   priority=$priority"
  $counter++
  $priority++
}

Для вашего образца документа это дает:

15.4.211.0/16   counter=1   priority=250
15.4.211.0/24   counter=2   priority=251
15.4.211.0/24   counter=3   priority=252
15.4.211.0/24   counter=4   priority=253
15.4.211.0/24   counter=5   priority=254
0 голосов
/ 23 октября 2018

Это должно работать

$priority = 250
$counter = 1
foreach ($subnet in $xml.PublicSubnets.Subnet)
{
$subnet.Subnet
Write-output "Counter is $counter and Priority is $priority"
$counter+=1
$priority+=1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...