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
关键部分解释
正确的AD Filter构造:
把Office值用单引号包裹在Filter字符串中,确保带空格的Office值能被AD正确解析,避免语法错误。排除指定OU:
使用Where-Object过滤掉DistinguishedName包含目标排除OU的用户,-notlike "*$excludeOU*"确保只要DN里包含该OU路径的用户都会被排除。自定义输出列:
通过Select-Object的计算属性,将AD用户的Name(你可以根据需要换成SamAccountName或DisplayName)、Office和DistinguishedName映射为你需要的User、Office、DN列。导出结果:
最后用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
相关产品推荐
相关产品推荐

