meisterluehrs
Goto Top

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! face-smile

Content-Key: 284106

Url: https://administrator.de/contentid/284106

Printed on: April 23, 2024 at 06:04 o'clock

Member: LordXearo
LordXearo Sep 29, 2015 at 07:19:21 (UTC)
Goto Top
Morgen,

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
Mitglied: 122990
122990 Sep 29, 2015 at 07:22:22 (UTC)
Goto Top
Member: meisterluehrs
meisterluehrs Sep 29, 2015 at 09:33:29 (UTC)
Goto Top
So wirklich schlau werde ich daraus nicht... Ich möchte ja nicht alle Unterordner verändern sondern einfach nur einen einzigen Ordner bearbeiten. Einfach z.B. einen anderen Benutzer auf dem PC den Zugriff auf diesen Ordner Verweigern, bzw Vollzugriff erlauben.
Member: meisterluehrs
meisterluehrs Sep 29, 2015 at 09:38:06 (UTC)
Goto Top
okay, es Funktioniert, haste vlt nen Link wo man die Einstellungsmöglichkeiten bezüglich der Zugriffsrechte nachsehen kann ? Finde dazu leider nicht all zu viel
Member: meisterluehrs
meisterluehrs Sep 29, 2015 at 09:44:12 (UTC)
Goto Top
Ne andere Frage noch, wenn ich diese Skript ausführe, dann bekommt der angegebene Nutzer immer sofort alle rechte für alle Daten auf meinem Desktop... ist das richtig ? Ich denke mal nicht :/ könntest du mir Befehle wie "System.Security.AccessControl.FileSystemAccessRule" und "ContainerInherit" "ObjectInherit" erläutern ?
Member: LordXearo
LordXearo Sep 29, 2015 updated at 09:50:36 (UTC)
Goto Top
Nach was hast du denn gesucht?
    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
Member: colinardo
Solution colinardo Sep 29, 2015 at 10:39:52 (UTC)
Goto Top
Und hier eine Funktion die das ganze komfortabel zusammenfasst, mit der man alle Parameter auch via IntelliSense angezeigt bekommt
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 $_
        }
    }
}
Beispielanwendung:
Set-FileSystemPermission -path "C:\OrdnerXYZ" -user "CONTOSO\maxmuster" -AccessRights CreateFiles,CreateDirectories -ControlType Allow  
Grüße Uwe
Member: colinardo
colinardo Dec 30, 2015 at 19:10:36 (UTC)
Goto Top
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.

Guten Rutsch.
Member: patrickebert
patrickebert Dec 15, 2017 updated at 07:07:08 (UTC)
Goto Top
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".
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  
Wenn ich es so ausführe, überschreibt es mir nur die speziellen Rechte und gibt ein Vollzugriff auf Unterordner und Dateien.

Gruß
Patrick
Member: colinardo
colinardo Dec 15, 2017 updated at 07:17:19 (UTC)
Goto Top
Servus Patrick,
Wenn du das willst musst du in der Funktion (Zeile 31) das SetAccessRule durch ein AddAccessRule ersetzen
 $acl.AddAccessRule($objACE) 
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 face-wink.

Gruß Uwe
Member: patrickebert
patrickebert Dec 15, 2017 at 07:37:39 (UTC)
Goto Top
Danke,
funktioniert ;)
Bist der Beste face-smile

Gruß Patrick