none
Troubleshooting Filesystem creation script RRS feed

  • Frage

  • Set-ExecutionPolicy unrestricted import-module activedirectory if (! $?) { throw "Active-Directory Modul konnte nicht geladen werden! In der Regel ist das AD-Modul nur auf Domänencontrollern installiert." } ########################################################## Ordner und FS Gruppen anlegen ########################################################## $csvfile="fs.csv" $pfad="\\DFS.Path.To\Folder\Foldername" $ordnerlist=Import-Csv $csvfile -Delimiter ";" foreach ($ordner in $ordnerlist) { #Ordner erstellen $ordnername = $ordner.Verzeichnis $ordnerpfad = $pfad+$ordnername mkdir -path $ordnerpfad #ACL's auslesen $AccessL=GET-ACL $ordnerpfad $AccessR=GET-ACL $ordnerpfad $AccessW=GET-ACL $ordnerpfad $folder=($ordnername -split "\\")[-1] $groupname="domname-SG-FS-"+$folder #Allgemeine ACL's setzen $AccessControlType=[System.Security.AccessControl.AccessControlType]"Allow" $InheritanceFlags=[System.Security.AccessControl.InheritanceFlags]"ContainerInherit, ObjectInherit" $PropagationFlags=[System.Security.AccessControl.PropagationFlags]"InheritOnly" ############# FS-Gruppe "L" anlegen und zuordnen ############# #Verfügbare Rechte http://msdn.microsoft.com/de-de/library/system.security.accesscontrol.filesystemrights.aspx $FileSystemRightsL=[System.Security.AccessControl.FileSystemRights]"ListDirectory" $IdentityReferenceL=$groupname+"-L" #Zusammensetzen des ACL Befehls $FileSystemAccessRuleL=New-Object System.Security.AccessControl.FileSystemAccessRule ($IdentityReferenceL, $FileSystemRightsL, $InheritanceFlags, $PropagationFlags, $AccessControlType) $AccessL.AddAccessRule($FileSystemAccessRuleL) #ACL setzen SET-ACL $ordnerpfad $AccessL ############# FS-Gruppe "R" anlegen und zuordnen ############# #Verfügbare Rechte http://msdn.microsoft.com/de-de/library/system.security.accesscontrol.filesystemrights.aspx $FileSystemRightsR=[System.Security.AccessControl.FileSystemRights]"Read" $IdentityReferenceR=$groupname+"-R" #Zusammensetzen des ACL Befehls $FileSystemAccessRuleR=New-Object System.Security.AccessControl.FileSystemAccessRule ($IdentityReferenceR, $FileSystemRightsR, $InheritanceFlags, $PropagationFlags, $AccessControlType) $AccessR.AddAccessRule($FileSystemAccessRuleR) #ACL setzen SET-ACL $ordnerpfad $AccessR ############# FS-Gruppe "W" anlegen und zuordnen ############# #Verfügbare Rechte http://msdn.microsoft.com/de-de/library/system.security.accesscontrol.filesystemrights.aspx $FileSystemRightsW=[System.Security.AccessControl.FileSystemRights]"Modify" $IdentityReferenceW=$groupname+"-W" #Zusammensetzen des ACL Befehls $FileSystemAccessRuleW=New-Object System.Security.AccessControl.FileSystemAccessRule ($IdentityReferenceW, $FileSystemRightsW, $InheritanceFlags, $PropagationFlags, $AccessControlType) $AccessW.AddAccessRule($FileSystemAccessRuleW) #ACL setzen SET-ACL $ordnerpfad $AccessW }

    Da habe ich wohl meine Frage durch den Quelltext ersetzt.

    Jetzt aber richtig.

    Schönen guten Tag erst mal,

    ich bin gerade dabei ein Powershellscript zu basteln, welches aus einer csv Datei eine Ordnerstruktur ausliest und dann entsprechend die Ordner anlegt und dort auch Filesystem Gruppen mit den Rechten List, Read und Write zuordnet und diese vorab anlegt.

    Die csv ist wie folgt aufgebaut:

    Verzeichnis; Platzhalter

    00_Ordner1;0

    00_Ordner2;0

    00_Ordner2\00_Unterordner1;0

    Wie ihr seht sind zum Teil auch Unterordner mit enthalten, deshalb der Teil mit

    $folder=($ordnername -split "\\")[-1]

    Leider werde ich aus dem folgendem Fehler nicht schlau, weshalb ich mich an euch wende.

    Hier der Fehler, welcher natürlich je Datensatz ausgespuckt wird:

    Ausnahme beim Aufrufen von "AddAccessRule" mit 1 Argument(en):  "Manche oder alle Identitätsverweise konnten nicht übersetzt werden."
    Bei Pfad-zum-Script\FS-Import.ps1:36 Zeichen:27
    +     $AccessL.AddAccessRule <<<< ($FileSystemAccessRuleL)
        + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        + FullyQualifiedErrorId : DotNetMethodException

    Des weiteren komme ich nicht dahinter, wie ich die Variable $OU mit einfügen kann, dass ich noch den Pfad, wo die Gruppen erstellt werden sollen angeben kann. Vielleicht kann mir da noch jemand helfen.

    Vielen Dank für eure Hilfe!

    • Bearbeitet Trigonom Freitag, 22. April 2016 14:16 Einfügen des Quellcodes hat den Rest überschrieben.
    Freitag, 22. April 2016 12:02

