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

Powershell: conditional flag based on a local variable

我的 PowerShell 脚本中有一个名为 $IncludeSubfolders 的变量(01

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

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

if($IncludeSubfolders) {
    $Files = Get-ChildItem $RootPath -Name $FileMask -Recurse
} else {
    $Files = Get-ChildItem $RootPath -Name $FileMask
}

我想避免这种分支,如果 $IncludeSubfolders1 或没有它,则只需一行代码调用带有 -Recurse 标志的 Get-ChildItem0.

这可以实现吗?怎么样?

Powershell 版本 5.0.10586.117

应该这样做:

$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders

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

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

$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders

为什么?

因为-Recurse是一个Switch参数,是一种特殊类型的boolean,不需要显式赋值。存在使它真实,不存在使它虚假。但是所有开关参数也可以采用显式值,直接在它后面使用冒号。

如果您尝试在需要布尔值的表达式中使用 non-boolean 值,PowerShell 将尽最大努力将该值合并为布尔值,在这种情况下 0 将变为 $false1 将变为 $true.