我可以在powershell脚本中编写警告,但结尾不带换行符吗?
我想在PowerShell中打印一条警告作为提示,然后在同一行上阅读答案。问题在于,我可以在powershell脚本中编写警告,但结尾不带换行符吗?,powershell,powershell-7.0,Powershell,Powershell 7.0,我想在PowerShell中打印一条警告作为提示,然后在同一行上阅读答案。问题在于,Write Warning在消息末尾打印一个换行符,而另一个选项,Read Host-Prompt不会将提示打印到警告流中(或以黄色打印)。我看过编写警告-警告操作查询,但我认为这有点冗长,并且提供了我不想要的选项 我所做的最好的事情是: $warningMsg= "Something is wrong. Do you want to continue anyway Y/N? [Y]:"
Write Warning
在消息末尾打印一个换行符,而另一个选项,Read Host-Prompt
不会将提示打印到警告流中(或以黄色打印)。我看过编写警告-警告操作查询
,但我认为这有点冗长,并且提供了我不想要的选项
我所做的最好的事情是:
$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
似乎是写入信息流的包装器,但我看不到没有新行([Console]::Warning.WriteLine()
不存在)就可以写入警告的任何方法。您无法使用Write Warning
执行您想要的操作
因此,我将回答您的其他问题。
Write Host
非常适合在PowerShell 5+脚本中使用
如果您查看那些反对使用它的文章,您会注意到绝大多数(如果不是全部的话)都是在PowerShell 5推出之前编写的
如今,Write Host
是写信息的包装器
委员会确认:
从Windows PowerShell 5.0开始,Write Host
是
写入信息
这允许您使用写入主机
将输出发送到
信息流。这可以捕获或抑制
使用写入主机写入的数据
,同时向后保留
兼容性
$InformationPreference
首选项变量和-InformationAction
公共参数不影响写入主机
消息。例外
这条规则是
-信息操作忽略
,有效抑制
写入主机
输出
使用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
注意
虽然从技术上讲,不可能使用写入警告-NoNewLine
,但您可以研究如何操作光标位置并将其重置到前一行的末尾,因此也可以这样做
然而,我在这方面的经验有限,而且我对这个问题的观察是,您可能最终不得不创建异常以符合某些控制台环境的限制。在我看来,这有点过分了
其他参考资料
有关写入主机的警告是。。。经常夸大其词。[咧嘴笑]如果你想在屏幕上写字,你想要颜色,你愿意放弃干净地禁用这种书写的能力。。。那么Write-Host
就是正确的使用方法。随着PS5的推出,Write-Host的“邪恶”消失了。我知道在那之前它是有问题的,但是现在,它确实在信息流中写下了(更多细节见答案)@Lee_Dailey我对“放弃”这个事实很好奇,所以我检查了一下。您仍然可以通过-InformationAction
参数禁用该写入(请参阅我的答案[grin back]中的奖金部分)@SagePourpre-ah!谢谢[咧嘴笑]。。。我已经忘记了-InformationAction
如何更改编写主机
。。。[脸红]如果我能将信息重定向到警告,也许我能做到,但这似乎还不可能。