2016-04-04 13 views
0

Kann mir jemand sagen, wie man den Benutzernamen, die Identitätsreferenz und den Zugriffskontrolltyp wie im folgenden Beispiel erhält?

Ich habe das unten stehende PS-Skript erstellt, aber ich kann den Benutzernamen nicht übergeben.

Import-Module ActiveDirectory 
Set-Location AD: 
$Users = Get-ADUser -Filter * | % {$_.SamAccountName} 

foreach ($User in $Users) { 
    (Get-Acl (Get-ADUser -Identity $User).DistinguishedName).Access | 
    Where-Object {$_.IdentityReference -eq "BUILTIN\Account Operators"} return true | 
    select IdentityReference, AccessControlType 
} 
+0

% eine Abkürzung für 'foreach' ist. Verwenden Sie '$ Users = Get-ADUser -Filter * | Wählen Sie DistinguishedName, SamAccountName} 'anstelle von' $ Users = Get-ADUser -Filter * | % {$ _. SamAccountName} ', da Sie später auf den DN verweisen. Sie benötigen ein Referenzobjekt, für das die ACL abgefragt werden soll. Sie können nicht alle Zugriffsrechte auf * (alles) auflisten. Sie brauchen auch nicht 'set-Location AD:' wenn Sie nicht mit get-childitem etc. Cmdlets arbeiten. – Martin

+0

@Martin Er will ACLs von AD-Objekten überprüfen, also muss er definitiv den Speicherort auf das 'AD:' Laufwerk ändern. –

+0

Es funktioniert auch ohne es, wenn Sie angeben "-Pfad" mit Laufwerk: "get-acl -path" AD: \ $ ($ user.DifferencedName) " Wählen Sie -ExpandProperty Zugriff | ft' – Martin

Antwort

1

Keine Notwendigkeit, Schleife zweimal oder rufen Get-ADUser. Führen Sie einfach Get-Acl auf die Objekte, die von der ersten Get-ADUser und fügen Sie den Benutzernamen mit einem calculated property zurückgegeben:

Get-ADUser -Filter * | ForEach-Object { 
    $username = $_.SamAccountName 
    (Get-Acl $_.DistinguishedName).Access | 
    Where-Object {$_.IdentityReference -eq "BUILTIN\Account Operators"} | 
    Select-Object @{n='Username';e={$username}}, IdentityReference, 
        AccessControlType 
} 
+0

Dank Ansgar es funktioniert ein Leckerbissen ist da weg von der Rückkehr wahr, wenn es ein Spiel gleicht.? – delboy82

+0

@ delboy82 Das hängt davon ab. Was ist der Zweck, "wahr" zurückzugeben? Zurück wo? Für jedes Spiel oder einmal, wenn Sie eine Übereinstimmung erhalten? –

0

Also, das ist ein bisschen schwierig auf den ersten Blick. Aber die Antwort ist eigentlich ziemlich einfach!

Sie möchten die Eigenschaft von SamAccountName, von der wir bereits den Befehl Get-ADUser ausführen. Da wir jedes dieser Ergebnisse unter Verwendung von ForEach($user in $users) durchgehen, können Sie diese Eigenschaft jederzeit mithilfe von $user.SamAccountName referenzieren.

Ich denke, das erfasst, was Sie versuchen zu tun: mehrfach

foreach ($User in $Users) { 
    (Get-ACL (Get-ADUser -Identity $User).distinguishedname).access | 
    where-Object {$_.IdentityReference -eq "BUILTIN\Account Operators"} return true | 
    select $user.SamAccountName, identityreference, accesscontroltype 
} 
Verwandte Themen