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

如何通过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

关键改进说明

  1. 修正变量引用错误,确保输出正确的成员账号。
  2. 用[PSCustomObject]构造带属性的对象,让Export-CSV能生成包含列名的标准CSV文件。
  3. 添加Where-Object筛选用户成员,避免导出组、计算机等非用户对象(按需移除)。
  4. 指定-Encoding UTF8解决中文环境下的CSV乱码问题。
  5. 使用-NoTypeInformation移除CSV开头的冗余类型注释行,让文件更通用。

内容的提问来源于stack exchange,提问作者Seth M.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 04:05:24