Azure 函数中的 Az.Functions 模块引发错误

Posted

技术标签:

【中文标题】Azure 函数中的 Az.Functions 模块引发错误【英文标题】:Az.Functions Module in Azure function throwing Error 【发布时间】:2022-01-19 11:52:47 【问题描述】:

我正在尝试创建一个 PowerShell 函数应用,其中包含一个函数 - 一个可以在特定时间启动和停止另一个函数应用的计时器触发器。

在遇到this blog 关于使用计时器触发功能自动启动和停止 Azure 上的虚拟机的时间后,我很有动力尝试个人项目。

问题来自我需要运行一行代码的 Az.Functions 模块

$fnapps = Get-AzFunctionApp

它第一次运行良好(日志中没有已知或看到的错误并且输出是正确的)。但是在我设置的 CRON 计划运行的第二个实例和其他实例中,我从模块中看到了这个异常错误。

错误代码是:

You cannot call a method on a null-valued expression.Exception             :Type        : System.Management.Automation.RuntimeExceptionErrorRecord :Exception             :Type    : System.Management.Automation.ParentContainsErrorRecordExceptionMessage : You cannot call a method on a null-valued expression.HResult : -2146233087CategoryInfo          : InvalidOperation: (:) [], ParentContainsErrorRecordExceptionFullyQualifiedErrorId : InvokeMethodOnNullInvocationInfo        :ScriptLineNumber : 450OffsetInLine     : 24HistoryId        : -1ScriptName       : 

我想知道关于 Az.Functions Module 是否缺少某些东西。

也想知道我想做的事情是否可行。

注意:我已经确认模块安装正确,代码的其他部分没有问题。

谢谢。

【问题讨论】:

你能分享一些代码sn-ps。异常消息表明您从 PS 访问 Fn 应用程序的方式存在问题。 $fnapps = Get-AzFunctionApp foreach ($fnapp in $fnapps) if(($fnapp.Name -eq "startMe") -and ($fnapp.Status -eq "Stopped") -and ($time -gt $StartTime)) Start-AzFunctionApp -Name $fnapp.Name -ResourceGroupName "peterRepro" Write-Host "Function App - $($fnapp.Name) Started" 如何在函数应用的执行过程中保留 Azure 上下文?您是否将上下文存储在 json 文件中?如果没有上下文,第二次以后,Get-AzFunctionApp 将无法检索您的 azure func 应用资源。 我在 app 文件的 requirements.psd1 中明确添加了 Az.Accounts = 2.6.2 模块。同样在我的函数 (run.ps1) 中,我有这个来获取 Az 上下文并在声明我的订阅后设置 Az-context:param($Timer)$subscriptionid = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" Set-AzContext -Subscriptionid $Subscriptionids | Out-Null`$CurrentSub = (Get-AzContext).Subscription.Id有什么需要设置的吗? 你必须跨会话使用上下文,所以需要使用这个Save-AzContext,参考这个document 【参考方案1】:

谢谢Anand-Sowmithiran。发布您的建议作为答案,以便对面临类似问题的其他社区成员有所帮助。

根据文档,您需要跨会话使用上下文

下面是Save-AzContext 语法示例

Save-AzContext
    [[-Profile] <AzureRmProfile>]
    [-Path] <String>
    [-Force]
    [-DefaultProfile <IAzureContextContainer>]
    [-WhatIf]
    [-Confirm]
    [<CommonParameters>]

更多信息请查看az.accounts 模块

【讨论】:

@AnandSowmithiran 我非常感谢迄今为止的帮助。我想知道在哪里使用这个 Save-AzContext?是在我的profile.ps1 if ($env:MSI_SECRET) Connect-AzAccount -Identity Save-AzContext -Profile 还是在代码本身(run.ps1)。谢谢

以上是关于Azure 函数中的 Az.Functions 模块引发错误的主要内容,如果未能解决你的问题,请参考以下文章

Azure 中的 ConnectionString 没有覆盖 Azure 函数的 LocalSqlServer

切换到 Azure.Storage.Queues 后 Azure 函数中的模型绑定问题

写入 Azure 函数中的文件失败

使用java中的azure函数将文件从浏览器上传到azure blob存储

使用 azure 函数从表单数据请求中详细说明并存储在 azure blob 中的多个文件

具有非匿名 authLevel 的 Docker 中的 Http 触发 Azure 函数