对不起,这很难解释。我有一个很长的管道命令,如下所示:
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
答案 0 :(得分:3)
开关可以是$true
或$false
。排除与$false
相同,并且包含与$true
相同。但是,您可以通过明确地覆盖它:
$allFiles = Get-ChildItem $folder -recurse:$recurse | Where-Object ...
这采用$recurse
的值,并将其应用于-recurse
。因此,当包含-recurse:$true
时,您将拥有$recurse
,而当不包含-recurse:$false
时,您将拥有{1>}。