Ошибка таблицы формата Powershell - PullRequest
17 голосов
/ 22 сентября 2011

Я пытаюсь запустить следующий код, чтобы получить список локальных пользователей на машине.

gwmi win32_useraccount -Computername $env:computername -Filter "Domain='$env:computername'" |
  Format-Table Name,Description

Я получаю эту ошибку при запуске внутри файла PS1:

 The object of type
 "Microsoft.PowerShell.Commands.Internal.Format.FormatStartData" is not
 valid or not in the correct sequence. This is likely caused by a
 user-specified "f ormat-table" command which is conflicting with the
 default formatting.
     + CategoryInfo          : InvalidData: (:) [out-lineoutput],
 InvalidOperationException
     + FullyQualifiedErrorId :
 ConsoleLineOutputOutOfSequencePacket,Microsoft.PowerShell.Commands.OutLineOutputCommand

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

Ответы [ 2 ]

21 голосов
/ 22 сентября 2011

Командлеты Format-* не выполняют окончательный вывод, но преобразуют их ввод в последовательность объектов форматирования.Эти объекты форматирования преобразуются в фактический вывод одним из командлетов Out-, возможно, Out-Default.

Если в сценарии есть несколько различных наборов объектов форматирования, которые в конечном итоге выводят объединенные объекты из всехвыражения в скрипте Out-Default не могут устранить несоответствия.

Исправлено: добавьте Out-Sting в конец каждого конвейера, генерирующего выходные данные, чтобы выполнить форматирование одного выражения за раз:

gwmi win32_useraccount -Computername $env:computername -Filter "Domain='$env:computername'" |
  Format-Table Name,Description | Out-String
1 голос
/ 22 сентября 2011

Вы также можете попробовать:

gwmi win32_useraccount -Computername $env:computername -Filter "Domain='$env:computername'"  | Select-Object Name,Description  | Format-Table Name,Description

На самом деле вы конвертируете в промежуточный PSCustomObject, и у вас все еще есть объект.

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