为什么`help format-list`与`format-list |不一样help`?

时间:2012-05-16 20:56:31

标签: shell powershell powershell-v2.0 piping

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

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

2 个答案:

答案 0 :(得分:2)

|或“管道”操作符将一个操作的输出重定向到另一个操作。因此,在这种情况下,您调用format-list,然后将其输出重定向为参数以提供帮助。帮助不知道如何处理该参数,因此它进入默认behvaior(求助)。

答案 1 :(得分:1)

帮助是一个基本上重定向到的功能:

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命令(并且没有返回任何内容),因此help函数认为它没有接收任何参数。

当你这样做时:

"format-list" | help

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

PS ~\> get-command format-list

CommandType     Name                Definition
-----------     ----                ----------
Cmdlet          Format-List         Format-List [[-Property] <Object[]>] [-GroupBy <...

你可以看到命令格式列表确实有一个Name属性,所以如果你试过

get-command format-list | help

您可以获得format-list的帮助。