了解Cmdlet位置参数

时间:2013-12-24 12:07:11

标签: powershell cmdlets

全部,原谅我,我是Power Shell的新手,目前我正在读书Windows PowerShell CookBook尝试着手开始。到目前为止,除了一件事之外,一切都对我有意义,我对Positional ParameterCmdlet完全感到困惑。

例如:Select-String

语法如下:

Select-String [-Pattern] <String[]> [-Path] <String[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>]
[-Encoding <String>] [-Exclude <String[]>] [-Include <String[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch]
[<CommonParameters>]

Select-String [-Pattern] <String[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <String>]
[-Exclude <String[]>] [-Include <String[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] -InputObject <PSObject>
[<CommonParameters>]

Select-String [-Pattern] <String[]> [-AllMatches] [-CaseSensitive] [-Context <Int32[]>] [-Encoding <String>]
[-Exclude <String[]>] [-Include <String[]>] [-List] [-NotMatch] [-Quiet] [-SimpleMatch] -LiteralPath <String[]>
[<CommonParameters>]

我可以通过忽略参数名称直接将参数值传递给Cmdlet。如下所示:

"Hello World"|Select-String .

基于Positional parameter的概念,因为参数-Pattern是第一个参数。值.可以与参数-Pattern匹配。我可以理解。

但是当我尝试使用此命令行"hello world" | Select-String -AllMatches .时,值.不在第一个中。为什么Select-String可以知道并计算出结果?有人可以告诉我更多了解它吗?感谢。

1 个答案:

答案 0 :(得分:6)

这是第一个未命名的参数。位置值告诉cmdlet哪个参数属于哪个参数。

命令Select-String -allmatches .-allmatches开关链接到其参数,并将.设置为$args - 数组(arguments-array)中的第一项,因为它在它前面没有-parametername

然后因为Select-String包含其参数的位置值,cmdlet知道arguments-array($args[0])中的第一项应该绑定到-Pattern参数。< / p>

如果您想更好地理解这一点,请通过运行以下内容阅读帮助部分中有关Parameter Position?的部分:

Get-Help about_Parameters

然后注意-Pattern参数的位置为1,如下所示:

Get-Help select-string -Parameter pattern

-Pattern <String[]>
    Specifies the text to find. Type a string or regular expression. If you type a string, use the SimpleMatch parameter.

    To learn about regular expressions, see about_Regular_Expressions.

    Required?                    true
    Position?                    1
    Default value                
    Accept pipeline input?       false
    Accept wildcard characters?  false

然后运行以下行以查看PowerShell如何绑定inputobject "hello world"以及参数和参数。

Trace-Command -Expression { "Hello World" | Select-String -allmatches . } -Name ParameterBinding -PSHost