2015-11-16 3 views
0

Я пытаюсь вывести результаты нескольких массивов (3) на тот же вывод (консоль). Код примерно так:Результаты вывода нескольких массивов в пустые строки

$array1 
foreach ($item in $array1) 
{ 
    $array2 = get list of services for $item 
    $array2 = get list of schedtasks for $item 
    if ($array2) 
    { 
    write-host "array2 data" 
    $array2 
    } 
    if ($array3) 
    { 
    write-host "array3 data" 
    $array3 
    } 
} 

Проблема у меня в том, что когда-то первые выходы массива, консоль, кажется, прикрепить к заголовку столбца этого массива и только отображает данные для других массивов, если у них есть заголовок столбца, который соответствует заголовку столбца первого массива. Он по-прежнему выводит пустую строку для каждой строки, которая не соответствует заголовку, что указывает на то, что другие массивы заполнены.

Я проверил это, создав и выдав специальный массив заранее со всеми теми же заголовками столбцов, что и все остальные массивы. Теперь я получаю все свои данные, но в 4 столбцах, которые соответствуют оригинальному настраиваемому массиву.

Я использую Powershell ISE, и он делает это как на сервере Server 2008 R2 с Powershell 2, так и на сервере Server 2012 R2 с Powershell 4, что заставляет меня полагать, что это ожидаемое поведение, и я ничего не понимаю.

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

+1

Ваш код не говорит достаточно, вы исключили слишком много логики. Можете ли вы отредактировать сообщение, чтобы показать, как выглядят входные массивы и что вы ожидаете от нашего экрана? – sodawillow

+1

'$ array | Out-Host' – PetSerAl

+0

Трубопровод к выходу, кажется, делает трюк. Спасибо PetSerAl! Если вы хотите добавить это как ответ, я отмечу это как ответ. sodawillow, array1 содержит список имен компьютеров, один столбец. array2 - это список запланированных задач и учетных записей, а array3 - список имен служб и учетной записи. Я просто заполняю массивы, используя различные команды, чтобы получить такую ​​информацию: get-adcomputer, gwmi и schtasks.exe. Это кажется простым, потому что это в значительной степени. Надеюсь, это поможет. – lightwing

ответ

0

Известен проблема PowerShell, что это не очень хорошо при форматировании объектов с различным набором свойств:

$a = [PSCustomObject]@{a=1; b=2} 
$b = [PSCustomObject]@{b=2; c=3} 
$a, $b # table with properties a and b not c 
$b, $a # table with properties b and c not a 

Для массивов формата независимо друг от друга, вы можете передать каждый массив отдельного вызова Out-Host вместо записи массивов на вывод:

$array2 | Out-Host 
$array3 | Out-Host 
Смежные вопросы