2012-05-16 54 views

回答

1

帮助是基本重定向到一个函数:

Get-Help command | more 

如果你看看这个函数的定义,你会看到它接受标记ValueFromPipelineByPropertyNameName一个参数一个位置参数。

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 

格式-list命令运行(不返回任何),所以帮助功能认为收到任何参数。

当你这样做:

"format-list" | help 

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

PS ~\> get-command format-list 

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

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

get-command format-list | help 

你得到format-list帮助。

2

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

+0

为什么不''“format-list”|帮助'工作? –