Auswahlobjekt nur für AD-Gruppen

1059
The Woo

Ich versuche, ein Skript einzurichten, um alle Berechtigungsinformationen von Dateifreigaben in unserem Netzwerk zu finden.

Im Moment habe ich ein Powershell-Skript, das dies ausführt, aber es enthält Gruppen, Benutzer, SID-Konto und alles.

Ich habe manuell nach SID-Konten gefiltert, aber ich habe mich gefragt, ob es ein Auswahlobjekt gibt, mit dem nur Active Directory-Gruppeninformationen angezeigt werden können. Hier ist ein Ausschnitt des Codes, den ich im Moment habe:

$ACLs = get-acl $Folder.FullName | ForEach-Object {$_.Access} | Where {$_.IdentityReference -notlike "*S-1-5*"} 

Vielleicht etwas in der Richtung von objectClass-like " group " ?

1

2 Antworten auf die Frage

0
Windos

Sie können die gesuchten Informationen nicht direkt aus der IdentityReference abrufen. Wenn Sie jedoch etwas Logik darauf werfen (nicht anders als die Richtung, in die Sie die SID-Konten bereits gefiltert haben), können Sie sie auf AD-Objekte beschränken.

(Get-Acl -Path $Folder.FullName | ForEach-Object { [string]$Identity = $_.IdentityReference if ($Identity -like '*\*' -and $Identity -notlike 'BUILTIN*' -and $Identity -notlike 'NT AUTHORITY*') { $SamAccountName = $Indentity.Split('\')[1] $ADObject = Get-ADObject -Filter ('SamAccountName -eq ""' -f $SamAccountName) if ($ADObject.ObjectClass -eq 'group') { $Identity } } } 

Der Hauptteil der Arbeit wird von dieser "if" -Anweisung erledigt. Durch das Testen auf einen umgekehrten Schrägstrich wird sichergestellt, dass das Objekt Teil einer Domäne ist (lokal oder AD oder anderweitig). Dann werden die lokalen Domänen, die ich bei meinen Tests gesehen habe, verworfen.

In meinem Fall war dies ausreichend, um sicherzustellen, dass ich immer AD-Objekte erhielt, egal ob es sich um Benutzer oder Gruppen handelte, und danach ist es ziemlich einfach, das ADObject abzurufen und die Objektklasse zu testen.

Wenn Sie dies in einer Umgebung mit nur einer Domäne durchführen, können Sie die if -Anweisung so ändern, dass sie nur nach dieser sucht, wodurch die Anzahl der Testfälle reduziert wird, z.

if ($Identity -like 'test.domain.com\*)

Sie können dies auch weiter ausführen und das eigentliche ADGroup-Objekt usw. abrufen.

0
The Woo

Ich habe diese Frage auch auf TechNet gestellt, also für alle, die an meiner Lösung interessiert sind - hier ist es:

$ACLs = get-acl $Folder.FullName | ForEach-Object {$_.Access} | Where {$_.IdentityReference -notlike "*S-1-5*" -and (dsquery group -samid $_.IdentityReference.Value.Split("\")[1])} 

Das funktionierte, um nur die AD-Elemente der Gruppe zurückzugeben.