Здесь, в SO, и в других местах есть множество вопросов, объясняющих, как распространить -Confirm
по всему командлету на вложенные командлеты и т. д. Однако я не нахожу, как распространить ответ на это приглашение. То есть, как только пользователь ответит на это приглашение...
[Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):
... можно разумно предположить, что мой командлет теперь может воздействовать на ответ пользователя на это приглашение. Отчасти это, безусловно, верно: и Suspend [S]
, и Help [?]
являются локализованными операциями, и они работают нормально.
Но моя главная проблема заключается в распознавании и воздействии на Yes to All
и No to All
. Как в C# (через Cmdlet.ShouldProcess()
), так и в PowerShell (через $PSCmdlet.ShouldProcess()
) можно получить только логический результат, о котором я могу только догадываться:
true
это либо [Y], либо [A].false
это либо [N], либо [L].
Сначала я надеялся, что ShouldContinue
, хотя и не задокументировано как таковое, будет использовать внутреннее состояние командлета, чтобы сделать это различие, но эксперименты со сценариями командлетов показали, что это не так.
На самом деле, единственный возможный обходной путь, который я нашел до сих пор, это Ранняя интерпретация Джеффри Сновером (около 2007 г.!) функции Should-Process для PowerShell, предположительно до появления "официальных" Cmdlet.ShouldProcess
и $PSCmdlet.ShouldProcess
.
Мне трудно поверить, что команда PowerShell забыла разрешить различать Да/Да для всех и Нет/Нет для всех; скорее я предполагаю, что я просто пропускаю это.
Итак, мой вопрос в краткой форме: как для скомпилированных командлетов, так и для командлетов со сценариями, как я могу отличить Yes
от Yes to All
и No
от No to All
?