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

PowerShell通过Select语句访问哈希表属性值报错求助

问题解决:从Azure AD用户对象提取子属性并导出CSV

错误原因

你遇到的Cannot index into a null array报错,核心问题有两个:

  1. 计算属性语法错误:Select-Object的自定义属性中,e(Expression)参数需要传入{}包裹的脚本块,而不是直接写$_.ExtensionProperty[...]——后者会在定义属性时就执行,而非遍历每个用户对象时动态计算。
  2. 未处理空值场景:部分用户对象的ExtensionProperty可能为$null,直接索引会触发空引用错误。

修正后的完整代码

$azusers = Get-AzureADUser -All $true

$azusers | Select-Object 
    @{ n='createdTime'; e={ if ($_.ExtensionProperty) { $_.ExtensionProperty['createdDateTime'] } else { $null } } },
    @{ n='onPremisesDistinguishedName'; e={ if ($_.ExtensionProperty) { $_.ExtensionProperty['onPremisesDistinguishedName'] } else { $null } } },
    "DeletionTimestamp","ObjectId","ObjectType","AccountEnabled","AgeGroup","City","CompanyName",
    "ConsentProvidedForMinor","Country","CreationType","Department","DirSyncEnabled", "DisplayName",
    "FacsimileTelephoneNumber","GivenName","IsCompromised","ImmutableId","JobTitle","LastDirSyncTime",
    "LegalAgeGroupClassification","Mail","MailNickName","Mobile", "OnPremisesSecurityIdentifier",
    "PasswordPolicies","PasswordProfile","PhysicalDeliveryOfficeName","PostalCode","PreferredLanguage",
    @{n='proxyaddress1'; e={ $_.ProxyAddresses[0] ?? $null }},
    @{n='proxyaddress2'; e={ $_.ProxyAddresses[1] ?? $null }},
    @{n='proxyaddress3'; e={ $_.ProxyAddresses[2] ?? $null }},
    "RefreshTokensValidFromDateTime","ShowInAddressList","SipProxyAddress","State", "StreetAddress",
    "Surname","TelephoneNumber","UsageLocation","UserPrincipalName","UserState","UserStateChangedOn","UserType" |
Export-Csv -NoTypeInformation -Path AZUsers.csv

关键修复点说明

  • 脚本块包裹计算逻辑:所有自定义属性的e值都用{}包裹,确保针对每个用户对象动态执行取值逻辑。
  • 空值安全校验:先判断ExtensionProperty是否存在,再索引键值,避免空引用报错。
  • 简化ProxyAddresses提取:用PowerShell 7+的空合并运算符??,直接取数组元素,不存在时返回$null,比重复判断count更简洁。

PowerShell 5.x兼容写法

若你的环境是PowerShell 5.x(不支持??运算符),可将ProxyAddresses的计算属性替换为:

@{n='proxyaddress1'; e={ if ($_.ProxyAddresses -and $_.ProxyAddresses.Count -gt 0) { $_.ProxyAddresses[0] } else { $null } }},
@{n='proxyaddress2'; e={ if ($_.ProxyAddresses -and $_.ProxyAddresses.Count -gt 1) { $_.ProxyAddresses[1] } else { $null } }},
@{n='proxyaddress3'; e={ if ($_.ProxyAddresses -and $_.ProxyAddresses.Count -gt 2) { $_.ProxyAddresses[2] } else { $null } }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 13:22:55