通过 Powershell 对 AD 对象的属性进行排序

Sorting properties of an AD-object via Powershell

我正在尝试对 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 的位置来玩弄一下,但这似乎不是问题所在。任何提示将不胜感激。

您正在尝试根据不再存在的 属性 (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 中的这句话,因为它与问题相关:

If sort properties are not included in a command, PowerShell uses default sort properties of the first input object. If the type of the input object has no default sort properties, PowerShell attempts to compare the objects themselves.