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

PowerShell创建目录时用Try/Catch还是ErrorVariable加IF判断?

PowerShell Try/Catch 与 IF 判断写法的有效性说明

核心结论

你当前使用的Try/Catch写法无法正常生效:
PowerShell 中Try/Catch仅能捕获终止性错误,你在New-Item命令中指定了-ErrorAction SilentlyContinue参数,执行过程中产生的非终止性错误会被静默忽略,不会触发Catch块的执行。-ErrorVariable Problem仅会把错误信息存入指定变量,不会抛出可被Try/Catch捕获的终止错误。

两种可用实现方案

方案1:修正后的Try/Catch写法

如果要继续使用Try/Catch,需要将-ErrorAction参数值改为Stop,让执行错误转为终止性错误,即可被捕获:

Try {
    New-Item -Path C:\reports -ItemType Directory -ErrorAction Stop -Force
}
Catch {
    Write-Warning "Problem with C:\Report directory. Unable to create report $Type of $SourceEmail $Flag $DestinationEmail"
}

方案2:IF ($Problem)判断写法

你提供的备选写法可以正常工作,不需要调整错误行为参数,直接判断错误变量是否非空即可处理异常场景,写法更简洁:

New-Item -Path C:\reports -ItemType Directory -ErrorAction SilentlyContinue -ErrorVariable Problem -Force
If ($Problem) {
 Write-Warning "Problem trying to create C:\Reports."
}

补充说明

New-Item搭配-Force参数本身已经实现了「目录存在则跳过、不存在则创建」的逻辑,上述两种方案都是用于处理创建失败的异常场景(如权限不足、路径被占用等),你可以根据代码风格偏好任选其一使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:54:05