Похоже, вы столкнулись с ошибкой в v6.2.3 , самой последней стабильной версии на момент написания этой статьи, о которой вы можете сообщить на GitHub : внешний * Утилита 1005 *, которая в конечном счете вызывается предопределенной функцией Clear-Host
, просто тихо завершается с ошибкой при вызове из метода пользовательского класса [1] .
Ошибка больше не присутствует в большинстве последняя предварительная версия следующего выпуска v7.0, v7.0.0-rc2.
Тем временем вы можете использовать следующий обходной путь :
if ($PSVersionTable.PSVersion.Major -eq 6) {
# Redefine Clear-Host to use [Console]::Clear() instead of calling /usr/bin/clear
# If you want to fix this globally, use `function global:Clear-Host ...`
function Clear-Host { [Console]::Clear() }
}
Class Menu {
ShowMenu(){Clear-Host}
}
$menu = [Menu]::New()
$menu.ShowMenu()
Примечание что переопределенный Clear-Host
будет тогда console -specifi c (Terminal-Speci c), в то время как команды *-Host
обычно должны работать с всеми типами PowerShell хост-приложения. Однако даже предопределенный Clear-Host
является консольным c начиная с v7.0.0-rc2 - см. этот комментарий на GitHub .
[1] Причина в том, что вывод из /usr/bin/clear
не передается на терминал, потому что вывод из внешних программ , как правило, не пропускается, учитывая, что единственный способ вернуть (успех) вывод из метода через оператор return
. Начиная с v7.0.0-r c .2 это было исправлено путем переноса вызова /usr/bin/clear
в [Console]::Write()
. Возможно, однако, предложенный выше обходной путь - прямой вызов [Console]::Clear()
- является самой простой реализацией в целом.