如何使依赖AzureADPreview模块的PowerShell 5脚本在Azure函数中运行
在Azure函数中运行依赖PowerShell 5和AzureADPreview的脚本方案
一、创建符合要求的Azure函数应用
- 必须选择Windows操作系统的函数应用,因为PowerShell 5.x仅支持Windows环境。
- 创建时指定运行时为PowerShell 5.x(注意区分跨平台的PowerShell Core版本,其不兼容AzureADPreview的PowerShell 5要求)。
二、配置托管身份与权限
- 为函数应用启用系统分配的托管身份:在函数应用的「标识」选项卡中,切换到「系统分配」标签,设置状态为「开启」并保存。
- 为托管身份分配Azure AD权限:
- 进入Azure AD的「企业应用」,找到对应函数应用的托管身份条目。
- 切换到「权限」选项卡,添加权限:选择「Azure Active Directory Graph」,添加Directory.Read.All(读取用户信息)和AuditLog.Read.All(读取审计日志)权限。
- 点击「授予管理员同意」确保权限生效。
三、部署AzureADPreview模块
Azure函数默认环境不包含该模块,需手动部署:
- 方式1:通过Kudu控制台安装
- 进入函数应用的「高级工具」,启动Kudu控制台。
- 在PowerShell终端执行:
Install-Module AzureADPreview -SkipPublisherCheck -Force -Scope CurrentUser - 将安装后的模块从
C:\Users\siteadmin\Documents\WindowsPowerShell\Modules\AzureADPreview复制到D:\home\site\wwwroot\modules\AzureADPreview。
- 方式2:本地打包上传
- 在本地PowerShell 5环境执行:
Save-Module AzureADPreview -Path .\modules - 将
modules文件夹上传到函数应用的site/wwwroot目录下(可通过FTP或函数应用的「高级工具」文件管理器操作)。
- 在本地PowerShell 5环境执行:
四、调整脚本适配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
相关产品推荐
相关产品推荐

