hainsane
Goto Top

Powershell CSV Werte verarbeiten bzw verändern

Hallo zusammen,

ich habe eine CSV Datei mit folgendem Inhalt:
"Folder";"Account";"Rights";"AccessControlType";"InheritanceFlags"  
"D:\Ordner1\Ordner2\Ordner3";"BUILTIN\Administrators";"FullControl";"Allow";"ContainerInherit, ObjectInherit"  
"D:\Ordner 1\Ordner2\Ordner3";"Domain\Access FuH";"Modify, Synchronize";"Allow";"ContainerInherit, ObjectInherit"  
"D:\Ordner1\Ordmer2\Ordner3\Order4";"Domain\Access Produktion";"Modify, Synchronize";"Allow";"ContainerInherit, ObjectInherit"  
"D:\Ordner1\Ordner4\Ordner5";"Domain\Buha";"Modify, Synchronize";"Allow";"ContainerInherit, ObjectInherit"  
Dort sind also verschiedene Pfade aufgelistet und wer alles darauf welche Rechte hat.
$CSV = Import-csv -Path .\Rechte.csv -Delimiter ;
Jetzt möchte ich gerne, dass mir Powershell durchgeht und im im 2. Array die Gruppe nimmt und mit Get-AdGroupmember $_.CSV[$Account] prüfen, ob es sich um eine Gruppe handelt und falls ja, soll er die Mitglieder an diese Stelle setzen.

Und das halt für die komplette CSV durchlaufen mit einer Schleife.
$length = ($CSV.Folder).Count - 1

while ( $i<$length; $i++)

Im Ergebnis sollen dann in der CSV die Enduser samt Berechtigungen stehen.

Soviel zur Theorie und wie funktioniert jetzt die Praxis? :D face-smile

Hoffe ihr könnt mir ein paar Tipps dazu geben.

Vielen Dank

Content-ID: 619769

Url: https://administrator.de/contentid/619769

Ausgedruckt am: 22.11.2024 um 11:11 Uhr

146189
Lösung 146189 06.11.2020 aktualisiert um 15:35:32 Uhr
Goto Top
Moin.
$csv = Import-CSV .\rechte.csv -Delimiter ";"  
$csv | %{
    $grp = $null
    try{
        $grp = Get-ADObject -LdapFilter "(&(objectSID=$(([System.Security.Principal.NTAccount]$_.Account).Translate([System.Security.Principal.SecurityIdentifier]).Value))(objectClass=Group))"  
    }catch{}
    if ($grp){
        $_.Account =( Get-ADGroupMember $grp.DistinguishedName -Recursive | select -Expand Name) -join ','  
    }
}
$csv | export-csv .\rechte.csv -delimiter ";" -Notype -Encoding UTF8   
Gruß w.

Schönen 🐟 Tag
HAinsane
HAinsane 06.11.2020 um 15:46:05 Uhr
Goto Top
Hallo Window,

danke für deine Hilfe, ich hab es mal Blind umgesetzt, weil ich noch nicht ganz verstehe, was dein Script genau macht. Allerdings bringt er mir:


Get-ADObject : The search filter cannot be recognized
At line:3 char:12

back-to-top$grp = Get-ADObject -LdapFilter "(&(objectSID=$(([System.Security ...

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : NotSpecified: (face-smile [Get-ADObject], ADException
+ FullyQualifiedErrorId : ActiveDirectoryServer:8254,Microsoft.ActiveDirectory.Management.Commands.GetADObject

Exception calling "Translate" with "1" argument(s): "Some or all identity references could not be translated."
At line:3 char:53

back-to-top... objectSID=$(([System.Security.Principal.NTAccount]$_.Account).Transla ...

back-to-top~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

+ CategoryInfo : NotSpecified: (face-smile , MethodInvocationException
+ FullyQualifiedErrorId : IdentityNotMappedException


Allerdings verstehe ich wie gesagt, noch nicht, wie dein Abruf funktioniert, drum kann ich es gerade nicht selbst lösen.
146189
146189 06.11.2020 aktualisiert um 15:51:38 Uhr
Goto Top
War noch ein kleiner Fehler drin... ist oben behoben. Funktioniert hier, getestet.
HAinsane
HAinsane 09.11.2020 aktualisiert um 09:32:58 Uhr
Goto Top
Funktioniert tatsächlich. Kannst du vielleicht ein zwei Worte dazu sagen, wie es funktioniert, vielleicht macht es dann bei mir klick!

Aber schon tausend Dank für die Lösung!

Ich habe festgestellt, dass zwischendrin noch Einzeluser Berechtigungen haben. Kann ich in dem Catchteil dann einfach eine Abfrage nach AD-Usern machen? Um die Namen dort auch vollständig aufzulösen?
146189
146189 09.11.2020 um 09:40:54 Uhr
Goto Top
Zitat von @HAinsane:

Funktioniert tatsächlich. Kannst du vielleicht ein zwei Worte dazu sagen, wie es funktioniert, vielleicht macht es dann bei mir klick!
Ganz einfach, es wird mit Get-ADObject eine LDAP-Abfrage gemacht mit der SID und dem Attribut objectClass was dem Wert "Gruppe" entsprechen muss, liefert diese Abfrage ein Ergebnis wurde eine Gruppe mit dieser SID gefunden und damit dann per Get-ADGroupMember deren Mitglieder abgefragt und diese per join mit einem Komma in die Spalte Account eingefügt. Hth.

Ich habe festgestellt, dass zwischendrin noch Einzeluser Berechtigungen haben.
Das macht dem Code nichts aus, diese werden ignoriert weil sie ja keine Gruppe sind face-wink
Kann ich in dem Catchteil dann einfach eine Abfrage nach AD-Usern machen? Um die Namen dort auch vollständig aufzulösen?
Nicht nötig. Ist ja keine Gruppe