如何返回按其属性名称过滤的powershell对象属性通配符?

时间:2019-01-11 21:08:47

标签: powershell filter properties

我正在尝试使用Get-ADUser查找我不知道其名称的特定扩展属性。在我的组织中,每个AD用户都应该有一个属性字段,该字段指定他们是否已经接受过某个主题的培训,但是我不知道该字段的确切名称。因此,我希望搜索名称中可能包含特定字符串的属性,例如“ titleIX”。

下面的代码无法正常工作,但我希望它能说明我在寻找什么:  Get-ADUser -filter 'name -like "johndoe"' -properties * | Where-Object {$_.propertyname -like "*titleIX*"}

在此示例中,希望输出看起来像 trngTitleIXDone: Yes 到那时,我会知道该字段称为“ trngTitleIXDone”,并且可以继续使用该字段作为我要生成的实际报告。

我意识到我可能需要更多的管道命令来实现我正在寻找的实际过滤,而不仅仅是与对象相关联的完整属性列表,而该列表具有名称与查询匹配的属性。

谢谢,如果我需要更好地说明自己,请告诉我。 ==马特

P.S。根据要求提供其他上下文:

问:您不能问您的管理员,还是在ADUC中找到它?
答:组织非常庞大,并且有很多未记录的自定义属性(以我可以访问的方式)。获得这些信息,甚至找到合适的人要比自己找到它要花费更长的时间。而且我想知道这种技能,以防万一再次出现,这样我就可以避免下次的延迟。

至于ADUC,我不清楚确切地返回属性时的逻辑,但我的理解是,我要查找的属性具有某种分类,可以防止它们被返回除非您按名称明确定位他们。简单地使用properties *并不会返回我要查找的内容,并且ADUC中列出的属性或多或少是同一数据集。

1 个答案:

答案 0 :(得分:1)

最后,由于自定义AD属性如何工作的神秘细节,我发现我在为自己的问题提出错误的问题,而我对此并不完全了解。感谢@ LotPings,@ Theo和@TheMadTechnician的评论,阐明了各种可能性。

@Lee_Dailey关于PSObjects(.PSObject)的隐藏属性,其子属性(.Properties和 its 子属性.Name)的评论,可能最接近@Lee_Dailey的评论。 ,.Value等)。虽然我目前没有一个有效的答案,但是我敢肯定,有一种编程方式可以使用它们来遍历给定对象的未知属性。

对于我的问题,由于两个主要原因,我无法轻松返回要迭代的属性列表:

1)即使从Get-AD * cmdlet请求所有属性(例如Get-ADUser -filter 'name -like "johndoe"' -properties *),也仅返回具有非空(即未设置)值的属性(即属性)。 AD永远不会为给定对象返回此类属性,因为它们在对象中不存在。若要返回可能属性的列表,这些属性在模式中可用,但在给定对象中未使用,您必须(显然)查询模式本身。

在架构中查询可能的属性:

Select-Object @{n="Attributes";e={$_.maycontain + $_.systemmaycontain}} | 
Select-Object -ExpandProperty Attributes |
Sort-Object

资料来源:
https://social.technet.microsoft.com/Forums/windowsserver/en-US/8da2aa4e-5ae6-47d9-ac1b-159e5e3f2612/pull-all-user-attributes-with-powershell?forum=winserverpowershell(感谢@LotPings)
https://blogs.technet.microsoft.com/poshchap/2017/09/22/one-liner-query-the-ad-schema-for-user-object-attributes/(感谢@Theo)

2)显然,除非为对象设置了属性,但即使是为自定义属性(即不属于默认或扩展属性集的一部分),也绝不会返回该属性。从Get-ADUser的详细帮助文件中:
To specify an individual extended property, use the name of the property. For properties that are not default or extended properties, you must specify the LDAP display name of the attribute.

就我而言,似乎(至少一些)组织定制属性实际上是通过请求-properties *返回的,这使我认为,在我的环境中,它们已经以某种方式专门配置为如果可能的话,扩展集的一部分。如果真是这样,可能有一些未以这种方式配置的自定义属性,这将使得很难知道对象上可能设置了哪些架构可用属性,但是需要按名称请求。为此,我可以遍历所有可能的属性,全部请求它们,然后将结果与扩展集进行比较。