我正在尝试使用Azure上的Powershell脚本来提供新的流分析作业,以下代码段是脚本文件的一部分,该脚本文件会将服务添加到资源组。
示例代码:
try{
New-AzureRmStreamAnalyticsJob -ResourceGroupName $resourceGroup -File $template -Name $streamAnalyticsJobName -Force -ErrorAction Stop
}catch{
Write-Output $error[0] | Out-File -Append -FilePath $errLogFilePath
}
或
New-AzureRmStreamAnalyticsJob -ResourceGroupName $resourceGroup -File $template -Name $streamAnalyticsJobName -Force -ErrorVariable Errorvalue -ErrorAction SilentlyContinue
Write-Output Errorvalue | Out-File -Append -FilePath $errLogFilePath
建议/最好的方式在日志文件中记录错误以供查看。
答案 0 :(得分:2)
由于使用了New-AzureRmStreamAnalyticsJob
/ try
,您的第一条命令还将处理catch
发出的任何 terminate 错误。
-ErrorAction Stop
实际上会短路,并在遇到 first 非终止错误时中止。 / li>
在您的第二条命令中,如果发生 terminate 错误,则您对-ErrorAction SilentlyContinue
的使用将无效,并且对您来说都不是有效的尝试通过-ErrorVariable
捕获该错误-简而言之:公用参数-ErrorAction
仅影响非终止错误。
相比之下,$ErrorActionPreference
首选项变量-令人惊讶地 [1] -确实也会影响终止< / em>错误会被处理,因此,如果您的意图是,可以将以下内容作为一般模式:
# Silently ignore any subsequent errors, irrespective of severity, but
# still record them in the automatic $Error collection.
$ErrorActionPreference = 'SilentlyContinue'
# Save the current count of errors stored in $Error.
$errCountBefore = $Error.Count
New-AzureRmStreamAnalyticsJob -ResourceGroupName $resourceGroup -File $template -Name $streamAnalyticsJobName -Force
# If errors occurred, append them to a log.
if ($Error.Count -gt $errCountBefore) {
$Error[$errCountBefore..($Error.Count-1)] >> $errLogFilePath
}
[1]有关PowerShell错误处理及其陷阱的全面概述,请参见this GitHub issue。