Powershell:基于局部变量的条件标志

Pio*_*r L 1 powershell flags conditional powershell-5.0

有一个叫我PowerShell脚本变量$IncludeSubfolders(或01)

根据它的值,我想Get-ChildItem在有或没有-Recurse选项的情况下调用方法.

目前,我的代码如下所示:

if($IncludeSubfolders) {
    $Files = Get-ChildItem $RootPath -Name $FileMask -Recurse
} else {
    $Files = Get-ChildItem $RootPath -Name $FileMask
}
Run Code Online (Sandbox Code Playgroud)

我想避免这种分支,如果有或没有它,只需Get-ChildItem要用一行代码调用.-Recurse$IncludeSubfolders10

这可以实现吗?怎么样?

Powershell版本5.0.10586.117

bri*_*ist 7

$IncludeSubfolders 理想情况下应该是一个布尔值,而不是一个整数,但它可以很容易地转换.

即使你必须保持整数,代码也是一样的.

$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders
Run Code Online (Sandbox Code Playgroud)

为什么?

因为-Recurse是一个Switch参数,它是一种特殊类型的布尔值,其中不需要显式值.现在使它成为现实,缺席使其成为虚假.但是所有切换参数也可以采用显式值,在其后面直接使用冒号.

如果试图在表达式中使用非布尔值,其中一个布尔预计,PowerShell的将尽力凝聚该值布尔值,在这种情况下0将成为$false同时1将成为$true.