Вы не можете делать то, что хотите, с Write-Warning
.
Поэтому я отвечу по поводу вашего другого беспокойства. Write-Host
идеально подходит для использования в сценарии PowerShell 5+.
Если вы посмотрите статьи, рекомендующие не использовать его, вы заметите, что подавляющее большинство (если не все) были написаны до введения PowerShell 5.
В настоящее время Write-Host
представляет собой оболочку вокруг Write-Information
.
Официальная документация подтверждает это:
Запуск в Windows PowerShell 5.0 Write-Host
является оболочкой для Write-Information
. Это позволяет использовать Write-Host
для вывода вывода в информационный поток. Это позволяет захват или подавление данных, записанных с использованием Write-Host
, при сохранении обратной совместимости.
Предпочтительная переменная $InformationPreference
и общий параметр -InformationAction
не влияют на сообщения Write-Host
. Исключением из этого правила является -InformationAction Ignore
, что эффективно подавляет вывод Write-Host
.
Запись в информационный поток с использованием Write-Host
и / или Write-information
не создаст проблем с вашей выходной строкой.
Stream # Description Introduced in
1 Success Stream PowerShell 2.0
2 Error Stream PowerShell 2.0
3 Warning Stream PowerShell 3.0
4 Verbose Stream PowerShell 3.0
5 Debug Stream PowerShell 3.0
6 Information Stream PowerShell 5.0
* All Streams PowerShell 3.0
Бонус
Вы также можете управлять видимостью информационного потока, если используете расширенную функцию через параметр -InformationAction
, при условии, что вы также привязываете данное значение параметра к операторы Write-Host
в функции.
Например, если вы хотите отключить информационный поток по умолчанию, если не требуется иное:
function Get-Stuff {
[CmdletBinding()]
param ()
if (!$PSBoundParameters.ContainsKey('InformationAction')) {
$InformationPreference = 'Ignore'
}
Write-Host 'This is the stuff' -InformationAction $InformationPreference -ForegroundColor Green
}
# Hidden by default
Get-Stuff
# Force it to show
Get-Stuff -InformationAction Continue
Примечание
Хотя технически невозможно использовать Write-Warning -NoNewLine
, вы можете попытаться изменить положение курсора и сбросить его до конца предыдущей строки, сделав то же самое.
Однако у меня есть ограниченный опыт в этом, и мои наблюдения по этому поводу заключались в том, что вам может потребоваться создать исключения для соответствия ограничениям некоторых консольных сред. На мой взгляд, это немного перебор ...
Дополнительные ссылки About_redirections