在以下脚本中,它将打印组的所有用户。但是,域名丢失(某些用户位于不同的Windows域中)?

$computer = [ADSI]"WinNT://$server,computer"

$computer.psbase.children | ? {
    $_.psbase.schemaClassName -eq 'group'
} | % {
    $gn = $_.name.ToString()
    write-host $gn

    write-host "------"
    $group =[ADSI]$_.psbase.Path
    $group.psbase.Invoke("Members") | % {
        $_.GetType().InvokeMember("Name", 'GetProperty', $null, $_, $null)
    }
}

最佳答案

尝试获取SID而不是名称,然后将其转换回用户名:

$computer.psbase.children | ? {
    $_.psbase.schemaClassName -eq 'group'
} | % {
    $gn = $_.name.ToString()
    write-host $gn

    write-host "------"
    $group =[ADSI]$_.psbase.Path
    $group.psbase.Invoke("Members") | % {
        $bytes = $_.GetType().InvokeMember('objectSid', 'GetProperty', $null, $_, $null)
        $sid = New-Object Security.Principal.SecurityIdentifier ($bytes, 0)
        $sid.Translate([Security.Principal.NTAccount])
    }
}

结果应包括计算机或域名。

关于windows - 获取ADSI对象的用户的域名?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32665284/

10-15 08:16