2013-02-15 6 views
5

Ich mache ein Powershell-Skript, das neue Domänenbenutzerkonten in AD erstellt und auch Basisverzeichnisse im Dateiserver mit den entsprechenden Berechtigungen erstellt.Powershell-Skript zum Erstellen von Benutzerordnern für Benutzer- und Einstellungsberechtigungen

Mein Problem ist, ich kann die Berechtigungen nicht erhalten.

Im folgenden Code ist my_fileServer der Name des Dateiservers; sso bedeutet Single-Sign-On-ID, die im folgenden Testcode auf "user9999" gesetzt ist.

Jede Hilfe wird sehr geschätzt!

Set-Variable homeDir -option Constant -value "\\my_fileServer\Users" 
Set-Variable sso -option Constant -value "user9999" 

# If the folder for the user does not exist, make a new one and set the correct permissions. 
if ((Test-Path "$homeDir\$sso") -eq $false) 
{ 
    try 
    { 
     $NewFolder = New-Item -Path $homeDir -Name $sso -ItemType "Directory" 
     $Rights = [System.Security.AccessControl.FileSystemRights]"FullControl,Modify,ReadAndExecute,ListDirectory,Read,Write" 
     $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]::None 
     $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None 
     $objType =[System.Security.AccessControl.AccessControlType]::Allow 
     $objUser = New-Object System.Security.Principal.NTAccount "my_full_domain_name\$sso" 
     $objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ` 
       ($objUser, $Rights, $InheritanceFlag, $PropagationFlag, $objType) 
     $ACL = get-acl -Path $NewFolder 
     $ACL.AddAccessRule($objACE) 
     $objReturn = Set-ACL -Path "$homeDir\$sso" -AclObject $ACL 
    $objReturn 
    } 
    catch 
    { 
     $msg = $_ 
     $msg 
    } 
} 

Der Basisordner wird OK erstellt, aber wenn ich die Berechtigungen für den Benutzer zu überprüfen, wird kein Kästchen angekreuzt. enter image description here

+0

Set-Acl gibt keinen Wert zurück. –

Antwort

6

Das Problem ist Ihre Ehrlichkeit. Sie erlauben nicht, dass die Berechtigung für Unterordner und Dateien vererbt wird (Elemente, die er in seinem Ordner besitzt). Aus diesem Grund sehen Sie die Berechtigungen (nur "Spezielle Berechtigung") im Basissicherheitsfenster nicht. Wenn Sie "Erweiterte Sicherheitseinstellungen" öffnen, sehen Sie, dass der Benutzer die volle Kontrolle über diesen Ordner hat und nicht den Inhalt. Solange Sie Berechtigungen (mit Vererbung) für CREATOR OWNER hinzufügen, damit der Besitzer auf Objekte zugreifen kann, denke ich, dass es Ihnen gut geht. Allerdings könnte man das lösen schon jetzt wie folgt aus:

$InheritanceFlag = @([System.Security.AccessControl.InheritanceFlags]::ContainerInherit,[System.Security.AccessControl.InheritanceFlags]::ObjectInherit) 

Sofern keine besonderen Anforderungen gibt, sollten Sie den Benutzern vollen Zugriff auf seine Ordner (Voll Vererbung) geben. Vollständige Lösung mit fester Erbe (ich auch Ihren Set-ACL Weg gereinigt und unnötige returnobject entfernt):

try 
{ 
    $NewFolder = New-Item -Path $homeDir -Name $sso -ItemType "Directory" 
    $Rights = [System.Security.AccessControl.FileSystemRights]"FullControl,Modify,ReadAndExecute,ListDirectory,Read,Write" 
    $InheritanceFlag = @([System.Security.AccessControl.InheritanceFlags]::ContainerInherit,[System.Security.AccessControl.InheritanceFlags]::ObjectInherit) 
    $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None 
    $objType =[System.Security.AccessControl.AccessControlType]::Allow 
    $objUser = New-Object System.Security.Principal.NTAccount "my_full_domain_name\$sso" 
    $objACE = New-Object System.Security.AccessControl.FileSystemAccessRule ` 
      ($objUser, $Rights, $InheritanceFlag, $PropagationFlag, $objType) 
    $ACL = Get-Acl -Path $NewFolder 
    $ACL.AddAccessRule($objACE) 
    Set-ACL -Path $NewFolder.FullName -AclObject $ACL 
} 
+0

Vielen Dank !! jetzt verstehe ich warum ... – user1866880

0

die Berechtigungen All korrekt eingestellt als 'Special Permmissions', können Sie klicken auf Advanced überprüfen und schauen ‚Authorization‘ Reiter.

2

Ich kann leider nicht stimmen, aber ich stimme mit beiden Antworten oben (Graimer und CB), die eigentliche Antwort ist eine Kombination aus beidem.
- Sie müssen die Berechtigungen in der "Advanced" -Fenster überprüfen
- Auch wenn Ihr Code "funktioniert", ohne Vererbung werden Ihre Benutzer nicht in der Lage sein, viel in dem Ordner, den Sie ihnen zuweisen.

0

Halten Sie es einfach, tun Sie es mit weniger ... Was Sie verpasst haben, ist die SetAccessRuleProtection Funktion.

Hier ist der Code, der Ihnen die Ticks gibt, die Sie wollen.

if (-not (Test-Path "$homeDir\$sso")) 
{ 
    $acl = Get-Acl (New-Item -Path $homedir -Name $sso -ItemType Directory) 

    # Make sure access rules inherited from parent folders. 
    $acl.SetAccessRuleProtection($false, $true) 

    $ace = "$domain\$sso","FullControl", "ContainerInherit,ObjectInherit","None","Allow" 
    $objACE = New-Object System.Security.AccessControl.FileSystemAccessRule($ace) 
    $acl.AddAccessRule($objACE) 
    Set-ACL -Path "$homeDir\$sso" -AclObject $acl 

} 
Verwandte Themen