首页 > 解决方案 > 如何在 Azure Functions 3.x PowerShell 7 中调用 Azure PowerShell 模块命令?

问题描述

我需要在 Azure Functions 3 中运行 Azure PowerShell 模块命令 ( https://docs.microsoft.com/en-us/powershell/azure/install-az-ps?view=azps-5.2.0 ) 脚本。

我不想Install-Module在每个函数调用上都运行。我希望有更好的方法来做到这一点。Azure PowerShell 模块相当大。

我正在阅读以下文档,但找不到任何关于如何调用 Azure PowerShell 模块命令的参考资料 https://docs.microsoft.com/en-us/azure/azure-functions/functions-reference-powershell?标签=门户

如何在 Azure Functions 3.x PowerShell 7 中调用 Azure PowerShell 模块命令?

标签: azure-functions

解决方案


在这种情况下不需要使用Install-Module,目前,当您在门户中创建 powershell 功能时,它会Az默认通过依赖管理功能为您安装模块。

您可以检查App files门户中的刀片以确保您的功能应用程序配置正确,如果没有,请按如下所示进行更改。

host.json

{
  "version": "2.0",
  "managedDependency": {
    "Enabled": true
  },
  "extensionBundle": {
    "id": "Microsoft.Azure.Functions.ExtensionBundle",
    "version": "[1.*, 2.0.0)"
  }
}

requirements.psd1

@{
    # For latest supported version, go to 'https://www.powershellgallery.com/packages/Az'. 
    'Az' = '5.*'
}

profile.ps1

if ($env:MSI_SECRET) {
    Disable-AzContextAutosave -Scope Process | Out-Null
    Connect-AzAccount -Identity
}

通过上面的设置,函数应用会自动为你安装模块并使用你的函数应用的MSI(托管标识)Az登录Az模块(命令在做),很方便。profile.ps1

要在函数中使用Az命令,您只需为您的函数应用启用 MSI并将 RBAC 角色分配给您的 MSI(取决于具体情况,例如,如果您想列出订阅/资源组中的所有 Web 应用,您需要Reader在订阅/资源组范围内为您的 MSI赋予角色)。

在此处输入图像描述

然后在你的函数代码中,直接使用Az命令就可以了,没有别的。

样本:

$a = Get-AzWebApp -ResourceGroupName joyRG
Write-Host $a.Name

在此处输入图像描述


推荐阅读