如何为PowerShell的Write-Error和Write-Warning指定自定义格式?
自定义PowerShell的Write-Warning和Write-Error输出格式
当然可以自定义这些输出的格式!下面给你两种实用的方法来实现你想要的效果,比如把默认的WARNING: a message改成[WARNING]: a message。
方法一:创建自定义包装函数(推荐)
这种方法简单直接,不会修改原生命令的核心行为,还能灵活控制格式:
自定义Write-Warning格式
你可以写一个自己的函数来替代原生的Write-Warning(或者取个新名字,避免覆盖原生命令):
function Write-Warning { param( [Parameter(Mandatory=$true)] [string]$Message ) # 输出自定义格式的警告信息,保留原生警告的黄色字体 Write-Host "[WARNING]: $Message" -ForegroundColor Yellow }
现在执行Write-Warning 'a message',就会输出:[WARNING]: a message,颜色也和原生警告保持一致。
自定义Write-Error格式
同样的思路,给Write-Error做自定义包装:
function Write-Error { param( [Parameter(Mandatory=$true)] [string]$Message ) # 输出自定义格式的错误信息,用原生错误的红色字体 Write-Host "[ERROR]: $Message" -ForegroundColor Red }
执行Write-Error 'something went wrong'就会得到:[ERROR]: something went wrong。
小提醒:如果不想覆盖原生命令,也可以给自定义函数起新名字,比如
Write-CustomWarning、Write-CustomError,这样原生命令还能正常使用。
方法二:修改PowerShell的输出格式器(进阶)
如果你想让原生命令直接输出自定义格式,可以修改PowerShell的格式数据,步骤稍复杂但更贴合原生行为:
- 创建一个XML格式的自定义格式文件,比如
CustomWarnings.format.ps1xml,内容如下:
<?xml version="1.0" encoding="utf-8"?> <Configuration> <ViewDefinitions> <View> <Name>WarningRecord</Name> <ViewSelectedBy> <TypeName>System.Management.Automation.WarningRecord</TypeName> </ViewSelectedBy> <CustomControl> <CustomEntries> <CustomEntry> <CustomItem> <Text ForegroundColor="Yellow">[WARNING]: </Text> <PropertyName>Message</PropertyName> </CustomItem> </CustomEntry> </CustomEntries> </CustomControl> </View> </ViewDefinitions> </Configuration>
- 在PowerShell中加载这个格式文件:
Update-FormatData -PrependPath .\CustomWarnings.format.ps1xml
现在再执行原生的Write-Warning 'a message',就会输出你想要的[WARNING]: a message格式了。
类似地,你可以用同样的方式创建针对ErrorRecord的格式文件来修改Write-Error的输出。
提示:这种方法不需要替换原生命令,但格式文件需要每次会话手动加载,或者加到PowerShell的配置文件(
$PROFILE)里实现自动加载。
内容的提问来源于stack exchange,提问作者Manea
相关产品推荐
相关产品推荐

