none
Lokale Gruppen einem Verzeichnis zuordnern (NTFS) RRS feed

  • Frage

  • Hallo,

    ich stehe momentan vor folgendem Problem:
    Ich möchte einem entfernten Ordner, welcher sich auf einem Server in einer Freigabe befindet,
    3 lokale Gruppen mit bestimmten Rechten zuweisen.
    Das ganze kann ich allerdings nicht direkt auf dem Server machen, sondern nur auf meinem Client
    Die lokalen Gruppen befinden sich aber auf dem Server.

    Beispiel:
    Der Ordner lautet \\Server\Freigabe\Ordner

    Die lokalen Gruppen auf dem Server heißen:
    server_freigabe_ordner_r
    server_freigabe_ordner_w
    server_freigabe_ordner_x

    Ich versuche die Rechte wie folgt zu setzen:

    $Ordner = Get-Item \\Server\Freigabe\Ordner
    
    $acl = Get-Acl $Ordner
    
    $Gruppe="\\SERVER\server_freigabe_ordner_r"
    $newrights = [System.Security.AccessControl.FileSystemRights]"ReadAndExecute, Synchronize"
    $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"
    $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
    $objType = [System.Security.AccessControl.AccessControlType]::Allow 
    $permission = $Gruppe ,$newrights, $InheritanceFlag, $PropagationFlag, $objType
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
    
    $acl.AddAccessRule($accessRule)

    Dabei erhalte ich folgenden Fehler:

    Ausnahme beim Aufrufen von "AddAccessRule" mit 1 Argument(en):  "Manche oder al
    le Identitätsverweise konnten nicht übersetzt werden."
    Bei Zeile:1 Zeichen:19
    + $acl.AddAccessRule <<<< ($accessRule)
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : DotNetMethodException

    Ich denke es liegt daran, dass meinem Client die lokalen Gruppen des Server nicht bekannt sind.

    Gibt es eine Möglichkeit das zu lösen?



    • Bearbeitet Sizco Mittwoch, 14. März 2012 14:58
    Mittwoch, 14. März 2012 14:54

Antworten

  • Da musst du dir mit dem WinNT: Provider die SID der Gruppe holen und die Rechte nur über die SID setzen:

    # Pfad zum Ordner oder der Datei die neue Rechte bekommen soll
    $Pfad = '\\Server\Freigabe\Ordner'
    
    # Pfad zur Gruppe im Format Servername.domain/Gruppenname (FQDN) oder Domain/Gruppenname angeben
    $GruppenPfad = 'Server.Domains(FQDN)/GruppenName'
    
    # Gruppe mit dem WinNT Provider vom Server auslesen
    $Group = [ADSI]"WinNT://$GruppenPfad"
    
    # SID der Gruppe auslesen
    $SID = New-Object System.Security.Principal.SecurityIdentifier $Group.objectSid[0],0
    
    $Ordner = Get-Item $Pfad
    
    # ACL holen
    $acl = Get-Acl $Ordner
    
    # neue ACL zusammenbauen
    $newrights = [System.Security.AccessControl.FileSystemRights]"ReadAndExecute, Synchronize"
    $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"
    $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
    $objType = [System.Security.AccessControl.AccessControlType]::Allow 
    $permission = $SID ,$newrights, $InheritanceFlag, $PropagationFlag, $objType
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
    
    # neue ACL zur alten ACL zufügen
    $acl.AddAccessRule($accessRule)
    
    # ACL setzen (schreiben)
    $acl | Set-Acl $Pfad


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    Mittwoch, 14. März 2012 15:38
  • Get-Help about_Try_Catch_Finally

    Oder in deinem Fall mit IF

    # Pfad zur Gruppe im Format Servername.domain/Gruppenname (FQDN) oder Domain/Gruppenname angeben
    $GruppenPfad = 'Server.Domains(FQDN)/GruppenName'
    
    # Gruppe mit dem WinNT Provider vom Server auslesen
    $Group = [ADSI]"WinNT://$GruppenPfad"
    
    If ($Group.name -Like "") {
        Write-Warning "Gruppe $GruppenPfad NICHT gefunden!"
    }
    else{
        "Gruppe $GruppenPfad gefunden!"
    }


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '



    Donnerstag, 15. März 2012 06:16

Alle Antworten

  • Da musst du dir mit dem WinNT: Provider die SID der Gruppe holen und die Rechte nur über die SID setzen:

    # Pfad zum Ordner oder der Datei die neue Rechte bekommen soll
    $Pfad = '\\Server\Freigabe\Ordner'
    
    # Pfad zur Gruppe im Format Servername.domain/Gruppenname (FQDN) oder Domain/Gruppenname angeben
    $GruppenPfad = 'Server.Domains(FQDN)/GruppenName'
    
    # Gruppe mit dem WinNT Provider vom Server auslesen
    $Group = [ADSI]"WinNT://$GruppenPfad"
    
    # SID der Gruppe auslesen
    $SID = New-Object System.Security.Principal.SecurityIdentifier $Group.objectSid[0],0
    
    $Ordner = Get-Item $Pfad
    
    # ACL holen
    $acl = Get-Acl $Ordner
    
    # neue ACL zusammenbauen
    $newrights = [System.Security.AccessControl.FileSystemRights]"ReadAndExecute, Synchronize"
    $InheritanceFlag = [System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit"
    $PropagationFlag = [System.Security.AccessControl.PropagationFlags]::None
    $objType = [System.Security.AccessControl.AccessControlType]::Allow 
    $permission = $SID ,$newrights, $InheritanceFlag, $PropagationFlag, $objType
    $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule $permission
    
    # neue ACL zur alten ACL zufügen
    $acl.AddAccessRule($accessRule)
    
    # ACL setzen (schreiben)
    $acl | Set-Acl $Pfad


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '

    Mittwoch, 14. März 2012 15:38
  • Vielen Dank für die Antwort, ich konnte es erfolgreich testen.

    Ich habe noch eine weitere Frage dazu:
    Wie kann ich am besten testen, ob die lokale Gruppe vorhanden ist?
    Evtl. gibt es die Gruppe gar nicht auf dem Server, da ich sie im Skript zusammensetze.

    Mittwoch, 14. März 2012 18:04
  • Get-Help about_Try_Catch_Finally

    Oder in deinem Fall mit IF

    # Pfad zur Gruppe im Format Servername.domain/Gruppenname (FQDN) oder Domain/Gruppenname angeben
    $GruppenPfad = 'Server.Domains(FQDN)/GruppenName'
    
    # Gruppe mit dem WinNT Provider vom Server auslesen
    $Group = [ADSI]"WinNT://$GruppenPfad"
    
    If ($Group.name -Like "") {
        Write-Warning "Gruppe $GruppenPfad NICHT gefunden!"
    }
    else{
        "Gruppe $GruppenPfad gefunden!"
    }


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '



    Donnerstag, 15. März 2012 06:16
  • Vielen Dank für deine Hilfe. Funktioniert perfekt.
    Donnerstag, 15. März 2012 08:39
  • Bitte noch einen Antwort markieren!
    Damit andere User des Forums, gleich die für dich richtige Antwort zu sehen bekommen.

    Mehrfach Markierungen sind möglich falls es mehrere richtige Antworten gibt ! ;-))


    Please click “Mark as Answer” if my post answers your question and click Vote as Help if my Post helps you.
    Bitte markiere hilfreiche Beiträge von mir als Hilfreich und Beiträge die deine Frage ganz oder teilweise beantwortet haben als Antwort.
    My PowerShell Blog http://www.admin-source.info
    [string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '


    Donnerstag, 15. März 2012 08:47