3

我想在 PowerShell 中打印警告作为提示,然后在同一行阅读答案。问题是Write-Warning在消息末尾打印一个换行符,而另一种选择,Read-Host -Prompt,不会将提示打印到警告流(或以黄色打印)。我见过Write-Warning -WarningAction Inquire,但我认为这有点冗长,并且提供了我不想要的选项。

我做过的最好的是:

  $warningMsg= "Something is wrong. Do you want to continue anyway Y/N? [Y]:"
  Write-Host -ForegroundColor yellow -NoNewline $warningMsg
  $cont = Read-Host

这很好用——打印黄色提示,然后在同一行读取输入——但我想知道我看到的反对使用的警告Write-Host,如果找出某种方式打印到警告流更合适没有换行符。有没有办法做到这一点?我注意到这Write-Host似乎是写入 Info 流的包装器,但我看不到任何在没有新行的情况下写入警告的方法([Console]::Warning.WriteLine()例如,不存在)。

4

1 回答 1

3

你不能做你想做的事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

于 2020-07-10T01:27:39.537 回答