Я сталкивался с похожими проблемами кодирования в PowerShell, и проблема, с которой я столкнулся, заключается в разных хостах (Normal PowerShell.EXE и PowerShell_ISE.EXE) и о том, как они по-разному обрабатывают пользовательский интерфейс. Например, вы можете прочитать клавишу с клавиатуры, используя $ Host.UI.RawUI.ReadKey (), но только в хосте PowerShell.EXE, а не в ISE. Без очистки экрана и повторного рисования вопроса у вас действительно не будет много жизнеспособных опций, которые работают в любых ситуациях.
Самый простой, самый элегантный способ обработки подобных ситуаций, на мой взгляд , это рассматривать скорее как проблему социальной инженерии, а не как проблему программирования. Я имею в виду, перефразируй свой вопрос, чтобы проверить рискованный вариант, а все остальное - безопасный вариант. В вашем случае, если установка дополнительных ролей должна выполняться только в случае крайней необходимости, перепишите ваш вопрос следующим образом:
if ($roles -eq "1") {
$answer = read-host -prompt "Found missing roles. Press 'Y' to install them"
}
Затем, если $ answer -eq 'Y', выполните установку, в противном случае, независимо от что еще они печатают, не устанавливайте.
Если, однако, установка ролей там, где ненужные, не так уж плоха, вы можете переписать вопрос следующим образом:
if ($roles -eq "1") {
$answer = read-host -prompt "Ready to install missing roles. Press 'N' to skip the installation."
}
В этом случае вы бы установили UNLESS, если пользователь вводит «N».
Иногда, как программисты, мы пытаемся решать человеческие проблемы с помощью большего количества кодирования, когда на самом деле человеческое решение гораздо проще.
Удачи .