2015-09-19 1 views
1

Dans le script suivant, tous les utilisateurs des groupes seront imprimés. Cependant, le nom de domaine est manquant (Certains utilisateurs sont dans un domaine Windows différent)?Obtenez le nom de domaine de l'utilisateur de l'objet ADSI?

$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) 
    } 
} 
+0

S'il vous plaît ne pas déplacer le targe t. Si vous avez une nouvelle question: posez une nouvelle question. –

Répondre

4

Essayez aller chercher le SID au lieu du nom et traduisez que revenir à un nom d'utilisateur:

$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]) 
    } 
}

Le résultat doit inclure l'ordinateur ou le nom de domaine.

0

Nous avons un problème similaire lorsqu'il existe des comptes de différents domaines sur les ordinateurs et que nous avons besoin du domaine. Malheureusement, la récupération SID ne fonctionne pas, je pense que pour les comptes locaux et les domaines auxquels l'ordinateur était associé dans certains cas, il n'a donc pas renvoyé tous les résultats.

Ce fut la meilleure solution que je trouve pour nous:

Admin = $_.GetType().InvokeMember("AdsPath", 'GetProperty', $null, $_, $null) 

obtenir des résultats comme

WinNT://#domain#/#account# 

ou WinNT://#domain of computer#/#computer-name#/#account#

pour les comptes locaux

$servers= get-content 'C:\temp\work\localadmins\serverlist_in.txt' 
$output = 'C:\temp\work\localadmins\serverlist_out.csv' 
$results = @() 

foreach($server in $servers) 
{ 
    $admins = @() 
    $group =[ADSI]"WinNT://$server/Administrators" 
    $members = @($group.psbase.Invoke("Members")) 
    $members | foreach { 
     $obj = new-object psobject -Property @{ 
      Server = $Server 
      Admin = $_.GetType().InvokeMember("AdsPath", 'GetProperty', $null, $_, $null) 
     } 
     $admins += $obj 
    } 
    $results += $admins 
} 
$results | Export-csv $Output -NoTypeInformation