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

需求:编写PowerShell脚本检查Duo导出用户是否在Active Directory中

解决Duo非活跃用户AD查询PowerShell脚本问题

原脚本核心问题梳理

  1. 语法错误:变量路径未加引号、GetADUser拼写错误(应为Get-ADUser)、过滤器格式错误、if/else逻辑结构混乱
  2. 用户名匹配不全:仅按samAccountName查询,未兼容UPN(登录名)格式
  3. 错误未捕获:未找到用户时抛出异常,导致else分支无法执行,在无权限使用外部模块的情况下,需用原生PowerShell错误处理方式

修正后的PowerShell脚本

# 定义输入输出路径
$InputFile = "C:\Users\name\desktop\TestingSample1.csv"
$OutputFile = "C:\Users\name\desktop\DuoInactiveUser.csv"

# 导入CSV并逐个处理用户
Import-Csv $InputFile | ForEach-Object {
    $username = $_.Username  # 假设CSV中用户名列名为Username,根据实际情况修改
    $adUser = $null

    # 先尝试按samAccountName查询
    $adUser = Get-ADUser -Filter "samAccountName -eq '$username'" -Properties mail, enabled -ErrorAction SilentlyContinue

    # 如果没找到,尝试按UPN(登录名)查询
    if (-not $adUser) {
        $adUser = Get-ADUser -Filter "UserPrincipalName -eq '$username'" -Properties mail, enabled -ErrorAction SilentlyContinue
    }

    # 构建输出对象
    if ($adUser) {
        [PSCustomObject]@{
            '用户名' = $adUser.samAccountName
            '邮箱'   = $adUser.mail
            '启用状态' = $adUser.enabled
        }
    } else {
        [PSCustomObject]@{
            '用户名' = $username
            '邮箱'   = $null
            '启用状态' = "$username not found."
        }
    }
} | Export-Csv -Path $OutputFile -NoTypeInformation -Encoding UTF8

关键处理说明

  • 双格式用户名兼容:先通过samAccountName查找,失败后自动尝试UserPrincipalName,覆盖两种用户名格式
  • 错误抑制:使用-ErrorAction SilentlyContinue阻止未找到用户时的异常抛出,确保脚本能继续执行后续逻辑
  • 统一输出结构:无论是否找到用户,都输出结构一致的自定义对象,保证Export-Csv能正确生成规范的CSV文件
  • 路径与列名:请根据实际情况修改$InputFile、$OutputFile路径,以及CSV中的用户名列名(示例中为Username)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:45:23