gpt4 book ai didi

powershell - Try/Catch 或 Error 变量并使用

转载 作者:行者123 更新时间:2023-12-02 01:57:28 28 4
gpt4 key购买 nike

我想知道下面的 Try/Catch 是否有效,或者我应该使用 IF ($problem) 而不是 Try/Catch

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

我正在检查目录是否存在,如果不存在则尝试创建该目录。我不确定是否因为我使用 -ErrorAction SilentlyContinue -ErrorVariable Problem try/catch 未按预期工作?

替代方案

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

最佳答案

I am checking to see if a directory exists and if not attempt to create the directory.

New-Item-Force 开关可用于创建目录除非它已经存在;一个System.IO.DirectoryInfo返回描述预先存在的目录或新创建的目录的对象(请注意,-Force 还会根据需要创建目录)。

由于您已经在使用 -Force,这意味着仅报告真实错误情况,例如缺少权限。

在最简单的情况下,当发生此类错误情况时,您可以简单地中止脚本,使用-ErrorAction Stop将(第一个)非- New-Item脚本终止报告的终止错误:

$targetDir = New-Item -Force -ErrorAction Stop -Path C:\reports -ItemType Directory 

如果发生错误,则会打印该错误,并且脚本将中止。

如果您想要捕获错误并执行自定义操作,您有两个互斥的选项:

  • 通过-ErrorVariable Problem捕获变量$Problem中的非终止错误,然后对$Problem的值采取行动; -ErrorAction SilentlyContinue 抑制错误的显示:[1]
$targetDir = New-Item -Force -ErrorAction SilentlyContinue -ErrorVariable Problem -Path C:\reports -ItemType Directory

if ($Problem) {
Write-Warning "Problem trying to create C:\Reports: $Problem"
# Exit here, if needed.
exit 1
}
  • 通过 -ErrorAction Stop 将(第一个)非终止错误提升为脚本终止错误,并使用 try { ... } catch { ... } 语句来捕获它,在其 catch block 中 $_ 引用手头的错误:
try {
$targetDir = New-Item -Force -ErrorAction Stop -Path C:\reports -ItemType Directory
} catch {
$Problem = $_
Write-Warning "Problem trying to create C:\Reports: $Problem"
# Exit here, if needed.
exit 1
}

有关 PowerShell 极其复杂的错误处理的全面概述,请参阅 this GitHub docs issue .


[1] 这使得通过 -ErrorVariable 捕获错误变得静默;不要使用-ErrorAction Ignore,因为这会使-ErrorVariable无效。

关于powershell - Try/Catch 或 Error 变量并使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69454064/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com