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

PowerShell从CSV的Office属性获取OU并排除指定OU问题

解决PowerShell从CSV匹配AD用户并排除指定OU的问题

我来帮你调整脚本,实现从CSV的Office属性匹配AD用户、排除指定OU,并且输出你需要的User,Office,DN格式。

原脚本的问题分析

你的初始脚本存在几个关键问题:

  • AD用户查询的Filter参数中,Office值没有用引号包裹,当值包含空格(比如IT Office 12)时,会导致AD解析错误
  • 缺少排除特定OU的逻辑
  • 没有按照指定的列格式输出结果

修正后的完整脚本

# 定义CSV路径和要排除的OU
$CSV = "你的CSV文件路径.csv"
$excludeOU = "OU=CompanyIT,OU=COMPANY,DC=contoso,DC=com"

# 导入CSV并处理每个条目
$userIDs = Import-CSV $CSV
foreach($userID in $userIDs) {
    # 构造正确的AD查询Filter,用单引号包裹Office值处理空格
    $adFilter = "Office -eq '$($userID.Office)'"
    
    # 查询AD用户,获取所需属性,排除指定OU的用户
    Get-ADUser -Filter $adFilter -Properties DistinguishedName, Office |
        Where-Object { $_.DistinguishedName -notlike "*$excludeOU*" } |
        # 生成指定格式的输出对象
        Select-Object @{Name='User'; Expression={$_.Name}},
                      @{Name='Office'; Expression={$_.Office}},
                      @{Name='DN'; Expression={$_.DistinguishedName}}
} | Export-Csv -Path "输出结果.csv" -NoTypeInformation -Encoding UTF8

关键部分解释

  1. 正确的AD Filter构造:
    把Office值用单引号包裹在Filter字符串中,确保带空格的Office值能被AD正确解析,避免语法错误。

  2. 排除指定OU:
    使用Where-Object过滤掉DistinguishedName包含目标排除OU的用户,-notlike "*$excludeOU*"确保只要DN里包含该OU路径的用户都会被排除。

  3. 自定义输出列:
    通过Select-Object的计算属性,将AD用户的Name(你可以根据需要换成SamAccountName或DisplayName)、Office和DistinguishedName映射为你需要的User、Office、DN列。

  4. 导出结果:
    最后用Export-Csv将结果保存为CSV文件,-NoTypeInformation避免添加多余的类型信息,-Encoding UTF8确保中文或特殊字符显示正常。

示例输出

运行脚本后,输出的CSV内容会类似:

User,Office,DN
John,IT Office 12,OU=IT,OU=COMPANY,DC=contoso,DC=com
Maria,Sales Office,OU=SALES,OU=COMPANY,DC=contoso,DC=com

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 07:53:10