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-ID: 284106

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

Ausgedruckt am: 25.11.2024 um 14:11 Uhr

LordXearo
LordXearo 29.09.2015 um 09:19:21 Uhr
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
122990
122990 29.09.2015 um 09:22:22 Uhr
Goto Top
meisterluehrs
meisterluehrs 29.09.2015 um 11:33:29 Uhr
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.
meisterluehrs
meisterluehrs 29.09.2015 um 11:38:06 Uhr
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
meisterluehrs
meisterluehrs 29.09.2015 um 11:44:12 Uhr
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 ?
LordXearo
LordXearo 29.09.2015 aktualisiert um 11:50:36 Uhr
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
colinardo
Lösung colinardo 29.09.2015 um 12:39:52 Uhr
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
colinardo
colinardo 30.12.2015 um 20:10:36 Uhr
Goto Top
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen. Merci.

Guten Rutsch.
patrickebert
patrickebert 15.12.2017 aktualisiert um 08:07:08 Uhr
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
colinardo
colinardo 15.12.2017 aktualisiert um 08:17:19 Uhr
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
patrickebert
patrickebert 15.12.2017 um 08:37:39 Uhr
Goto Top
Danke,
funktioniert ;)
Bist der Beste face-smile

Gruß Patrick