Powershell und Autoit

  • Hallo zusammen,

    ich habe ein Problem mit der Powershell in Kombination mit Autoit. Ich möchte mir über Powershell alle expliziten Rechte eines Benutzers auslesen und diese in einem Textfile speichern.

    Hierzu habe ich folgenden Code im Internet gefunden und angepasst:

    Code
    $path = "\\server\d$\daten"
    $list = get-childitem $path |get-childitem |where {$_.Psiscontainer}|foreach-object {$_.fullname}
    $ntfs = $list | foreach{$a = $_; (get-acl $_).access|format-list IdentityReference,@{label="Name"; expression={$a}  } }
    $ntfs >> C:\Users\testuser\Desktop\temp_user.txt


    Das Problem ist, dass ich hier nur eine Liste erstellt kriege mit ALLEN Berechtigungen des gesamten Fileservers, was ich ja nicht möchte. Naja, Problem erkannt und getestet. Das kam dabei raus:

    Spoiler anzeigen

    Das Ende der Geschichte:
    Er braucht natürlich ewig zum Abgleichen, ob eine explizite Berechtigung des Benutzers auf die Ordner des Fileservers vorhanden ist.

    Kann ich irgendwie in dem Powershell Skript eintragen, dass er ausschließlich die expliziten Berechtigungen des Benutzers "xyz" als Datei speichern soll? Das würde das ganze Thema erheblich verkürzen und wäre eine deutlich "hübschere" Lösung.

    Vielen Dank vorab und LG,
    der Robert

    • Offizieller Beitrag

    Wozu Powershell? Wenn ich das richtig verstanden habe, kannst du alles erforderliche per WMI abfragen. Falls das Bsp. nicht alle Daten enthält kannst du das anpassen. Details zu WMI findest du bei MSDN.

    Edit:
    Ich habe mal Scriptomatic4AutoIt zum einfachen Generieren von WMI-Code angehängt.

  • Danke für die Antwort!

    Ich habe es mir jetzt noch nicht angeschaut, aber soviel vorab: es handelt sich um Domainuser. Kann ich die damit auch abfragen? soweit ich weiß kann ich per WMI doch nur Rechner verwalten bzw. lokal angelegte user, oder?! Wenn ich mich irre, bin ich ruhig :P

    • Offizieller Beitrag

    doch nur Rechner verwalten bzw. lokal angelegte user, oder?!

    Ich arbeite nicht regelmäßig mit WMI. Du kannst Remoteabfragen tätigen ($strComputer = "." <-- bedeutet localhost, da kannst du anderen Rechner angeben).
    Ich weiß nicht sicher, inwiefern Gruppenrichtlinien bestimmte Abfragen unterbinden, einfach testen. ;)

  • Danke dir vielmals! Die Accounts habe ich jetzt, aber das war ja nicht das eigentliche Problem :P Das Hauptproblem war ja, dass ich auslesen möchte, auf welche Ordner auf dem Fileserver ein User explizit Zugriff hat (statt über die Gruppe). Kann ich das auch damit abfragen?

    • Offizieller Beitrag

    kann ich dir aus dem Kopf nicht sagen. Starte mal Scriptomatic und schau nach, welche Methoden dir die einzelnen Klassen bieten.

    Edit:
    Soweit ich das nachgelesen habe, existiert keine interne Möglichkeit um kurz und knackig die Zugriffsrechte von Usern für eine Verzeichnisstruktur abzufragen.
    Also musst du auf externe Mittel zugreifen: AccessEnum von Sysinternals

  • Alles klar, dann teste ich mal ein bisschen mit WMI. Ansonsten schau dir mal den Code oben an, vielleicht fällt dir noch ein, was man besser machen könnte.

    P.S.: AccessEnum braucht noch länger als mein script :P

    • Offizieller Beitrag

    Kannst aber auch mal mit icacls probieren. Mußt dann das Ergebnis noch durchsortieren. Vielleicht geht das schneller.

  • Damit geht es zwar, soweit ich weiß, kann icacls aber nicht beibringen, dass er ausschließlich Ordnerberechtigungen auslesen soll, oder?

    Ich habe das hier gefunden für WMI. Leider geht das nur für einen Ordner und nicht für alle unter "\\server\D$\Daten"...

  • Weiß zwar nicht, was dir dein Script (was hier bereits in erweiterter Form ausgeführt wird, indem es noch die Domain mit angibt) bringen soll, da es nicht einen Hauch von "Berechtigungen" widergibt, sondern einfach bloß "ähm... ja, auf dem Ordner existieren Berechtigungen für den Nutzer... oder auch nicht. Keine Ahnung. Jedenfalls gibt es den da. Und es ist für ihn etwas spezifischer." - aber das wirst du wohl wissen.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

  • Es gibt bei einem Kunden das Problem, dass manche User explizit freigegeben sind für unterschiedliche Ordner, und das ist eine Altlast. Der Restrukturierung des Active Directories wegen wäre es somit nützlich, zu wissen welche Ordner in der Struktur für einzelne User freigegeben sind. Da die Ordnerstruktur recht tief ist, und auch weiter unten noch Berechtigungen vergeben wurden, ist das ein Mammutprojekt welches man durch dieses Skript deutlich verkürzen kann. Es soll geschaut werden, welche Userberechtigungen durch Gruppenberechtigungen ersetzt werden können, und welche Berechtigungen ohnehin sinnfrei sind.

    Ich schaue mir dein Skript gleich an und ergänze dann hier nochmals, falls ich Fragen habe. Danke jedenfalls für deine Hilfe!