Ответ Powershell Cmdlet.ShouldProcess по умолчанию - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть сценарий powershell, в котором я реализовал метод must process с высоким ConfirmImpact, чтобы убедиться, что приглашение происходит.

Подсказка работает, как и ожидалось, однако ответ по умолчанию, когда ничего не вводится, равен "Y"

[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

Есть ли способ изменить ответ по умолчанию на "N"?Я хотел бы, чтобы пользователь явно вводил Y, если он хочет применить скрипт.Я написал довольно сложный сценарий, и последнее, что я хочу, это чтобы пользователь сценария просто нажал Enter, не проверяя, к чему он его применяет.

Я прочитал документацию об этом и нет нигде упоминания об этом.

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

После дальнейших исследований я нашел способ сделать это.Для того чтобы для ответа по умолчанию было задано значение NO, вместо ShouldProcess следует использовать метод ShouldContinue.

При чтении документации для ShouldContinue есть раздел в формате

ShouldContinue(String, String, Boolean, Boolean, Boolean)

Первое логическое значение относится к влиянию безопасности.Истинно, если подтвержденная операция оказывает влияние на безопасность.Если указано, опция по умолчанию, выбранная в меню выбора, - «Нет».

0 голосов
/ 20 февраля 2019

Нет, к сожалению, нет

При текущей реализации ShouldProcess() опция по умолчанию всегда является первым выбором


Независимо от того, ShouldProcess() предлагает пользователю подтвердить операцию, зависит от того, имеет ли автоматическая переменная $ConfirmPreference значение выше, чем атрибут ConfirmImpact вызываемого командлета.

$ConfirmPreference по умолчанию High, самое высокоеДоступен уровень влияния серьезности.

Чтобы всегда отменять запросы подтверждения для ShouldProcess(), установите $ConfirmPreference на None:

# Define a function with ConfirmImpact Medium or higher
function f {
  [CmdletBinding(SupportsShouldProcess=$true,ConfirmImpact='Medium')]
  param()

  if($PSCmdlet.ShouldProcess("Dangerous operation")) {
    Write-Host 'Welcome to the Danger Zone' -ForegroundColor Red
  }
}

# Set $ConfirmPreference to `Medium` to prompt for confirmation
$ConfirmPreference = 'Medium'

# Call our function - you'll be prompted for confirmation
f

# Set $ConfirmPreference to `None` to suppress confirmation prompts
$ConfirmPreference = 'None'

# Call our function - you won't be prompted for confirmation
f
...