我正在尝试使用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
建议/最佳方式记录日志文件中的错误以供审阅。
New-AzureRmStreamAnalyticsJob
/ try
,你的第一个命令也将处理由catch
发出的任何终止错误。
一般来说,如果命令有多个输入并在每个输入的基础上发出非终止错误 - 这意味着默认情况下继续处理,即使特定输入导致非终止错误 - 您使用-ErrorAction Stop
实际上会短-circuit和遇到第一个非终止错误时中止。-ErrorAction SilentlyContinue
就不会有效,也不会尝试通过-ErrorVariable
捕获该错误 - 简而言之:通用参数-ErrorAction
只会影响非终止错误。相比之下,$ErrorActionPreference
偏好变量 - 令人惊讶[1] - 也会影响终止错误的处理方式,因此,作为一般模式,如果您的意图是:
# 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。