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

时间:2018-03-16 14:07:15

标签: powershell conditional flags powershell-v5.0

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

根据其价值,我想使用或不使用Get-ChildItem选项来调用-Recurse方法。

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

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

我想避免这种分支,如果Get-ChildItem-Recurse,则只有一行代码调用$IncludeSubfolders 1标记,如果是0则为:progress-bar {1}}。

这可以实现吗?怎么样?

Powershell版本5.0.10586.117

2 个答案:

答案 0 :(得分:7)

$IncludeSubfolders理想情况下应该是布尔值,而不是整数,但可以轻松转换。

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

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

为什么?

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

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

答案 1 :(得分:1)

这应该这样做:

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