【问题标题】:Powershell format-table errorPowershell 格式表错误
【发布时间】:2011-09-22 15:44:04
【问题描述】:

我正在尝试运行以下代码来检索机器上的本地用户列表。

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

在 PS1 文件中运行时出现此错误:

类型的对象 “Microsoft.PowerShell.Commands.Internal.Format.FormatStartData”不是 有效或不正确的顺序。这很可能是由一个 用户指定的“格式表”命令与 默认格式。 + CategoryInfo : InvalidData: (:) [out-lineoutput], 无效操作异常 + 完全限定错误 ID: ConsoleLineOutputOutOfSequencePacket,Microsoft.PowerShell.Commands.OutLineOutputCommand

我知道这个问题是由于管道的解析方式造成的,但我不知道如何解决它。

【问题讨论】:

    标签: powershell


    【解决方案1】:

    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
    

    【讨论】:

    • 我不会在我的 7 上使用此命令进行复制,但它会与其他 WMI 类一起附加到我身上。
    • @manojlds 在一次执行中同时运行多个输出生成语句时会出现问题。您可以通过在一个命令行上使用; 语句分隔符将两个命令放在一起,在命令行上获得相同的结果。在某些情况下它有效,在其他情况下则无效。但是强制输出为直接显示的字符串一直对我有用。
    【解决方案2】:

    你也可以试试:

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

    事实上,你转换成一个中间的PSCustomObject,你仍然有一个对象。

    【讨论】:

      猜你喜欢
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 2020-12-05
      • 1970-01-01
      相关资源
      最近更新 更多