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

请求优化AD禁用用户E3许可证清理PowerShell脚本

优化后的PowerShell脚本
# 1. 获取AD中禁用的用户并导出到CSV(确保路径存在)
$outputPath = "C:\Temp\disabledADUser.csv"
# 检查临时目录是否存在,不存在则创建
if (-not (Test-Path "C:\Temp")) {
    New-Item -Path "C:\Temp" -ItemType Directory | Out-Null
}
Get-ADUser -Filter { Enabled -eq $false } | Select-Object UserPrincipalName | Export-Csv -Path $outputPath -NoTypeInformation -Encoding UTF8

# 2. 导入AD禁用用户列表,筛选出拥有E3许可证的用户
$disabledADUsers = Import-Csv -Path $outputPath
$targetUsers = @()

foreach ($user in $disabledADUsers) {
    $upn = $user.UserPrincipalName
    # 跳过空UPN的情况
    if ([string]::IsNullOrWhiteSpace($upn)) {
        continue
    }

    try {
        # 获取O365用户,捕获"用户未找到"的异常
        $o365User = Get-MsolUser -UserPrincipalName $upn -ErrorAction Stop
        # 检查是否持有SPE_E3许可证
        if ($o365User.Licenses.AccountSkuId -match "SPE_E3") {
            $targetUsers += [PSCustomObject]@{
                UserPrincipalName = $upn
                Status            = "AD禁用且拥有E3许可证"
            }
            Write-Host "找到目标用户: $upn" -ForegroundColor Red
        }
        else {
            Write-Host "$upn 无E3许可证" -ForegroundColor Green
        }
    }
    catch [Microsoft.Online.Administration.Automation.MicrosoftOnlineException] {
        # 处理"用户未找到"的错误
        if ($_.Exception.Message -match "用户未找到") {
            Write-Host "$upn 不存在于Office 365中" -ForegroundColor Yellow
        }
        else {
            # 其他异常输出错误信息
            Write-Host "$upn 处理出错: $($_.Exception.Message)" -ForegroundColor DarkRed
        }
    }
    catch {
        # 捕获其他类型的异常
        Write-Host "$upn 发生未知错误: $($_.Exception.Message)" -ForegroundColor DarkRed
    }
}

# 3. 将筛选结果导出到CSV
if ($targetUsers.Count -gt 0) {
    $resultPath = "C:\Temp\DisabledADUsersWithE3.csv"
    $targetUsers | Export-Csv -Path $resultPath -NoTypeInformation -Encoding UTF8
    Write-Host "`n结果已导出至: $resultPath" -ForegroundColor Cyan
}
else {
    Write-Host "`n未找到AD禁用且拥有E3许可证的用户" -ForegroundColor Green
}

关键优化点说明

  • 解决"用户未找到"错误:使用try/catch捕获Get-MsolUser抛出的专属异常,针对"用户未找到"场景单独处理,避免错误信息干扰正常输出。
  • 核心筛选逻辑实现:先提取AD禁用用户列表,再逐个校验O365许可证状态,将符合"AD禁用+E3许可证"条件的用户统一收集后导出到结果CSV。
  • 鲁棒性提升:
    • 自动检查并创建输出目录,避免路径不存在导致的失败。
    • 跳过空用户主体名称(UPN),防止无效查询。
    • 区分不同异常类型,输出更精准的状态提示。
  • 修正原脚本错误:
    • 修复导入CSV时的文件名缺失.csv后缀问题。
    • 修正Select-Object中的属性名拼写错误(userprincipalnameione改为UserPrincipalName)。
    • 导出CSV时添加-NoTypeInformation参数,移除多余的类型信息行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:11:54