Antworten

Alle Antworten

  • Schön. :) Gibts dazu auch ne Frage?

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Freitag, 22. April 2016 12:18
    Moderator
  • Eine IdentityNotMappedException bekommst Du, wenn der Benutzer- oder Gruppenname nicht auflösbar ist. Bei einem der Aufrufe von AddAccessRule passiert das anscheinend.

    Generell kannst Du das Script stark verkürzen, wenn Du das File System Security PowerShell Module benutzten kannst.


    -Raimund

    Samstag, 23. April 2016 11:51
  • Hallo zusammen,

    vielen Dank für die Anregungen.

    folgendes ist draus geworden:

    Set-ExecutionPolicy unrestricted
    import-module activedirectory
    import-module ntfssecurity
    if (! $?) {
        throw "Active-Directory Modul konnte nicht geladen werden! In der Regel ist das AD-Modul nur auf Domänencontrollern installiert."
    }
    ########################################################## Ordner und FS Gruppen anlegen ##########################################################
    $dfsroot               = Read-Host "DFS-Root(\\gao.minusma.local\asmi)"
    $dfsleaf               = Read-Host "DFS-Leaf, wo die Rollenverzeichnisse erstellt werden sollen."
    $OU                    = Read-Host "Distinguished Name der OU, in der die Gruppen erstellt werden sollen."
    $ReadStandardGroupName = Read-Host "Standard Gruppen Name."
    $pfad                  = $dfsroot+"\"+$dfsleaf
    $csvfile               = "Prad zur csv"
    $StandardGroupNameFS   = $ReadStandardGroupName +"-FS-"
    $StandardGroupNameAD   = $ReadStandardGroupName +"-"
    $ordnerlist            = Import-Csv $csvfile -Delimiter ";"
    $OUFSPath              = "OU="+$dfsleaf+",OU=Fileservice,"+$OU
    $OUADPath              = "OU="+$dfsleaf+",OU=Dienstposten,"+$OU
    New-ADOrganizationalUnit -name "$dfsleaf" -path "OU=Fileservice, $OU"
    New-ADOrganizationalUnit -name "$dfsleaf" -path "OU=Dienstposten, $OU" 
      foreach              ($ordner in $ordnerlist) 
          {
        #Variablen definieren
            $ordnername    = $ordner.Verzeichnis
            $ordnerpfad    = $pfad+$ordnername
            $folder        = ($ordnername -split "\\")[-1]
            $mainfolder    = ($ordnername -split "\\")[-2]
            $OUFS          = "OU="+$folder+","+$OUFSPath
            $OUAD          = "OU="+$folder+","+$OUADPath
            $OUmainFS      = "OU="+$folder+","+"OU="+$mainfolder+","+$OUFSPath
            $OUmainAD      = "OU="+$folder+","+"OU="+$mainfolder+","+$OUADPath
            mkdir -path $ordnerpfad
            $Access        = GET-ACL $ordnerpfad
            
            if               ($mainfolder -eq "")
                {
                    $groupnameFSL  = $StandardGroupNameFS+$folder+"-L"
                    $groupnameFSR  = $StandardGroupNameFS+$folder+"-R"
                    $groupnameFSW  = $StandardGroupNameFS+$folder+"-W"
                    $groupnameADL  = $StandardGroupNameAD+$folder+"-L"
                    $groupnameADR  = $StandardGroupNameAD+$folder+"-R"
                    $groupnameADW  = $StandardGroupNameAD+$folder+"-W"
                    New-ADOrganizationalUnit -name "$folder" -path "$OUFSPath"
                    New-ADOrganizationalUnit -name "$folder" -path "$OUADPath"
                #FS Gruppen erstellen
                    New-ADGroup -Name $groupnameFSL -GroupCategory Security -GroupScope Global -Path "$OUFS"
                    New-ADGroup -Name $groupnameFSR -GroupCategory Security -GroupScope Global -Path "$OUFS"
                    New-ADGroup -Name $groupnameFSW -GroupCategory Security -GroupScope Global -Path "$OUFS"
                #AD Gruppen erstellen
                    New-ADGroup -Name $groupnameADL -GroupCategory Security -GroupScope Global -Path "$OUAD"
                    New-ADGroup -Name $groupnameADR -GroupCategory Security -GroupScope Global -Path "$OUAD"
                    New-ADGroup -Name $groupnameADW -GroupCategory Security -GroupScope Global -Path "$OUAD"
                #Gruppenmitgliedschaften
                    Add-ADGroupMember $groupnameFSL $groupnameADL
                    Add-ADGroupMember $groupnameFSR $groupnameADR
                    Add-ADGroupMember $groupnameFSW $groupnameADW
                }
            else
                {
                    $groupnameFSL  = $StandardGroupNameFS+$mainfolder+"-"+$folder+"-L"
                    $groupnameFSR  = $StandardGroupNameFS+$mainfolder+"-"+$folder+"-R"
                    $groupnameFSW  = $StandardGroupNameFS+$mainfolder+"-"+$folder+"-W"
                    $groupnameADL  = $StandardGroupNameAD+$mainfolder+"-"+$folder+"-L"
                    $groupnameADR  = $StandardGroupNameAD+$mainfolder+"-"+$folder+"-R"
                    $groupnameADW  = $StandardGroupNameAD+$mainfolder+"-"+$folder+"-W"
                    $OUFSMainPath  = "OU="+$mainfolder+","+$OUFSPath
                    $OUADMainPath  = "OU="+$mainfolder+","+$OUADPath
                    New-ADOrganizationalUnit -name "$folder" -path "$OUFSMainPath"
                    New-ADOrganizationalUnit -name "$folder" -path "$OUADMainPath"
                #FS Gruppen erstellen
                    New-ADGroup -Name $groupnameFSL -GroupCategory Security -GroupScope Global -Path "$OUmainFS"
                    New-ADGroup -Name $groupnameFSR -GroupCategory Security -GroupScope Global -Path "$OUmainFS"
                    New-ADGroup -Name $groupnameFSW -GroupCategory Security -GroupScope Global -Path "$OUmainFS"
                #AD Gruppen erstellen
                    New-ADGroup -Name $groupnameADL -GroupCategory Security -GroupScope Global -Path "$OUmainAD"
                    New-ADGroup -Name $groupnameADR -GroupCategory Security -GroupScope Global -Path "$OUmainAD"
                    New-ADGroup -Name $groupnameADW -GroupCategory Security -GroupScope Global -Path "$OUmainAD"
                #Gruppenmitgliedschaften
                    Add-ADGroupMember $groupnameFSL $groupnameADL
                    Add-ADGroupMember $groupnameFSR $groupnameADR
                    Add-ADGroupMember $groupnameFSW $groupnameADW
                }
            Get-Item $ordnerpfad | Add-NTFSAccess -account "gao\$groupnameFSL" -AccessRights ListDirectory -InheritanceFlags "ContainerInherit, ObjectInherit" -PropagationFlags None
            Get-Item $ordnerpfad | Add-NTFSAccess -account "gao\$groupnameFSR" -AccessRights Read          -InheritanceFlags "ContainerInherit, ObjectInherit" -PropagationFlags None
            Get-Item $ordnerpfad | Add-NTFSAccess -account "gao\$groupnameFSW" -AccessRights Modify        -InheritanceFlags "ContainerInherit, ObjectInherit" -PropagationFlags None
        }

    Es funktioniert, was schon mal das wichtigste ist. Die Feinheiten kommen später...

    Dazu kommen noch meine Scripte zum Userimport und um die Nutzer den jeweiligen Dateifreigaben zuzuordnen.

    Grüße aus dem Süden

    Mittwoch, 4. Mai 2016 12:06
  • Ein kleiner Tip zu Add-NTFSAccess noch: Die Benutzung des Parameters AppliesTo ist einfacher als die Kombination über InheritanceFlags und PropagationFlags.

    -Raimund

    Mittwoch, 4. Mai 2016 13:35