Запускать только с параметром, если переменная истинна в PowerShell - PullRequest
0 голосов
/ 30 августа 2018

Извините, это сложно объяснить. У меня есть длинная, пайп и т.д. команда, как это:

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 ...

Есть ли способ включить этот -recurse после gci, только если -r (параметр командной строки switch, псевдоним для $ recurse) равен $ True ?

например:

$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 голосов
/ 30 августа 2018

Переключатели могут быть $true или $false. Исключение такое же, как $false, а включение такое же, как $true. Тем не менее, вы можете переопределить это, будучи явным:

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

Это принимает значение $recurse и применяет его к -recurse. Таким образом, у вас есть -recurse:$true, когда $recurse включен, и -recurse:$false, когда его нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...