TUTOS.EU

Réinitialiser les droits sur des répertoires de profils utilisateurs

Comment redéfinir les droits sur des répertoires de profils utilisateurs

Les droits d'un partage qui héberge les profils ou homefolder des utilisateurs peuvent se corrompent ou peuvent avoir besoin d’être réinitialisés. Ce script powershell prépare un fichier bat qui peut donc être contrôlé avant lancement. Il prépare une série de commande pour chaque sous-répertoire d’un partage. On considère que chaque sous répertoire correspond au login d’un utilisateur. Le script se basera sur le nom de ce répertoire pour donner les droits au login correspondant. Les administrateurs auront le plein accès et l’utilisateur se verra donné les droits de propriétaire.

$MyLine = [string]
$PathToProcess = [string]
$PathFolderForCACLS = [string]
$CheminFichier = [string]
$AdministratorLogin = [string]

$AdministratorLogin = "Administrators"

$PathToProcess = "C:\Chemin à traiter"
$NomFichier = "BatCACLS.bat"
$RepertoireFichier = "C:\Repertoire pour ecrire le BAT resultant"
$CheminFichier = "$RepertoireFichier\$NomFichier"

Write-Host $CheminFichier
$MonFichier = New-Item -type file $CheminFichier -Force

$MonFolder = Get-ChildItem -Path $PathToProcess | Where-Object {$_.PSIsContainer}
foreach ($MySubFolder in $MonFolder)
{
	$PathFolderForCACLS = "`""+$PathToProcess+"\"+$MySubFolder.name+"`""

	$MyLine = "TAKEOWN /F $PathFolderForCACLS /a /r /d Y"	
	add-content $MonFichier $MyLine
	$MyLine = "iCACLS $PathFolderForCACLS /reset /T /C /Q"
	add-content $MonFichier $MyLine
	$MyLine = "iCACLS $PathFolderForCACLS /Grant `""+$MySubFolder.name+"`":(OI)(CI)F /C /Q"
	add-content $MonFichier $MyLine
	$MyLine = "iCACLS $PathFolderForCACLS /setowner `""+$MySubFolder.name+"`" /T /C /Q"
	add-content $MonFichier $MyLine

}
Lien vers le fichier : cliquez ici Copier le code

Le même script à placer à la racine du répertoire à traiter.
Une ligne commentée en REM permet d'ajouter un compte supplémentaire avec tous les droits.
Normalement ce n'est pas nécessaire si l'héritage est bien fait.

Clear-Host

$MyLine = [string]
$PathToProcess = [string]
$PathFolderForCACLS = [string]
$CheminFichier = [string]
$AdministratorLogin = [string]

$AdministratorLogin = "Administrators"

function Get-ScriptDirectory
{
	$Invocation = (Get-Variable MyInvocation -Scope 1).Value
	$ScriptFolderPath = Split-Path $Invocation.MyCommand.Path
	return $ScriptFolderPath
}

#$PathToProcess = "C:\Chemin à traiter"
$PathToProcess = Get-ScriptDirectory

$NomFichier = "BatReinitDroits.bat"
#$RepertoireFichier = "C:\Repertoire pour ecrire le BAT resultant"
$RepertoireFichier = Get-ScriptDirectory

$CheminFichier = "$RepertoireFichier\$NomFichier"

Write-Host $CheminFichier
$MonFichier = New-Item -type file $CheminFichier -Force

$MonFolder = Get-ChildItem -Path $PathToProcess | Where-Object {$_.PSIsContainer}
foreach ($MySubFolder in $MonFolder)
{
	$PathFolderForCACLS = "`""+$PathToProcess+"\"+$MySubFolder.name+"`""

	$MyLine = "TAKEOWN /F $PathFolderForCACLS /a /r /d Y"	
	add-content $MonFichier $MyLine
	$MyLine = "iCACLS $PathFolderForCACLS /reset /T /C /Q"
	add-content $MonFichier $MyLine
	$MyLine = "iCACLS $PathFolderForCACLS /Grant `""+$MySubFolder.name+"`":(OI)(CI)F /C /Q"
	add-content $MonFichier $MyLine
	$MyLine = "REM iCACLS $PathFolderForCACLS /Grant `""+$AdministratorLogin+"`":(OI)(CI)F /C /Q"
	add-content $MonFichier $MyLine
	$MyLine = "iCACLS $PathFolderForCACLS /setowner `""+$MySubFolder.name+"`" /T /C /Q"
	add-content $MonFichier $MyLine

}
Lien vers le fichier : cliquez ici Copier le code

Pages Web

Site WebDescription
ss64.comSite avec explication par exemple sur iCacls

2