基于Microsoft Graph API的Office 365报表脚本及E3许可证自动化清理问询
实现Microsoft E3许可证自动化清理的分步指南
我来帮你梳理下完成Microsoft E3许可证自动化清理的后续步骤,结合你已经做好的准备工作,咱们一步步落地:
已完成的准备清单
先确认下你已经搞定的基础工作,确保后续流程顺畅:
- 已在Azure AD中注册应用,获取到Redirect URI和Application ID
- 安装了最新版的MSOnline PowerShell模块
- 准备好全局管理员账号并赋值给
$cred变量 - 脚本文件已放置在服务器
C:\Testing\路径下
1. 连接到Microsoft 365与Azure AD
首先在PowerShell中建立与租户的连接,执行以下代码:
# 导入MSOnline模块 Import-Module MSOnline # 使用全局管理员凭据连接到Azure AD Connect-MsolService -Credential $cred
2. 筛选需要清理许可证的用户
核心逻辑是识别出已分配E3许可证但长期未活跃的用户,这里以“30天未修改密码(间接反映未登录)”为例,你可以根据实际需求调整判断条件(比如结合Exchange/Teams的活跃报告):
# 获取所有已授权且30天未活跃的用户 $inactiveE3Users = Get-MsolUser -All | Where-Object { $_.IsLicensed -eq $true -and $_.LastPasswordChangeTimestamp -lt (Get-Date).AddDays(-30) -and $_.Licenses.AccountSkuId -like "*ENTERPRISEPACK*" # 匹配E3许可证SKU }
提示:如果不确定租户的E3 SKU ID,先执行
Get-MsolAccountSku查看所有可用许可证的AccountSkuId值,替换上面的匹配规则。
3. 执行许可证移除操作
遍历筛选出的用户,批量移除E3许可证,测试阶段建议先加-WhatIf参数验证操作:
# 获取E3许可证的SKU对象 $e3LicenseSku = Get-MsolAccountSku | Where-Object { $_.AccountSkuId -like "*ENTERPRISEPACK*" } # 批量移除许可证 foreach ($user in $inactiveE3Users) { Write-Host "处理用户:$($user.UserPrincipalName)" # 测试阶段取消注释下面一行,正式执行去掉-WhatIf # Set-MsolUserLicense -UserPrincipalName $user.UserPrincipalName -RemoveLicenses $e3LicenseSku.AccountSkuId -WhatIf Set-MsolUserLicense -UserPrincipalName $user.UserPrincipalName -RemoveLicenses $e3LicenseSku.AccountSkuId }
4. 配置自动化定期执行(可选)
如果需要每周/每月自动执行清理,通过Windows任务计划实现:
- 打开任务计划程序,创建新任务
- 触发器:设置为你需要的执行频率(比如每周日凌晨2点)
- 操作:选择“启动程序”,程序路径填
powershell.exe,添加参数:-ExecutionPolicy Bypass -File C:\Testing\YourCleanupScriptName.ps1 - 安全选项:选择具有全局管理员权限的账号运行任务,勾选“不管用户是否登录都要运行”
额外注意事项
- 日志记录:建议在脚本开头添加日志输出,方便后续排查:
$logFilePath = "C:\Testing\E3LicenseCleanup_$(Get-Date -Format 'yyyyMMdd_HHmmss').log" Start-Transcript -Path $logFilePath -Append # 脚本主体内容 Stop-Transcript - 权限验证:确保Azure AD应用(如果用Microsoft Graph扩展功能)已授予
User.Read.All、Directory.ReadWrite.All等必要权限 - 测试先行:正式执行前,先在小范围用户中测试,确认筛选逻辑和移除操作符合预期
内容的提问来源于stack exchange,提问作者Casper Frank-Stender
相关产品推荐
相关产品推荐

