Via Powershell Benutzer Zugriffs- Bearbeitungsrechte Verwalten
Guten morgen allerseits, ich suche ein Powershell Skript, mit dem ich einen Ordner erstellen kann. So weit so gut habe ich hinbekommen Skript hierzu : new-item -path "C: Users aluehrs desktop" -name "testornder" -itemtype directory (Denkt euch die Backslash`s dazu... sind keine erlaubten Sonderzeichen).
Funktioniert alles einwandfrei.
Aber jetzt stoße ich auf ein Problem, und zwar ist es so, dass ich jetzt gerne im gleichen Befehl die Rechte Verwalte (z.B. keinem außer mir Zugriffsrechte gebe). Könnt mir hier jemand helfen ? Ich habe schon mehrere Sachen im Internet dazu gefunden, aber bin ich noch recht ahnungslos wie ich auf die Benutzer verweisen kann (sprich wie ich Powershell sagen kann das genau dieser Nutzer keine Rechte haben soll oder halt alle Nutzer keine Rechte haben sollen).
Ich danke schon einmal für jede Hilfe!
Funktioniert alles einwandfrei.
Aber jetzt stoße ich auf ein Problem, und zwar ist es so, dass ich jetzt gerne im gleichen Befehl die Rechte Verwalte (z.B. keinem außer mir Zugriffsrechte gebe). Könnt mir hier jemand helfen ? Ich habe schon mehrere Sachen im Internet dazu gefunden, aber bin ich noch recht ahnungslos wie ich auf die Benutzer verweisen kann (sprich wie ich Powershell sagen kann das genau dieser Nutzer keine Rechte haben soll oder halt alle Nutzer keine Rechte haben sollen).
Ich danke schon einmal für jede Hilfe!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 284106
Url: https://administrator.de/contentid/284106
Ausgedruckt am: 25.11.2024 um 14:11 Uhr
11 Kommentare
Neuester Kommentar
Morgen,
so lassen sich mt Powershell Berechtigungen (ACLs) bearbeiten.
Mit $aclDesktop | Get-Member kannst du dir alle Methoden anschauen.
Viele Grüße
Xearo
so lassen sich mt Powershell Berechtigungen (ACLs) bearbeiten.
$aclDesktop = Get-Acl "C:\Users\aluehrs\desktop"
$rule = New-Object System.Security.AccessControl.FileSystemAccessRule("aluehrs","FullControl", "ContainerInherit, ObjectInherit", "None", "Allow")
$aclDesktop.AddAccessRule($rule)
Set-Acl "C:\Users\aluehrs\desktop" $aclDesktop
Mit $aclDesktop | Get-Member kannst du dir alle Methoden anschauen.
Viele Grüße
Xearo
Nach was hast du denn gesucht?
Edit:
Hier hast du was zum lesen:
https://technet.microsoft.com/en-us/library/ff730951.aspx
AppendData
ChangePermissions
CreateDirectories
CreateFiles
Delete
DeleteSubdirectoriesAndFiles
ExecuteFile
FullControl
ListDirectory
Modify
Read
ReadAndExecute
ReadAttributes
ReadData
ReadExtendedAttributes
ReadPermissions
Synchronize
TakeOwnership
Traverse
Write
WriteAttributes
WriteData
WriteExtendedAttributes
Edit:
Hier hast du was zum lesen:
https://technet.microsoft.com/en-us/library/ff730951.aspx
Und hier eine Funktion die das ganze komfortabel zusammenfasst, mit der man alle Parameter auch via IntelliSense angezeigt bekommt
Beispielanwendung:
Grüße Uwe
function Set-FileSystemPermission {
param(
[parameter(mandatory=$true)][ValidateScript({Test-Path $_})][string]$path,
[parameter(mandatory=$true)][string]$user,
[parameter(mandatory=$true)][ValidateSet("AppendData","ChangePermissions","CreateDirectories","CreateFiles","Delete","DeleteSubdirectoriesAndFiles","ExecuteFile","FullControl","ListDirectory","Modify","Read","ReadAndExecute","ReadAttributes","ReadData","ReadExtendedAttributes","ReadPermissions","Synchronize","TakeOwnership","Traverse","Write","WriteAttributes","WriteData","WriteExtendedAttributes")][string[]]$AccessRights,
[parameter(mandatory=$false)][ValidateSet("Allow","Deny")][string]$ControlType = "Allow",
[parameter(mandatory=$false)][ValidateSet( "folder","folder;sub-folders;files","folder;sub-folders","folder;files","sub-folders;files","sub-folders","files")][string]$inheritance = "folder;sub-folders;files",
[parameter(mandatory=$false)][bool]$disableInheritance = $false,
[parameter(mandatory=$false)][bool]$keepExistingRules = $true
)
process{
try{
# inheritance and propagation Zuordnung
$inheritance_table = @{
"folder" = @{I="none";P="none"}
"folder;sub-folders;files" = @{I="ContainerInherit,ObjectInherit";P="none"}
"folder;sub-folders" = @{I="ContainerInherit";P="none"}
"folder;files" = @{I="ObjectInherit";P="none"}
"sub-folders;files" = @{I="ContainerInherit,ObjectInherit";P="InheritOnly"}
"sub-folders" = @{I="ContainerInherit";P="InheritOnly"}
"files" = @{I="ObjectInherit";P="InheritOnly"}
}
# bestehende ACL speichern
$acl = Get-ACL $path
# Vererbung der ACL festlegen
$acl.SetAccessRuleProtection($disableInheritance,$keepExistingRules)
# Access Rule erstellen
$objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ($user,$AccessRights,$inheritance_table[$inheritance].I,$inheritance_table[$inheritance].P,$ControlType)
# AccessRule der ACL hinzufügen
$acl.SetAccessRule($objACE)
# Schreibe die ACL
set-acl -Path $path -AclObject $acl
return $objACE
}catch{
write-Error $_
}
}
}
Set-FileSystemPermission -path "C:\OrdnerXYZ" -user "CONTOSO\maxmuster" -AccessRights CreateFiles,CreateDirectories -ControlType Allow
Hallo Uwe,
gibt es bei der Funktion auch die Möglichkeit 2 verschiedene Rechte einen User mit zuteilen? Also "Nur diesen Ordner" und einmal "Unterordner und Dateien".
Wenn ich es so ausführe, überschreibt es mir nur die speziellen Rechte und gibt ein Vollzugriff auf Unterordner und Dateien.
Gruß
Patrick
gibt es bei der Funktion auch die Möglichkeit 2 verschiedene Rechte einen User mit zuteilen? Also "Nur diesen Ordner" und einmal "Unterordner und Dateien".
Set-FileSystemPermission -path "C:\OrdnerXYZ" -user "CONTOSO\maxmuster" -AccessRights CreateFiles,AppendData, ReadAndExecute,Synchronize -inheritance folder -ControlType Allow
Set-FileSystemPermission -path "C:\OrdnerXYZ" -user "CONTOSO\maxmuster" -AccessRights FullControl -inheritance 'sub-folders;files' -ControlType Allow
Gruß
Patrick
Servus Patrick,
Wenn du das willst musst du in der Funktion (Zeile 31) das SetAccessRule durch ein AddAccessRule ersetzen
Denn das SetAccessRule bewirkt daß bereits vorhandene Regeln des selben Users überschrieben werden. Deswegen heißt das Prädikat der Funktion Set und nicht Add .
Gruß Uwe
Wenn du das willst musst du in der Funktion (Zeile 31) das SetAccessRule durch ein AddAccessRule ersetzen
$acl.AddAccessRule($objACE)
Gruß Uwe