none
Powershell, NTFS Berechtigungen, Pfadund Vererbung auslesen RRS feed

  • Frage

  • Hallo zusammen,

    ich versuche per Powershell den Pfad eines Ordners, die darauf berechtigten NTFS Gruppen, und die vererbung anzuzeigen...aber eines davon fehlt immer..

    Versuch 1:

    $path = "Z:\HI"
    $list = get-childitem $path |get-childitem |where {$_.Psiscontainer}|foreach-object {$_.fullname

    #$list
    $ntfs = $list |foreach{(get-acl $_).access|format-list IdentityReference,IsInherited }
    $ntfs

    Im Prinzip ganz schön aber:

    in $list habe ich das stehen:

    Z:\HI\Gruppen\Interne Revision
    Z:\HI\Gruppen\Betriebsrat
    Z:\HI\Gruppen\Diamos F
    Z:\HI\Gruppen\Fondskontrolle
    Z:\HI\Gruppen\Abteilungsleiter
    Z:\HI\Gruppen\Depotverwaltung
    Z:\HI\Gruppen\Fondsbuchhaltung
    Z:\HI\Gruppen\Recht und Steuern
    Z:\HI\Gruppen\Geschäftsführung
    Z:\HI\Gruppen\Innenbetrieb
    Z:\HI\Gruppen\Wirtschaftsausschuss

    etc....

    soweit so gut das sind die Ordner die ich auch haben möchte

    in $ntfs steht folgendes:

    ----------------------

    IdentityReference : SYSTEM\HI-LS-ORG-ADMIN
    IsInherited       : False

    IdentityReference : SYSTEM\HI-LS-ORG-GF_R
    IsInherited       : False

    IdentityReference : SYSTEM\HI-LS-ORG-REVISION
    IsInherited       : False

    IdentityReference : SYSTEM\HI-LS-ADM-FILE-HI
    IsInherited       : True

    IdentityReference : SYSTEM\HI-LS-ADM-FILE-HI
    IsInherited       : True

    IdentityReference : VORDEFINIERT\Administratoren
    IsInherited       : True

    IdentityReference : NT-AUTORITÄT\SYSTEM
    IsInherited       : True

     

     

    IdentityReference : SYSTEM\U013823
    IsInherited       : False

    IdentityReference : SYSTEM\U068359
    IsInherited       : False

    IdentityReference : SYSTEM\HI-LS-ORG-ADMIN
    IsInherited       : False

    IdentityReference : SYSTEM\HI-LS-ORG-BETRIEBSRAT
    IsInherited       : False

    IdentityReference : SYSTEM\HI-LS-ADM-FILE-HI
    IsInherited       : True
    ----------------------------------------------------

    Im Prinzip ist also alles da, wie ich das in eine Datei geschrieben kriege auch kein Problem , ABER:

    Ich will den Pfad mit dabei haben sprich oben den Pfad woher er die Rechte hat, darunter dann die Rechte mit vererbung ja / nein quasi so: für jeden gefundenen Ordner.

    Pfad - Z:\HI\Gruppen\Interne Revision

    IdentityReference : SYSTEM\U013823
    IsInherited       : False

    IdentityReference : SYSTEM\U068359
    IsInherited       : False

    IdentityReference : SYSTEM\HI-LS-ORG-ADMIN
    IsInherited       : False

    IdentityReference : SYSTEM\HI-LS-ORG-BETRIEBSRAT
    IsInherited       : False

    IdentityReference : SYSTEM\HI-LS-ADM-FILE-HI
    IsInherited       : True

    Ich habe es auch schon mit accestostring versucht, da habe ich dann zwar den Pfad aber die vererbung nicht....

    Hat jemand eine Idee?

    Danke & Grüße

    Thomas

    Montag, 13. Februar 2012 14:28

Antworten

  • Moin,

    ahoi,

    stimmt es fehlt ein }

    ok.

    ich habe deine Zeile ausprobiert..
    selber Output wie bei meiner Zeile

    kann auch nicht gehen, war die "falsche" Pipe.

    Da sind wir ein wenig kreativ - nicht schön, aber funktioniert:

    $ntfs = $list | foreach{$a = $_; (get-acl $_).access|format-list IdentityReference,IsInherited,@{label="Name"; expression={$a}  } }


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Montag, 13. Februar 2012 15:18

Alle Antworten

  • Moin,

    da in Deinen Ausschnitt ein wenig fehlt, kann ich das nicht testen, aber geht das hier:

    $ntfs = $list |foreach{(get-acl $_).access|format-list IdentityReference,IsInherited,@{label="Name"; expression={( $_.fullname)}} }


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Montag, 13. Februar 2012 14:48
  • ahoi,

    stimmt es fehlt ein }

    so ists komplett

    $path = "Z:\HI"
    $list = get-childitem $path |get-childitem |where {$_.Psiscontainer}|foreach-object {$_.fullname}

    #$list
    $ntfs = $list |foreach{(get-acl $_).access|format-list IdentityReference,IsInherited }
    $ntfs

    ich habe deine Zeile ausprobiert..

    selber Output wie bei meiner Zeile

    Montag, 13. Februar 2012 15:01
  • Moin,

    ahoi,

    stimmt es fehlt ein }

    ok.

    ich habe deine Zeile ausprobiert..
    selber Output wie bei meiner Zeile

    kann auch nicht gehen, war die "falsche" Pipe.

    Da sind wir ein wenig kreativ - nicht schön, aber funktioniert:

    $ntfs = $list | foreach{$a = $_; (get-acl $_).access|format-list IdentityReference,IsInherited,@{label="Name"; expression={$a}  } }


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Montag, 13. Februar 2012 15:18
  • naja schön muss es auch nicht sein, und als table formatiert siehts auch gar nicht so schlecht aus ;-)

    Bin ja auch noch absoluter powershell n00b aber wer nicht probiert der wird auch nicht besser;-)

    Dann versuch ich im Nachgang mal herauszufinden worin das Geheimnis lag ({$a = $_; xxx  expression={$a}  } }) und warum das da steht wo es steht.

    Dankeschön


    Montag, 13. Februar 2012 15:35
  • >Dann versuch ich im Nachgang mal herauszufinden worin das Geheimnis lag ({$a = $_; xxx  expression={$a}  } }) und warum das da steht wo es steht.

    Der Code ist ja der hier:
    $list | foreach{$a = $_; (get-acl $_).access|format-list IdentityReference,IsInherited,@{label="Name"; expression={$a}  } }

    Im Prinzip hast Du hier zwei Pipelines: Eine, die foreach fütttert (das sind die Dateinamen) und eine, die format-list füttert (das sind die Berechtigungen). Du kommst in der zweiten Pipeline aber nicht mehr an die Info der ersten Pipline. Der "Trick" besteht daher darin, bevor die zweite Pipeline gestartet wird, den Inhalt der ersten in einer anderen Variablen abzuspeichener -> $a.

    Das hier sind einfach nur zwei Befehle:
    $a = $_; (get-acl $_).access

    Man könnte das auch in zwei Zeilen schreiben:
    $a = $_
    (get-acl $_).access

    Das wäre das gleiche. Ein Befehl wird in der PowerShell mit ENTER oder mit SEMIKOLON von einem anderen getrennt.

    Innerhalb einer Pipline-Zeile machen Zeilenumbrüche aber Probleme, daher mit Semikolon in einer Zeile.


    Grüße aus Berlin schickt Robert
    MVP Exchange Server
    Montag, 13. Februar 2012 15:41