屏蔽/捕获并输出错误
ErrorAction 只能屏蔽非终止性错误,可用参数值如下:(有关详细信息,键入“get-help about_commonparameters”)。
参数值:
Stop: 显示错误消息并停止执行。
Inquire: 显示错误消息,并询问您是否要继续。
Continue: 显示错误消息并继续执行。
SilentlyContinue: 无效果。不显示错误消息,执行继续而无中断。(默认)
$ErrorActionPreference 和 ErrorAction 通用参数都不会影响 Windows
示例:
gwmi win32_operatingsystem -ComputerName 192.168.9.2 -Credential $cred #如果连接不到计算机则会报错 gwmi win32_operatingsystem -ComputerName 192.168.9.2 -Credential $cred -ErrorAction silentlycontinue #如果连接不到计算机则不会出现报错信息 $process = Get-Process "asdfasd" -ErrorAction Silentlycontinue #使用 $? 判断是否正确
#从这里开始隐藏所有的错误信息 $ErrorActionPreference="SilentlyContinue" Stop-Process -Name "abc" #恢复$ErrorActionPreference,错误开始输出 $ErrorActionPreference="Continue"
屏蔽终止性错误:try{} catch {}
如下代码为 零除 错误,直接运行将会返回错误:
Write-Host "script begin" [int] "not a number" $denominator = 0 $result = 50 / $denominator Write-Host "script end" 使用try{} catch {}则会屏蔽其错误,没有输出: try { Write-Host "script begin" [int] "not a number" $denominator = 0 $result = 50 / $denominator Write-Host "script end" } catch {}
捕获终止错误并输出:
try {get-adf;write-host "adf"} catch {$_.exception.message}
检测到语法错误,会终止代码的执行,其错误会被捕获,但是 write-host "adf"并不会被继续执行。
结果:
捕获并输出非终止错误
有时候会需要捕获非终止错误,比如 Remove-Item d:\adfasdf.txt 删除一个不存在的文件:
try { remove-item d:\adfasdf.txt write-host "af" } catch {$_.exception.message}
结果其错误并未被捕获,因为其是一个非终止错误,错误级别较低:
可以将其改为终止错误,如下:
try { $ErrorActionPreference='stop' #终止错误 remove-item d:\adfasdf.txt write-host "af" } catch {$_.exception.message}
结果变成了终止错误,并被捕获:
可以使用如下方法捕获并输出非终止错误:
Remove-Item d:\adfasdf.txt 2>d:\za.txt 或者
Remove-Item d:\adfasdf.txt 2>>d:\za.txt (追加到文本)
自定义错误,使用 Trap:
Trap { "出错了啊: $($_.Exception.Message)"; Continue; } Remove-Item "Books" -ea Stop
结果:
还有一些错误是 ErrorAction和try{} catch {}都无法屏蔽的,如下:
net use \\192.168.9.2 2299 /user:administrator ,如果连接不到目标计算机,则会出现错误 “发生系统错误 53.找不到网络路径”。
可以使用 “>nul 2>nul” 屏蔽其错误信息,然后依然可以继续使用 $lastexitcode 或者 %errorlevel% 得到返回值
cmd /c " net use \\192.168.9.2 2GeneDNA9 /user:administrator >nul 2>nul"
解释:
>nul 或者 1>nul 作用是屏蔽成功执行命令的输出内容
2>nul 作用是屏蔽命令执行失败的输出内容
1>nul 2>nul 作用是屏蔽的所有输出提示 [不论正确与否]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?