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

为什么Get-Member无法显示ADUser对象的全部可用属性

问题描述

我需要查询ADUser的所有可用属性,运行如下命令:

Get-ADUser -Filter * -Properties * | Get-Member -MemberType properties | Where-Object {$_.name -eq 'ipPhone'}

执行后未返回任何结果,看起来ADUser不存在ipPhone属性,但该属性实际存在,可通过如下命令验证:

Get-ADUser -Filter * -Properties * | select ipPhone 

请问为什么Get-Member无法展示ADUser的全部属性?


问题解答

这是Active Directory PowerShell模块返回的ADUser对象的特殊机制,以及Get-Member的工作逻辑共同导致的,核心原因有两点:

  • ADUser的非核心属性(比如自定义扩展属性、未赋值的AD内置属性)都属于动态扩展属性,不会作为.NET类型的固定属性预先定义。AD模块返回对象时,默认只会给对象实例挂载有赋值的扩展属性,如果某个AD属性在你管道传输的第一个ADUser对象上是空值,这个属性就不会被挂载到该实例的顶层属性列表里。
  • Get-Member枚举属性时,只会参考管道输入的第一个对象的属性结构,不会合并后续所有输入对象的属性。如果第一个对象没有挂载ipPhone属性,后续哪怕其他对象有这个属性,Get-Member也不会识别到。

你用Select-Object ipPhone能正常返回结果,是因为Select-Object会遍历每一个输入对象,直接到每个对象的内置Properties集合里查找对应属性,就算属性没有挂载到实例顶层也能读取到值,空值就返回空结果而已。

正确查询所有ADUser可用属性的方法

方法1:直接读取AD架构(最准确,不会遗漏属性)

读取AD架构中User类的所有强制属性和可选属性,不管现有用户有没有赋值都能查到:

Get-ADObject -SearchBase (Get-ADRootDSE).SchemaNamingContext -Filter {name -eq "user"} -Properties mayContain,mustContain | Select-Object @{Name="AllUserProperties";Expression={$_.mayContain + $_.mustContain}} | Format-List

方法2:基于现有用户对象枚举所有出现过的属性

先把所有用户对象存到变量里,合并所有对象的属性后再筛选:

# 拉取所有用户的所有属性
$allUsers = Get-ADUser -Filter * -Properties *
# 合并所有用户的属性名去重
$allPropNames = $allUsers | ForEach-Object {$_.PSObject.Properties.Name} | Select-Object -Unique
# 筛选你要查的属性
$allPropNames | Where-Object {$_ -eq "ipPhone"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:18:04