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

PowerShell自定义对象输出出现System.Object[]异常值问题排查

问题原因解析

出现System.Object[]的核心原因是:

  • 你引用的属性不是单值属性,或者在获取AD用户时未明确指定要加载的目标属性,导致PowerShell返回了对象数组而非具体的字符串值。比如误将多值属性EmailAddresses(注意末尾复数)当成单值的EmailAddress引用,就会返回数组。
  • 另外,外层用Name作为筛选条件不合理,AD中可能存在重名用户,容易导致遍历重复或错误对象。
修正方案
  1. 明确指定AD用户属性:使用Get-ADUser时,必须通过-Properties参数手动指定EmailAddress(该属性不在默认返回集合中),同时确保加载MemberOf用于获取所属组。
  2. 引用正确的单值属性:赋值给UserName的必须是$user.SamAccountName(单值唯一标识),Email对应$user.EmailAddress(单值邮箱),避免使用多值属性。
  3. 优化遍历逻辑:直接获取所有AD用户,而非按Name筛选,避免重名问题。
修正后的脚本示例
# 导入AD模块(部分环境需手动加载)
Import-Module ActiveDirectory

# 直接通过管道输出提升性能,避免数组拼接的开销
Get-ADUser -Filter * -Properties EmailAddress, MemberOf | ForEach-Object {
    $currentUser = $_
    # 遍历用户的直接所属组
    foreach ($groupDistinguishedName in $currentUser.MemberOf) {
        $currentGroup = Get-ADGroup -Identity $groupDistinguishedName
        # 构造输出对象
        [PSCustomObject]@{
            UserName  = $currentUser.SamAccountName
            Email     = $currentUser.EmailAddress
            GroupName = $currentGroup.Name
        }
    }
} | Export-Csv -Path "ADUserGroups.csv" -NoTypeInformation -Encoding UTF8
额外优化
  • 如果需要递归获取所有嵌套组(包括用户间接所属的组),可以替换组遍历逻辑为Get-ADPrincipalGroupMembership:
Get-ADUser -Filter * -Properties EmailAddress | ForEach-Object {
    $currentUser = $_
    Get-ADPrincipalGroupMembership -Identity $currentUser | ForEach-Object {
        [PSCustomObject]@{
            UserName  = $currentUser.SamAccountName
            Email     = $currentUser.EmailAddress
            GroupName = $_.Name
        }
    }
} | Export-Csv -Path "ADUserNestedGroups.csv" -NoTypeInformation -Encoding UTF8

内容的提问来源于stack exchange,提问作者Sandeep Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 19:30:03