Как отобразить pscustomobject в al oop? - PullRequest
2 голосов
/ 19 марта 2020

У меня есть следующий pscutomobject

$output = [PSCustomObject]@{
    '#' = ''
    'Report Path' = ''
    'Schedule ID' = ''
    Status = ''
}

У меня есть foreach l oop, и я добавляю значения для каждой итерации в pscustomobject

foreach ($refreshSchedulePlanId in $reportRefreshScheduleSubscriptionIdDataWithoutHeader)
{
    $output.'#' = $iteration
    $output.'Report Path' = $($reportRefreshScheduleSubscriptionIdDataWithoutHeader[$loopCount])
    $output.'Schedule ID' = $refreshSchedulePlanId
    $output.Status = $status

    $output | ft
}

, но вывод его следующим образом:

# Report Path Schedule ID Status
1 report1/rep1 0998989898 success

# Report Path Schedule ID Status
2 report2/re2 76767868767 fail

должно вывести:

# Report Path Schedule ID Status
1 report1/rep1 0998989898 success
2 report2/re2 76767868767 fail

et c ..

1 Ответ

4 голосов
/ 19 марта 2020

Используя ft (Format-Table) внутри l oop, каждый пользовательский объект форматируется мгновенно, индивидуально, печатаясь как полная таблица - с заголовком - каждый раз.

Исправление немедленное состоит в том, чтобы переместить вызов ft из l oop и применить его ко всему l oop:

& { 
  foreach ($refreshSchedulePlanId in $reportRefreshScheduleSubscriptionIdDataWithoutHeader)
  {
    $output.'#' = $iteration
    $output.'Report Path' = $($reportRefreshScheduleSubscriptionIdDataWithoutHeader[$loopCount])
    $output.'Schedule ID' = $refreshSchedulePlanId
    $output.Status = $status

    $output
  }
} | ft

Примечание. Поскольку foreach l oop является оператором , его нельзя использовать как есть в конвейере, и поэтому он заключен в блок скрипта ({ ... } ) вызывается с помощью &, оператор вызова .

Однако, поскольку ваши [pscustomobject] экземпляры имеют только 4 свойств, вам не нужно ft ( Format-Table вообще, потому что PowerShell по умолчанию использует форматирование таблиц с пользовательскими объектами, которые имеют 4 или менее свойств.

Отсутствие командлета Format-* имеет дополнительное преимущество, так как вывод остается подходит для дальнейших программ c обработки , учитывая, что Format-* командлеты полезны только для форматов отображения tting , учитывая, что возвращаемые ими объекты инструкции по форматированию для системы форматирования вывода PowerShell - см. этот ответ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...