Установить параметр по умолчанию при использовании строгого режима - PullRequest
0 голосов
/ 02 августа 2020

При использовании PowerShell с активированным строгим режимом, как мне установить значение по умолчанию для переключателя? Если я отключу строгий режим, код будет работать.

Set-StrictMode -Version 3.0

Param (
    [switch]$time_cond = $false,
    [switch]$no_stale = $false
)

If ((Test-Path variable:time_cond) -eq $false) {throw 'No var time_cond'}
If ((Test-Path variable:no_stale) -eq $false) {throw 'No var no_stale'}
PS F:\z0sh\ps\emwin> .\dl_emwin_0_ops_min06.ps1
WriteError: F:\z0sh\ps\emwin\dl_emwin_0_ops_min06.ps1:6
Line |
   6 |      [switch]$time_cond = $false,
     |                            ~~~~~~~
     | Cannot overwrite variable false because it is read-only or constant.

Exception: F:\z0sh\ps\emwin\dl_emwin_0_ops_min06.ps1:10
Line |
  10 |  … (Test-Path variable:time_cond) -eq $false) {throw 'No var time_cond'}
     |                                                ~~~~~~~~~~~~~~~~~~~~~~~~
     | No var time_cond

Изменить:

Удаление = $false исправляет ошибку не может перезаписать переменную НО теперь выдает новую ошибку при использовании строгого режима. В ошибке написано

PS F:\z0sh\ps\emwin> .\dl_emwin_0_ops_min06.ps1
InvalidOperation: F:\z0sh\ps\emwin\dl_emwin_0_ops_min06.ps1:6
Line |
   6 |      [switch]$time_cond,
     |              ~~~~~~~~~~
     | The variable '$time_cond' cannot be retrieved because it has not been set.

1 Ответ

2 голосов
/ 02 августа 2020

Переключатель уже по умолчанию равен $ false, если не используется. Это идиоматия c, поэтому люди используют ее только для выполнения условия. Если вы хотите заставить пользователя сделать выбор, используйте обязательное логическое значение.

...