通过 Powershell 对 AD 对象的属性进行排序
Posted
技术标签:
【中文标题】通过 Powershell 对 AD 对象的属性进行排序【英文标题】:Sorting properties of an AD-object via Powershell 【发布时间】:2022-01-24 01:19:32 【问题描述】:我正在尝试对 ActiveDirectory 计算机对象所属的组进行排序。要获取组列表,我使用以下代码(在本例中为 PC123
):
Get-adcomputer 'PC123' -properties Memberof | Select-Object -ExpandProperty MemberOf
我得到以下输出,并且正如预期的那样,这些组没有排序:
CN=(A) Group3,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
CN=(A) Group1,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
CN=(A) Group4,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
CN=(A) Group2,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
我尝试使用Sort-Object进行排序:
Get-adcomputer 'PC215' -properties Memberof | Select-Object -ExpandProperty MemberOf | Sort-Object -Property Memberof
不幸的是,输出保持不变。我尝试通过更改Sort-Object -Property Memberof
的位置来愚弄一下,但这似乎不是问题。任何提示将不胜感激。
【问题讨论】:
试试Select-Object -ExpandProperty MemberOf
@Olaf 这摆脱了外壳(谢谢),但列表仍未排序
但是去掉Sort-Object
的-Property Memberof
参数,成功了,这是为什么呢?
我明白了...我误解了管道。它从管道左侧获取“输出”并在右侧应用命令。 @Olaf 如果您愿意,请随时发布答案。
【参考方案1】:
您正在尝试根据不再存在的属性 (MemberOf
) 对 array
进行排序,在这种情况下,您应该不使用 -Property
。
以这个对象为例:
$computer = [pscustomobject]@
Name = 'PC215'
MemberOf = @(
'CN=(A) Group3,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local'
'CN=(A) Group1,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local'
'CN=(A) Group4,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local'
'CN=(A) Group2,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local'
)
PS /> $computer | Select-Object -Expand MemberOf | Sort-Object -Property MemberOf
CN=(A) Group3,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
CN=(A) Group1,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
CN=(A) Group4,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
CN=(A) Group2,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
PS /> $computer | Select-Object -Expand MemberOf | Sort-Object
CN=(A) Group1,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
CN=(A) Group2,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
CN=(A) Group3,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
CN=(A) Group4,OU=OU-Path1,OU=OU-Path2,DC=domain,DC=local
值得添加来自official documentation 的这句话,因为它与问题有关:
如果命令中不包含排序属性,PowerShell 将使用第一个输入对象的默认排序属性。如果输入对象的类型没有默认排序属性,PowerShell 会尝试比较对象本身。
【讨论】:
是的,谢谢,只是我自己发现我误解了管道符号。非常感谢您的解释!我会给 olaf 一个机会写一个,因为他是第一个回答的。否则我接受你的。 换个说法,你为什么使用samAccountName
不只是为了本地帐户(据我记得)?
@Albin 我在发布答案后看到了他的评论呵呵,据我所知,所有的 AD 对象都有一个 samAccountName
或者至少计算机有
有趣,根据here 的说法,DC 应该将其存储在 AD 数据库而不是 SAM 中,但无论如何这都是假设的......所以没关系。
@Albin 参考example 1,搜索属性。无论如何,我会在我的问题上更新它以避免混淆,呵呵以上是关于通过 Powershell 对 AD 对象的属性进行排序的主要内容,如果未能解决你的问题,请参考以下文章
AD属性修改 office 365 delivery management 设定