Création répertoire et groupes Domaine Locaux avec ajout de droits automatique

Des petites boucles pour des tâches d’administration possible lors d’une installation d’un annuaire AD. A décliner selon les besoins, évidement de l’optimisation peut être fait pour éviter 50 boucles alors qu’une ou deux suffisent.

Le principe pour appliquer des droits sur des répertoires partagés est simple. Chaque répertoire dispose de 2 groupes d’étendue Domaine Local, un pour la lecture seule et l’autre pour lecture/écriture. On ajoutera ces groupes à chaque répertoire avec les droits adéquats. Enfin on inclura les groupes globaux contenant les users dans les bon groupes domaine locaux pour chaque répertoires.

Création des répertoires automatiquement avec leurs groupes Domaine Locaux associés selon une liste csv avec une colonne avec le nom du répertoire :

$DirList=Import-Csv -Delimiter ";" -Path .\DirList.csv
foreach ($dir in $DirList)
{
    mkdir $dir.Name
    $ResGroupRO="DL_" + $dir.Name + "_RO"
    $ResGroupRW="DL_" + $dir.Name + "_RW"

    New-ADGroup -Name ResGroupRO -GroupScope 0 -Path "OU=Ressources partagées,DC=domain,dc=tld"
    New-ADGroup -Name ResGroupRW -GroupScope 0 -Path "OU=Ressources partagées,DC=domain,dc=tld"
}

Ajout des membres voulus dans les groupes Domaine Locaux des dossiers partagés. Le CSV a deux colonnes la première Name avec le nom du groupe de domaine local (groupe pour chaque répertoire). La seconde avec une liste de groupe globale contenant les users séparée par des virgules.

$Csv = Import-Csv -Delimiter ";" -Path ./FolderRight.csv
foreach($elt in $Csv)
{
    $GroupName="G_" + $elt.Group
    
    foreach ($Dir in $elt.Dir.Split(","))
    {
         $ResGroupRO="DL_" + $Dir + "_RO"
         $ResGroupRW="DL_" + $Dir + "_RW"
         Add-ADGroupMember -Identity $ResGroupRO -Members $GroupName
         Add-ADGroupMember -Identity $ResGroupRW -Members $GroupName
     }
}

Application de droits avec des groupes Domaine Locaux pour chacun d’eux. Se reporter à l’aide de la commande pour le détail des arguments (flags : /?).
Notez les backticks avant les parenthèses pour les flags OI et CI. Les backticks permettent d’échapper les parenthèses, sinon Powershell interprète

foreach ($dir in $DirList)
{
    $GroupRW = "DL_" + $dir.Name + "_RW"
    $GroupRO = "DL_" + $dir.Name + "_RO"
    icacls.exe $dir.Name /grant ($GroupRW + ":`(OI`)`(CI`)F") /grant ($GroupRO + ":`(OI`)`(CI`)RX")
}