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

基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:19:31