Ошибка формата таблицы Powershell
Я пытаюсь запустить следующий код, чтобы получить список локальных пользователей на машине.
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
Я понимаю, что эта проблема возникает из-за того, как анализируются конвейеры, но я не могу понять, как обойти это.
Ответы
Ответ 1
Командлеты Format-*
не выполняют окончательный вывод, а преобразуют их вход в последовательность объектов форматирования. Эти объекты форматирования преобразуются в фактический вывод одним из командлетов Out-
, возможно, Out-Default
.
Если script имеет несколько разных типов объектов форматирования, конечный вывод объединенных объектов из всех выражений в script Out-Default
не может устранить несоответствия.
Исправить: добавить Out-Sting
в конец каждого выходного генераторного конвейера для выполнения форматирования одного выражения за раз:
gwmi win32_useraccount -Computername $env:computername -Filter "Domain='$env:computername'" |
Format-Table Name,Description | Out-String
Ответ 2
вы также можете попробовать:
gwmi win32_useraccount -Computername $env:computername -Filter "Domain='$env:computername'" | Select-Object Name,Description | Format-Table Name,Description
Фактически вы конвертируете в промежуточный PSCustomObject
, и у вас все еще есть объект.