如何通过PowerShell从多台工作站导入导出AD组并处理CSV文件?
批量导入工作站列表并导出其AD组成员身份到CSV
操作步骤与脚本实现
1. 准备导入的CSV文件
确保你的导入CSV包含ComputerName列,每一行对应一台工作站的名称,示例格式如下:
ComputerName w61707285 w61708901 wkstn-003
2. 完整PowerShell脚本
以下脚本会读取导入CSV,遍历每台工作站,获取其所属的所有AD组,最终导出包含ComputerName和ADGroupName两列的结果CSV:
# 导入工作站列表CSV $computers = Import-Csv -Path "C:\path\to\your\input_computers.csv" # 初始化结果数组 $results = @() foreach ($computer in $computers) { $computerName = $computer.ComputerName try { # 获取工作站的AD组关联信息,仅加载MemberOf属性提升效率(替代-Properties *) $adGroups = Get-ADComputer -Identity $computerName -Properties MemberOf | Select-Object -ExpandProperty MemberOf # 将每个组与工作站名称关联,添加到结果数组 foreach ($group in $adGroups) { # 将组的DN转换为可读的组名 $groupName = (Get-ADGroup -Identity $group).Name $results += [PSCustomObject]@{ ComputerName = $computerName ADGroupName = $groupName } } } catch { # 捕获并记录找不到工作站的错误 $results += [PSCustomObject]@{ ComputerName = $computerName ADGroupName = "ERROR: 工作站未找到或无权限访问" } Write-Warning "处理工作站 $computerName 时出错: $_" } } # 导出结果到CSV文件 $results | Export-Csv -Path "C:\path\to\your\output_ad_groups.csv" -NoTypeInformation -Encoding UTF8
关键说明
- 避免使用
-Properties *:仅指定MemberOf属性可以大幅提升脚本执行效率,减少不必要的数据加载。 - 组名转换:脚本将AD组的Distinguished Name(DN)转换为可读的组名,方便后续查看。
- 错误处理:添加了异常捕获,记录无法访问的工作站,避免脚本中断。
运行要求
- 已安装Active Directory模块(需在域控制器或安装RSAT工具的机器上运行)。
- 运行脚本的账号需具备读取AD计算机和组信息的权限。
内容的提问来源于stack exchange,提问作者On3N3xus
相关产品推荐
相关产品推荐

