So hier ein kleines PowerShell-Skript, dass in jedem direkten Unterverzeichnis eines Verzeichnisses einen Eintrag für Vollzugriff Administratoren hinzufügt.
Kopier das Skript in eine neue Datei und speicher es als .ps1 ab. Pass den Parameter $profileContainerDirectoryPath an. Vielleicht musst du auch den Parameter $user anpassen, da bei Domänen es noch die Gruppe Domänen-Administratoren gibt. Die hat leider keine fest SID, so dass ich sie nicht in meinem Skript aufführen konnte. In den Kommentaren ist ein Link zu einem Knowledge-Base-Artikel über bekannte SIDs. Du kannst statt einer SID auch einen Namen verwenden. Steht alles in den Kommentaren des Skripts.
Ganz wichtig: Vorher bitte mit einem anderen Verzeichnis testen!!! Nicht das irgendwas kaputt geht. Man weiß nie. Benutzung auf eigene Gefahr.
Jetzt brauchen wir eine PowerShell als User SYSTEM. Aufgrund von (durchaus sinnvollen) Sicherheitseinstellungen gehen die Tricks bei mir (Windows 7) nur eingeschränkt (keine interaktive Benutzeroberfläche). Deshalb: PsExec aus den PsTools (oder der gesamten Sysinternals Suite) von Microsoft Sysinternals benutzen (http://technet.microsoft.com/de-de/sysinternals/defa…). Runterladen, entpacken, Kommandozeile aufmachen, zum extrahierten Ordner wechseln und folgenden ausführen.
psexec -i -s „C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe“
Jetzt geht eine PowerShell auf. Dort mein Skript starten, indem du den Pfad zum Skript eingibst:
C:\bla\blub\skript.ps1
Voilà
.
Leider wurden die Formatierungen meines Skripts bisschen durcheinander gebracht beim Posten, falls es Probleme gibt schiebe ich es auf Pastebin.
Hier das Skript:
Pfad des Verzeichnisses, welches die Benutzerprofile enthält
$profileContainerDirectoryPath = „D:\Users“
Security Identifier des Benutzers für den ein neuer Zugriffskontrolleintrag erstellt werden soll
S-1-5-32-544 ist der vordefinierte Administrator
$user = New-Object System.Security.Principal.SecurityIdentifier(„S-1-5-32-544“)
Alternativ kann auch Benutzername spezifiziert werden.
#$user = New-Object System.Security.Principal.NTAccount(„BUILTIN\Administrators“)
Rechte des neuen Eintrags
$rights = [System.Security.AccessControl.FileSystemRights]::FullControl
Eintrag soll an Container (Verzeichnisse) und Objekte (Dateien) vererbt werden
$inheritanceFlags = [System.Security.AccessControl.InheritanceFlags]„ContainerInherit, ObjectInherit“
Eintrag soll keine Einschränkungen bei der Weitergabe besitzten
$propagationFlags = [System.Security.AccessControl.PropagationFlags]::None
Eintrag ist ein erlaubender Eintrag
$type = [System.Security.AccessControl.AccessControlType]::Allow
Eintrag erstellen
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule($user, $rights, $inheritanceFlags, $propagationFlags, $type)
Alle Unterobjekte von $profileContainerDirectoryPath holen
$profileDirectories = get-childitem -Path $profileContainerDirectoryPath
foreach($directory in $profileDirectories) {
Prüfen, ob es sich um ein Verzeichnis handelt
if($directory.Attributes -eq „Directory“) {
Alte Zugriffsliste bekommen
$acl = get-acl -Path $directory.FullName
Neuen Eintrag der alten Liste hinzufügen
$acl.AddAccessRule($rule)
Neue Liste anwenden
set-acl -Path $directory.FullName -AclObject $acl
}
}