You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PowerShell中不使用Try-Catch检测非错误执行状态

PowerShell 检测 Remove-Item 无错误执行状态的正确写法

原代码问题分析

你现有代码的判断逻辑不成立:$error是PowerShell全局维护的错误记录数组,哪怕没有产生任何错误,它也不等于空字符串,因此if ($error -eq '')的判断永远不会触发$NumOK++的分支。
此外,即使你指定了-ErrorAction 'SilentlyContinue',目录不存在触发的错误仍然会被写入$error数组,旧的判断条件也无法正确识别这种情况。

可直接使用的实现方案

方案1:用$?自动变量(最简洁)

PowerShell内置的$?变量会直接返回上一条命令的执行结果:执行成功为$true,出现任何错误为$false,完全适配当前场景:

$error.Clear()
Remove-Item -Recurse -Force $DirName -ErrorAction SilentlyContinue
if ($?) {
    $NumOK++
}

方案2:用$error计数判断(适配你原有思路)

如果要沿用你基于$error做判断的思路,只需要把判断条件改为检测错误计数即可:

$error.Clear()
Remove-Item -Recurse -Force $DirName -ErrorAction SilentlyContinue
if ($error.Count -eq 0) {
    $NumOK++
}

方案3:仅忽略「路径不存在」错误(灵活适配业务需求)

如果你只是不需要处理目录不存在的场景,但需要捕获其他错误(比如权限不足、文件被占用),可以用错误变量过滤指定错误类型:

Remove-Item -Recurse -Force $DirName -ErrorAction SilentlyContinue -ErrorVariable removeErr
# 过滤掉路径不存在的特定错误
$unexpectedErr = $removeErr | Where-Object { $_.FullyQualifiedErrorId -ne 'PathNotFound,Microsoft.PowerShell.Commands.RemoveItemCommand' }
# 没有意外错误则计数+1
if (-not $unexpectedErr) {
    $NumOK++
}

内容的提问来源于stack exchange,提问作者johny why

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 20:15:05