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

Powershell:基于局部变量的条件标志,powershell,conditional,flags,powershell-5.0,Powershell,Conditional,Flags,Powershell 5.0,我的PowerShell脚本中有一个变量名为$IncludeSubfolders(要么0要么1) 根据它的值,我想调用getchilditem方法,无论是否使用-Recurse选项 目前,我的代码如下所示: if($IncludeSubfolders) { $Files = Get-ChildItem $RootPath -Name $FileMask -Recurse } else { $Files = Get-ChildItem $RootPath -Name $FileMa

我的PowerShell脚本中有一个变量名为
$IncludeSubfolders
(要么
0
要么
1

根据它的值,我想调用
getchilditem
方法,无论是否使用
-Recurse
选项

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

if($IncludeSubfolders) {
    $Files = Get-ChildItem $RootPath -Name $FileMask -Recurse
} else {
    $Files = Get-ChildItem $RootPath -Name $FileMask
}
如果
$IncludeSubfolders
1
,我想避免这种分支,只要有一行代码调用
Get ChildItem
with
-Recurse
标志,或者如果
$IncludeSubfolders
0
就没有它

这是可以实现的吗?怎么做

Powershell版本5.0.10586.117应该可以:

$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders
这应该做到:

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

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

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

$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders
为什么? 因为
-Recurse
是一个开关参数,它是一种特殊类型的布尔值,不需要显式值。现在使它真实,缺席使它虚假。但所有开关参数也可以采用显式值,直接在后面使用冒号


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

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

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

$Files = Get-ChildItem $RootPath -Name $FileMask -Recurse:$IncludeSubfolders
为什么? 因为
-Recurse
是一个开关参数,它是一种特殊类型的布尔值,不需要显式值。现在使它真实,缺席使它虚假。但所有开关参数也可以采用显式值,直接在后面使用冒号


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

是否有原因不使用更具描述性的
$true
$false
值作为
$IncludeSubfolders
?是否有原因不使用
$IncludeSubfolders
$true
$false
?虽然此代码片段可以解决问题,但确实有助于提高文章质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。这就是为什么我将答案投给@briantist的原因。我在这里已经有一段时间了。当我有时间解释时,我就把它们打出来。如果我不这样做,我会给OP一些东西让他们继续写下去,直到我可以再次输入更多内容。虽然这个代码片段可以解决这个问题,但确实有助于提高您文章的质量。请记住,您将在将来回答读者的问题,而这些人可能不知道您的代码建议的原因。这就是为什么我将答案投给@briantist的原因。我在这里已经有一段时间了。当我有时间解释时,我就把它们打出来。如果我不这样做,我会给OP一些东西让他们继续,直到我可以再次输入更多。感谢您对$IncludeSubfolders数据类型的建议。它源自SQL Server表(位数据类型)。我可以很容易地将其设置为布尔值,但如果它按原样工作,我将保持原样。感谢您对$IncludeSubfolders数据类型的建议。它源自SQL Server表(位数据类型)。我可以很容易地将其设置为布尔值,但如果它按原样工作,我将保持原样。