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-Key: 619769

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

Printed on: April 28, 2024 at 12:04 o'clock

Mitglied: 146189
Solution 146189 Nov 06, 2020 updated at 14:35:32 (UTC)
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
Member: HAinsane
HAinsane Nov 06, 2020 at 14:46:05 (UTC)
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.
Mitglied: 146189
146189 Nov 06, 2020 updated at 14:51:38 (UTC)
Goto Top
War noch ein kleiner Fehler drin... ist oben behoben. Funktioniert hier, getestet.
Member: HAinsane
HAinsane Nov 09, 2020 updated at 08:32:58 (UTC)
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?
Mitglied: 146189
146189 Nov 09, 2020 at 08:40:54 (UTC)
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