我正在尝试运行以下代码来检索计算机上的本地用户列表。
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
我理解这个问题的出现是因为解析了管道的方式,但我无法弄清楚如何绕过它。
答案 0 :(得分:21)
Format-*
cmdlet不执行最终输出,而是将其输入转换为一系列格式化对象。这些格式化对象由Out-
个cmdlet之一转换为实际输出,可能是Out-Default
。
如果脚本具有多个不同的格式化对象集,则脚本Out-Default
中所有表达式的合并对象的最终输出无法解决不一致问题。
修复:在每个输出生成管道的末尾添加Out-Sting
,以便一次执行格式化一个表达式:
gwmi win32_useraccount -Computername $env:computername -Filter "Domain='$env:computername'" |
Format-Table Name,Description | Out-String
答案 1 :(得分:1)
您也可以尝试:
gwmi win32_useraccount -Computername $env:computername -Filter "Domain='$env:computername'" | Select-Object Name,Description | Format-Table Name,Description
实际上,您转换为中间PSCustomObject
并且仍然有一个对象。