【问题标题】:Why is `help format-list` not the same as `format-list | help`?为什么`help format-list` 和`format-list` 不一样 |帮助`?
【发布时间】:2012-05-24 11:46:57
【问题描述】:

help format-list 输出格式列表的帮助。

format-list | help 输出帮助以获得帮助(get-help)。

【问题讨论】:

    标签: shell powershell powershell-2.0 piping


    【解决方案1】:

    该 |或“管道”运算符将一个操作的输出重定向到另一个。因此,在这种情况下,您正在调用格式列表,然后将其输出重定向为帮助参数。 help 不知道如何处理该参数,因此它进入默认行为(help for help)。

    【讨论】:

      【解决方案2】:

      Help 是一个本质上重定向到的函数:

      Get-Help command | more
      

      如果你看一下这个函数的定义,你会发现它接受一个带有ValueFromPipelineByPropertyName 标记的位置参数,参数是Name

      PS ~\> Get-Content function:help
      
      <#
      .FORWARDHELPTARGETNAME Get-Help
      .FORWARDHELPCATEGORY Cmdlet
      #>
      [CmdletBinding(DefaultParameterSetName='AllUsersView')]
      param(
          [Parameter(Position=0, ValueFromPipelineByPropertyName=$true)]
          [System.String]
          ${Name},
      
          # Other arguments deleted for brevity
      
          [Switch]
          ${Online})
      $outputEncoding=[System.Console]::OutputEncoding
      
            Get-Help @PSBoundParameters | more
      

      这基本上意味着,如果它看到一个带有名为Name 的属性的参数,它会将其绑定为输入参数。所以,当你这样做时:

      format-list | help
      

      运行 format-list 命令(没有返回任何内容),因此帮助函数认为它没有收到任何参数。

      当你这样做时:

      "format-list" | help
      

      您正在传递一个字符串参数。字符串类型没有Name 属性,因此您会收到一条错误消息,指出它无法绑定参数。但是,如果您尝试过:

      PS ~\> get-command format-list
      
      CommandType     Name                Definition
      -----------     ----                ----------
      Cmdlet          Format-List         Format-List [[-Property] <Object[]>] [-GroupBy <...
      

      你可以看到命令 format-list 确实有一个 Name 属性,所以如果你尝试过

      get-command format-list | help
      

      您将获得format-list 的帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-19
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多