如何在 PowerShell 中输出信息消息
- PowerShell 中输出导出简介
-
PowerShell 中的
Write-OutputCmdlet -
PowerShell 中的
Write-Host和Write-InformationCmdlet -
PowerShell 中的
Write-WarningCmdlet -
PowerShell 中的
Write-DebugCmdlet -
PowerShell 中的
Write-ErrorCmdlet -
PowerShell 中的
Write-VerboseCmdlet
在任何语言中,向控制台写入信息消息是一个基本过程,因为它正确地向用户提供反馈。然而,在 Windows PowerShell 中有多种打印消息的方法。
本文将区分多种写入命令,如编写信息、警告和错误消息,并提供在何时何地可以使用它们的情况。
PowerShell 中输出导出简介
在我们开始讨论不同的写入命令之前,值得注意的是 PowerShell 可以通过用单引号 ('') 或双引号 ("") 包围单行来输出消息。
示例代码:
"Hello World!"
'Hello World'
输出:
Hello World!
Hello World
由于字符串的字面表达和隐藏字符串管道,上述多个代码片段等价于下面的示例代码。
示例代码:
"Hello World!" | Out-Host
Out-Host 命令将对象发送到控制台进行显示。
PowerShell 中的 Write-Output Cmdlet
第一种打印方法是 Write-Output 命令。该 cmdlet 是 PowerShell 脚本环境中所有打印方法的最基本语法。
我们可以将其等同于许多不同语言的基本打印方法,如 print 和 stdout。
示例代码:
Write-Output "Hello World!"
输出:
Hello World!
PowerShell 中的 Write-Host 和 Write-Information Cmdlet
Write-Host 命令是另一种打印方法,类似于之前的方式 Write-Output。
该命令在 PowerShell 5.0 更新之前的唯一区别是该方法只能使用 -BackgroundColor 和 -ForegroundColor 参数输出不同颜色的消息。
如前所述,从 Windows PowerShell 5.0 开始,Write-Host 现在是 Write-Information 的包装器。这使我们可以使用 Write-Host 向信息流发出输出。
该 cmdlet 使得在保留向后兼容性的同时,可以抑制或捕获使用 Write-Host 命令写入的数据。
$InformationPreference 惯例变量和 -InformationAction 标准参数不会影响 Write-Host 消息。对此规则的例外是 -InformationAction Ignore,它有效地抑制了 Write-Host 输出。
使用 Write-Host 或 Write-information 向信息流写入不会产生输出字符串的问题。
如果我们使用 -InformationAction 参数,只要将给定参数值绑定到函数中的 Write-Host 语句,我们还可以操纵信息流的可见性。
例如,下面的示例将默认禁用信息流,除非通过 -InformationAction 参数请求其他。
Write-Host 'This is a test message' -InformationAction $InformationPreference -ForegroundColor Green
PowerShell 中的 Write-Warning Cmdlet
Write-Warning 命令向 Windows PowerShell 主机写入警告消息。对警告事件的响应取决于用户的 $WarningPreference 变量的值和 -WarningAction 标准参数。
$WarningPreference 变量的有效值如下。
Stop- 显示警告和错误消息,然后停止执行。Inquire- 显示警告消息并提示用户以确认消息的形式继续。Continue- 该变量的默认值。显示警告消息并继续执行。SilentlyContinue- 不显示警告消息。继续执行。
示例代码:
Write-Warning "This is only a test warning notification." -WarningAction Continue
PowerShell 中的 Write-Debug Cmdlet
Write-Debug 命令也是 PowerShell 中打印的另一种方法。然而,这通常在开发中用于打印调试消息。
调试消息默认情况下不会显示,但可以使用 $debugPreference 变量进行更改。
示例代码:
Write-Debug "Error on line 1. Please investigate."
$debugPreference = "Continue"
Write-Debug "Error on line 5. Please investigate."
输出:
DEBUG: Error on line 5. Please investigate.
PowerShell 中的 Write-Error Cmdlet
Write-Error 命令输出一个非终止错误。默认情况下,错误被发送到错误流中,以便与输出一起导出到 PowerShell 主机程序。
要输出非终止错误,输入一个错误消息字符串,一个 ErrorRecord 对象或一个 Exception 对象。然后,使用 Write-Error 的不同参数来填充我们将导出的错误记录。
非终止错误将错误写入错误流,但不会停止命令处理。例如,如果在一组输入项中的一个项上抛出非终止错误,则 cmdlet 将继续处理其他项。
示例代码:
Write-Error "Invalid object" -ErrorId B1 -TargetObject $_
输出:
Write-Error "Invalid object" -ErrorId B1 -TargetObject $_ : Invalid object
+ CategoryInfo : NotSpecified: (:) [Write-Error], WriteErrorException
+ FullyQualifiedErrorId : B1
PowerShell 中的 Write-Verbose Cmdlet
Write-Verbose 命令将文本写入 PowerShell 中的详细消息流。
与 Write-Debug 命令一样,详细消息默认情况下不会显示,但可以使用变量 $VerbosePreference 或通过添加开关参数 -Verbose 来显示。
示例代码:
Write-Verbose -Message "This will not be displayed."
Write-Verbose -Message "This will be displayed" -Verbose
输出:
VERBOSE: This will be displayed
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn