Powershell格式表错误

时间:2011-09-22 15:44:04

标签: 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

我理解这个问题的出现是因为解析了管道的方式,但我无法弄清楚如何绕过它。

2 个答案:

答案 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并且仍然有一个对象。