仅在PowerShell中变量为true时才使用选项运行

时间:2018-08-29 23:38:16

标签: powershell

对不起,这很难解释。我有一个很长的管道命令,如下所示:

param (
    [alias("r")]
    [Parameter(Mandatory = $false)]
    [switch]$recurse = $false,
    [...]

$allFiles = Get-ChildItem $folder | Where-Object { $_.CreationTime -ge [DateTime]::Now.AddHours($hoursOld) } |
    ForEach-Object {
[...]

还有另一种运行Get-ChildItem的方法,该方法带有 -recurse选项。我只知道如何重新编写整个命令,但是要使用“ -recurse”选项,并将两种方式都包装在if / else中。

仅当-r(切换命令行选项,$ recurse的别名)为 $ True 时,才可以在gci之后包含该-recurse吗?

例如:

$allFiles = Get-ChildItem $folder -recurse | Where-Object { $_.CreationTime -ge [DateTime]::Now.AddHours($hoursOld) } |
    ForEach-Object {
[...]

PS C:\PSScripts> $psversiontable

Name                           Value
----                           -----
PSVersion                      4.0
WSManStackVersion              3.0
SerializationVersion           1.1.0.1
CLRVersion                     4.0.30319.42000
BuildVersion                   6.3.9600.18728
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0}
PSRemotingProtocolVersion      2.2

1 个答案:

答案 0 :(得分:3)

开关可以是$true$false。排除与$false相同,并且包含与$true相同。但是,您可以通过明确地覆盖它:

$allFiles = Get-ChildItem $folder -recurse:$recurse | Where-Object ...

这采用$recurse的值,并将其应用于-recurse。因此,当包含-recurse:$true时,您将拥有$recurse,而当不包含-recurse:$false时,您将拥有{}。