什么`?{}`代表PowerShell

时间:2013-09-04 19:20:06

标签: .net windows powershell

我在PowerShell中有以下表达式:

$oneTypes = Get-ChildItem -Path $Location -Directory


$onlyCompile = @( $BASE_A, $BASE_B, $BASE_C )
#trying figure this line  out
$oneTypes = ($oneTypes | ?{$onlyCompile -contains $_})

我不确定?{...}在这里做了什么?看起来它可能是一个脚本块,但我不确定。我也想知道管道是如何发挥作用的。

2 个答案:

答案 0 :(得分:5)

?用作Where-Object命令的缩写形式,在这里它意味着过滤所提供的数组中的所有对象$onlycompile

答案 1 :(得分:2)

问题的其他部分的答案是{...}?之后的Where确实代表了一个脚本块。如果您查看Where-Object的帮助,您会看到:

-FilterScript <ScriptBlock>
    Specifies the script block that is used to filter the objects. Enclose the script block in braces ( {} ).

    The parameter name (-FilterScript) is optional.

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

FilterScript参数需要一个scriptblock。它是位置的,因此您不必指定Where -FilterScript { ... }。它不是管道绑定,但InputObject参数是管道绑定的。该对象被注入您提供的脚本块$_