You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使依赖AzureADPreview模块的PowerShell 5脚本在Azure函数中运行

在Azure函数中运行依赖PowerShell 5和AzureADPreview的脚本方案

一、创建符合要求的Azure函数应用

  • 必须选择Windows操作系统的函数应用,因为PowerShell 5.x仅支持Windows环境。
  • 创建时指定运行时为PowerShell 5.x(注意区分跨平台的PowerShell Core版本,其不兼容AzureADPreview的PowerShell 5要求)。

二、配置托管身份与权限

  1. 为函数应用启用系统分配的托管身份:在函数应用的「标识」选项卡中,切换到「系统分配」标签,设置状态为「开启」并保存。
  2. 为托管身份分配Azure AD权限:
    • 进入Azure AD的「企业应用」,找到对应函数应用的托管身份条目。
    • 切换到「权限」选项卡,添加权限:选择「Azure Active Directory Graph」,添加Directory.Read.All(读取用户信息)和AuditLog.Read.All(读取审计日志)权限。
    • 点击「授予管理员同意」确保权限生效。

三、部署AzureADPreview模块

Azure函数默认环境不包含该模块,需手动部署:

  • 方式1:通过Kudu控制台安装
    1. 进入函数应用的「高级工具」,启动Kudu控制台。
    2. 在PowerShell终端执行:Install-Module AzureADPreview -SkipPublisherCheck -Force -Scope CurrentUser
    3. 将安装后的模块从C:\Users\siteadmin\Documents\WindowsPowerShell\Modules\AzureADPreview复制到D:\home\site\wwwroot\modules\AzureADPreview。
  • 方式2:本地打包上传
    1. 在本地PowerShell 5环境执行:Save-Module AzureADPreview -Path .\modules
    2. 将modules文件夹上传到函数应用的site/wwwroot目录下(可通过FTP或函数应用的「高级工具」文件管理器操作)。

四、调整脚本适配Azure函数环境

Azure函数运行环境与本地PowerShell存在差异,需对原脚本做以下调整:

  • 将Write-Host替换为Write-Output:Write-Host的输出无法被函数日志系统捕获,改用Write-Output才能在函数日志中查看执行信息。
  • 注意函数超时限制:默认函数执行超时为5分钟,若禁用用户数量较多,每个循环的Start-Sleep -Seconds 20会快速耗尽超时时间,建议缩短Sleep时长或在函数应用配置中延长超时时间(最大可设置为10分钟)。

调整后的脚本示例:

Write-Output "START"

Connect-AzureAD -Identity
$disabledUsers = Get-AzureADUser -Filter "AccountEnabled eq false" | Select-Object UserPrincipalName

foreach($disabledUser in $disabledUsers) {
    $logs = Get-AzureADAuditDirectoryLogs -Filter "targetResources/any(tr:tr/userPrincipalName eq '$($disabledUser.UserPrincipalName)' and ActivityDisplayName eq 'Disable account')" -Top 1 | Select-Object ActivityDateTime 
    if($logs) {
        foreach ($log in $logs) {
            if($log.ActivityDateTime.DateTime -lt (Get-Date).AddDays(-5).DateTime) {
                Write-Output "Account $($disabledUser.UserPrincipalName) disabled more than 5 days ago. Logs found."
                break
            }
        }
    } else {
        Write-Output "Account $($disabledUser.UserPrincipalName) disabled more than 30 days ago. Cannot find logs."
    }

    Start-Sleep -Seconds 20
}

Write-Output "FINISH"

五、部署并测试函数

  • 将调整后的脚本放入函数的run.ps1文件中(建议创建Timer Trigger类型的函数,用于周期性执行该逻辑)。
  • 触发函数执行,通过函数应用的「监测」选项卡查看日志,确认脚本运行正常。

内容的提问来源于stack exchange,提问作者KEM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 07:20:23