Clear-Host не работает при вызове из класса - PullRequest
1 голос
/ 26 января 2020

Конверт:

Версия Powershell: 6.2.3

MscO: Catalina

Знаете ли вы, почему

Clear-Host не работает, когда вызывается из класса - как это:

# Clear-Host << This works?
Class Menu {
  ShowMenu(){Clear-Host} # Not working
}

$menu = [Menu]::New()
$menu.ShowMenu()

Но в функции вне класса это работает?

1 Ответ

1 голос
/ 26 января 2020

Похоже, вы столкнулись с ошибкой в ​​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() - является самой простой реализацией в целом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...