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
相关产品推荐
相关产品推荐

