Таблица форматов в PowerShell внутри ForEach

Не уверен, что я здесь делаю неправильно, я знаю, что это связано с тем, что он находится внутри цикла ForEach. Я попытался переместить приведенный ниже код. Даже с кодом наполовину (наполовину внутри и наполовину вне цикла, похоже, не работает). Все еще новичок в PowerShell, и я знаю, что мне нужны переменные для $table каждой итерации или хранить их где-то и читать позже.

foreach ($gp in $GPINFO) {

    # Code that gets the values for $gp, $aclBefore and $aclAfter is here

    $table = new-object psobject -Property @{
        GPO_Name = $gp.DisplayName
        Old_Owner = $aclBefore
        New_Owner = $aclAfter
    }
    $table | Format-Table GPO_Name,Old_Owner,New_Owner
} 

Если вы можете помочь мне понять, что я делаю неправильно, это было бы здорово, я знаю, что каждый раз, когда ForEach получает $gp из $GPINFO, он запускает материал $table, и это моя проблема. Таким образом, вместо одной непрерывной таблицы я получаю несколько таблиц с одним набором данных в каждой.

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


person Soulless Rekkr    schedule 15.02.2020    source источник
comment
1) Что именно вы ожидаете, а затем 2) что на самом деле происходит, когда вы запускаете код?   -  person Mathias R. Jessen    schedule 15.02.2020
comment
Вы хотите отформатировать список, который вы собрали ПОСЛЕ цикла... fornat-table отобразит строку   -  person Ctznkane525    schedule 15.02.2020


Ответы (2)


Просто выведите таблицу после завершения цикла.

$table = foreach ($gp in $GPINFO) {
    # Code that gets the values for $aclBefore and $aclAfter is here

    new-object psobject -Property @{
        GPO_Name = $gp.DisplayName
        Old_Owner = $aclBefore
        New_Owner = $aclAfter
    }
}
$table | Format-Table

Любой вывод из цикла foreach будет сохранен в $table. Каждая итерация будет выводить объект, в конечном итоге создавая массив этих объектов, хранящихся в $table.

person AdminOfThings    schedule 15.02.2020
comment
Спасибо, я попробовал это, однако у меня все еще была таблица $ внутри foreach перед новым объектом. - person Soulless Rekkr; 15.02.2020

Вы просто не можете подключиться к foreach(). Это странная часть языка, которая часто встречается. Другие способы:

Foreach-объект:

$GPINFO | foreach-object {
    $gp = $_
    new-object psobject -Property @{
        GPO_Name = $gp.DisplayName
        Old_Owner = $aclBefore
        New_Owner = $aclAfter
    }
} | Format-Table GPO_Name,Old_Owner,New_Owner

Оператор вызова и скриптблок:

& { 
  foreach ($gp in $GPINFO) {
      new-object psobject -Property @{
          GPO_Name = $gp.DisplayName
          Old_Owner = $aclBefore
          New_Owner = $aclAfter
      }
  } 
} | Format-Table GPO_Name,Old_Owner,New_Owner
person js2010    schedule 15.02.2020