如何用PowerShell导出指定OU启用用户并判断是否属于A_ACC前缀用户组
调整后的完整脚本
# 提前查询所有名称以A_ACC开头的AD组,仅查询1次AD,大幅提升执行效率 $targetGroups = Get-ADGroup -Filter "Name -like 'A_ACC*'" | Select-Object Name, DistinguishedName # 自行替换为实际要查询的OU路径和Company属性目标值 $searchBaseOU = "OU=你的目标OU,DC=域名,DC=后缀" $targetCompanyValue = "你的指定Company属性值" # 查询符合条件的已启用AD用户,遍历生成导出对象 Get-ADUser -Filter "Company -eq '$targetCompanyValue'" -SearchBase $searchBaseOU -Properties GivenName, Surname, DisplayName, Company, Department, memberof, PhysicalDeliveryOfficeName | Where-Object { $_.Enabled -eq $true } | ForEach-Object { # 先构建用户基础属性对象 $exportObj = [PSCustomObject]@{ GivenName = $_.GivenName Surname = $_.Surname DisplayName = $_.DisplayName Company = $_.Company Department = $_.Department Location = $_.PhysicalDeliveryOfficeName 账号名 = $_.SamAccountName } # 遍历所有目标组,逐个追加成员状态列 foreach ($group in $targetGroups) { $isMember = $_.memberof -contains $group.DistinguishedName # 组名直接作为列名,值可自定义为是/否或Y/N $exportObj | Add-Member -MemberType NoteProperty -Name $group.Name -Value ($isMember ? "是" : "否") } $exportObj } | Export-Csv -Path 'H:\My Documents\PowerShell_exports\Users_export.csv' -NoTypeInformation -Encoding UTF8
注意事项
- 运行脚本前需确保设备已安装ActiveDirectory模块,可直接在域控制器、安装了RSAT AD管理工具的Windows设备上运行
- 若导出的CSV打开后出现中文乱码,可将
-Encoding UTF8替换为-Encoding UTF8BOM(PowerShell 7及以上版本支持)或者-Encoding Default - 脚本会自动匹配所有A_ACC前缀的组生成对应列,新增/删除对应前缀的组无需修改代码逻辑,执行时会自动适配
内容的提问来源于stack exchange,提问作者BuHy
相关产品推荐
相关产品推荐

