如何通过PowerShell导出AD用户及其所属组?脚本管道问题求助
修复PowerShell导出AD用户组脚本的问题
原脚本的核心错误
- 变量拼写错误:定义了
$memnaam却引用不存在的$naammem,导致输出为空。 - Write-Host无法参与管道:Write-Host仅输出到控制台,不会将内容传入管道,所以第二个脚本里的
| Export-CSV完全无效。 - 未构造结构化对象:Export-CSV需要接收带属性的PowerShell对象,而非单纯字符串,原脚本直接输出文本无法生成正确的CSV列。
正确的解决方案脚本
方案1:使用数组收集结果(直观易读)
# 初始化空数组存储结果 $exportData = @() # 获取所有AD组 $allGroups = Get-ADGroup -Filter * foreach ($group in $allGroups) { # 获取组内成员,仅保留用户(如需包含其他类型可移除Where-Object) $groupMembers = Get-ADGroupMember -Identity $group | Where-Object { $_.objectClass -eq 'user' } foreach ($member in $groupMembers) { # 创建包含组名和成员账号的结构化对象 $row = [PSCustomObject]@{ 组名称 = $group.Name 成员账号 = $member.SamAccountName } $exportData += $row } } # 导出到CSV,指定UTF8编码避免乱码,-NoTypeInformation移除冗余类型行 $exportData | Export-Csv -Path "C:\FileName.csv" -NoTypeInformation -Encoding UTF8
方案2:纯管道链式操作(更符合PowerShell风格)
Get-ADGroup -Filter * | ForEach-Object { $currentGroup = $_.Name # 遍历组内用户成员,直接输出结构化对象 Get-ADGroupMember -Identity $_ | Where-Object { $_.objectClass -eq 'user' } | ForEach-Object { [PSCustomObject]@{ 组名称 = $currentGroup 成员账号 = $_.SamAccountName } } } | Export-Csv -Path "C:\FileName.csv" -NoTypeInformation -Encoding UTF8
关键改进说明
- 修正变量引用错误,确保输出正确的成员账号。
- 用
[PSCustomObject]构造带属性的对象,让Export-CSV能生成包含列名的标准CSV文件。 - 添加
Where-Object筛选用户成员,避免导出组、计算机等非用户对象(按需移除)。 - 指定
-Encoding UTF8解决中文环境下的CSV乱码问题。 - 使用
-NoTypeInformation移除CSV开头的冗余类型注释行,让文件更通用。
内容的提问来源于stack exchange,提问作者Seth M.
相关产品推荐
相关产品推荐

