113805
16.05.2016, aktualisiert am 20.05.2016
24817
9
0
PowerShell Script ACL entfernen und setzen
Hallo zusammen
Ich brauche eure Hilfe bei meinem PowerShell Scriptchen.
Ich möchte gerne einen Ordner (C:\Test) nach meinem Wunsch berechtigen.
Ich erstelle also einen Ordner unter C:\ mit dem Namen "Test" und der besitzt nun die Standardberechtigung (SYSTEM, Administratoren, Benutzer)
Die Gruppe "Benutzer" soll aber entfernt werden, dafür aber der Benutzer mit dem Benutzername "Test" soll die Berechtigung erhalten zu diesem Ordner.
Es sollte eigentlich ein persönlicher Ordner auf dem Laufwerk C:\ sein.
Da in dieser Umgebung kein Arbeitsnetzwerk vorhanden ist werden diese Ordner Lokal erstellt und nicht via Share.
Ich habe jetzt schon den Teil welche ich die Vererbung deaktiviere so könnte ich theoretisch die Gruppe "Benutzer" manuell entfernen, jedoch soll das automatiesiert werden.
Jetzt sollte noch zwei Teile dazu kommen:
Liebe Grüsse
Ich brauche eure Hilfe bei meinem PowerShell Scriptchen.
Ich möchte gerne einen Ordner (C:\Test) nach meinem Wunsch berechtigen.
Ich erstelle also einen Ordner unter C:\ mit dem Namen "Test" und der besitzt nun die Standardberechtigung (SYSTEM, Administratoren, Benutzer)
Die Gruppe "Benutzer" soll aber entfernt werden, dafür aber der Benutzer mit dem Benutzername "Test" soll die Berechtigung erhalten zu diesem Ordner.
Es sollte eigentlich ein persönlicher Ordner auf dem Laufwerk C:\ sein.
Da in dieser Umgebung kein Arbeitsnetzwerk vorhanden ist werden diese Ordner Lokal erstellt und nicht via Share.
Ich habe jetzt schon den Teil welche ich die Vererbung deaktiviere so könnte ich theoretisch die Gruppe "Benutzer" manuell entfernen, jedoch soll das automatiesiert werden.
$folder = "C:\Test"
$acl = Get-ACL -Path $folder
$acl.SetAccessRuleProtection($True, $True)
Set-Acl -Path $folder -AclObject $acl
Jetzt sollte noch zwei Teile dazu kommen:
- Entfernen der Gruppe Benutzer
- Hinzufügen vom lokalen Benutzer "Test"
Liebe Grüsse
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 304668
Url: https://administrator.de/contentid/304668
Ausgedruckt am: 24.11.2024 um 17:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo smackee,
ich weiß zwar nicht wie oft ich das hier schon in Threads runter gebetet habe aber dann eben noch mal:
Steht übrigens auch schon hier:
http://www.vsysad.com/2015/04/powershell-script-to-remove-permissions-i ...
Grüße Uwe
-edit- Inheritance-Flags Zeile 17 korrigiert
ich weiß zwar nicht wie oft ich das hier schon in Threads runter gebetet habe aber dann eben noch mal:
# Ordner
$folder = 'C:\test'
# ACL des Ordners holen
$acl = Get-Acl $folder
# Vererbung deaktivieren und vorhandene Rules übernehmen
$acl.SetAccessRuleProtection($true,$true)
# ACLs im Ordnerobjekt speichern
Set-Acl $folder $acl
# Neue ACLs erneut einlesen
$acl = Get-Acl $folder
# ACEs aus der ACL entfernen die dem/der Benutzer/Gruppe '*\Users' entsprechen
$acl.Access | ?{$_.IdentityReference -like '*\Users'} | %{$acl.RemoveAccessRule($_)}
# Benutzer 'Test' mit Vollzugriff hinzufügen
$ace = New-Object System.Security.AccessControl.FileSystemAccessRule ((New-Object System.Security.Principal.NTAccount('Test')),"FullControl","ContainerInherit,ObjectInherit","None","Allow")
# ACE des Benutzers zu den ACLs hinzufügen
$acl.AddAccessRule($ace)
# Änderungen anden ACLs wieder in den Ordner zurückschreiben
Set-Acl $folder $acl
http://www.vsysad.com/2015/04/powershell-script-to-remove-permissions-i ...
Grüße Uwe
-edit- Inheritance-Flags Zeile 17 korrigiert
Zitat von @113805:
Dafür gibt es die WellKnown SIDs in Windows, für die Authentifizierten Benutzer ist das die S-1-5-11- Wie kann ich die Gruppe "Authentifizierte Benutzer" entfernen
$acl.Access | ?{$_.IdentityReference -eq (New-Object System.Security.Principal.SecurityIdentifier 'S-1-5-11').Translate([System.Security.Principal.NTAccount])} | %{$acl.RemoveAccessRuleAll($_)}
Bekannte Sicherheits-IDs in Windows-Betriebssystemen
* Wie kann ich einen weiteren Benutzer hinzufügen (statt die Zeile zu kopieren)
Z.B. mit einer Foreach-Schleife über ein Array deiner gewünschten Nutzernamen:$users = @('maxmuster','fraukemusterfrau')
$users | %{
$acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule ($_,"FullControl","ContainerInherit,ObjectInherit","None","Allow")))
}
$users = @{
'maxmuster' = 'FullControl'
'fraukemusterfrau' = 'ReadAndExecute'
}
$users.GetEnumerator | %{
$acl.AddAccessRule((New-Object System.Security.AccessControl.FileSystemAccessRule ($_.Name,$_.Value,"ContainerInherit,ObjectInherit","None","Allow")))
}
Schau auch mal hier rein:
500 Ordner - NTFS Berechtigungen mit wenigen Klicks ändern
Schönes Wochenende
Grüße Uwe
Doch das funktioniert, du hast nur die letzte Zeile des ersten Skripts vergessen am Ende einzufügen, welche die geänderte ACL letztendlich in den Ordner zurückschreibt!
Meine Codes waren nur die essentiellen Ausschnitte, dachte das wäre jetzt schon klar gewesen, wo ich sie doch oben extra kommentiert hatte.
Funktioniert hier alles einwandfrei.
Set-ACL $folder $acl
Meine Codes waren nur die essentiellen Ausschnitte, dachte das wäre jetzt schon klar gewesen, wo ich sie doch oben extra kommentiert hatte.
Funktioniert hier alles einwandfrei.
Hallo Zusammen,
Wie kann ich im Script auch eine liste von Computer hinzufugen ?
Ordner
$computer = c:\temp\list_of_computers.txt
$folder = '\\$computer\c$\test'
Wie kann ich im Script auch eine liste von Computer hinzufugen ?
Ordner
$computer = c:\temp\list_of_computers.txt
$folder = '\\$computer\c$\test'
- ACL des Ordners holen
- Vererbung deaktivieren und vorhandene Rules übernehmen
- ACLs im Ordnerobjekt speichern
- Neue ACLs erneut einlesen
- ACEs aus der ACL entfernen die dem/der Benutzer/Gruppe '*\Users' entsprechen
- Benutzer 'Test' mit Vollzugriff hinzufügen
- ACE des Benutzers zu den ACLs hinzufügen
- Änderungen anden ACLs wieder in den Ordner zurückschreiben
ich konnte mich selbst beantworten... :D, trotzdem vielen Dank zum den Tolle Script von Colinardo.
#Computers
$computers = Get-Content "c:\test1\computers.txt"
foreach ($computer in $Computers) {
}
#Computers
$computers = Get-Content "c:\test1\computers.txt"
foreach ($computer in $Computers) {
- Ordner
- ACL des Ordners holen
- Vererbung deaktivieren und vorhandene Rules übernehmen
- ACLs im Ordnerobjekt speichern
- Neue ACLs erneut einlesen
- ACEs aus der ACL entfernen die dem/der Benutzer/Gruppe '*\Users' entsprechen
- Benutzer 'Test' mit Vollzugriff hinzufügen
- ACE des Benutzers zu den ACLs hinzufügen
- Änderungen anden ACLs wieder in den Ordner zurückschreiben
}