首页 > 解决方案 > Azure 函数不会在 Push-OutputBinding 中使用 Stop ErrorAction 引发终止错误

问题描述

我正在尝试构建一个简单的 try-catch 语句,如下所示,但该 catch 块永远不会被执行

try {
  Push-OutputBinding -ErrorAction Stop -Name outputQueueItem -Value $Object
} 
catch {
  Write-Error "Catching Error"
  # code to catch the error
} 

ErrorAction Stop问题是除了我有参数的事实之外,天蓝色函数没有抛出预期的错误作为终止。因此catch代码永远不会被执行。

输出日志:

[8/18/2020 9:42:11 PM] INFORMATION: 00:00:09.9511800
[8/18/2020 9:42:11 PM] Executed 'Functions.Monitor' (Failed, Id=6bf398bd-de2b-460f-a44b-db9838feff3f)
[8/18/2020 9:42:11 PM] System.Private.CoreLib: Exception while executing function: Functions.Monitor. Microsoft.WindowsAzure.Storage: Messages cannot be larger than 65536 bytes.

该错误是意料之中的,但是,catch 代码块从未被执行。

运行时信息:

Azure Functions Core Tools (3.0.2630 Commit hash: beec61496e1c5de8aa4ba38d1884f7b48233a7ab)
Function Runtime Version: 3.0.13901.0

我也尝试过更改变量$ErrorActionPreference = "Stop",但也没有用。

标签: azurepowershellazure-functions

解决方案


您的脚本无法捕获此异常,因为它发生脚本完成之后。该Push-OutputBinding命令不会直接将数据写入 Azure 存储。相反,它只是将其存储在一个内部数据结构中,而实际写入 Azure 存储发生在函数完成之后。

另请参阅:https ://github.com/Azure/azure-functions-powershell-worker/issues/284

解决方法是将脚本更改为直接写入 Azure 存储而不是调用Push-OutputBinding,这样您就可以实现自己的错误处理。


推荐阅读