1: #########################################################################################
2: # Fonction Repair-HomeDir #
3: ############################################################Edgarcia#09/16/2011#V2.0#007#
4:
5: #V2.0 Refonte complete de la fonction pour l'orienter migration via CSV
6:
7: Import-Module ActiveDirectory
8: Function global:Repair-Homedir
9: {
10: #Parametres de la commande :
11: param(
12: [parameter(Mandatory=$true,ValueFromPipeline=$true,HelpMessage="Indiquez le nom de la source")]$Name,
13: [parameter(Mandatory=$true,HelpMessage="Indiquez le type de source : OU, CSV, Group ou User")]$Source,
14: [parameter(Mandatory=$false,HelpMessage="Indiquez la lettre de lecteur de la HomeDirectory")]$HomeLetter,
15: [switch]$Right,
16: [switch]$Owner
17: )
18:
19: Process
20: {
21: Write-Host $Right $Owner
22: Switch ($Source) # Choix de la source
23: {
24: OU
25: {
26: Write-Host "Traitement de l'OU $Name"
27: $arrUser = (Get-ADUser -Filter * -SearchBase $Name -Properties HomeDirectory, SamAccountName)
28: if (-not $arrUser)
29: {
30: Write-Warning "Il n'y a pas d'utilisateur dans cette OU ou le chemin de l'OU est incorrect (attention à la casse)"
31: BREAK
32: }
33: foreach ($user in $arrUser)
34: {
35: repairhdir # Execution de la fonction de copie / suppression
36: }
37: }
38: Group
39: {
40: Write-Host "Traitement du groupe AD $Name"
41: try
42: {
43: $strGrp = (Get-ADGroup -Identity $Name -Properties members)
44: }
45: #Récupération de l'erreur en cas de groupe inexistant :
46: catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
47: {
48: Write-warning "Le Groupe $Name n'existe pas."
49: Break
50: }
51:
52: #Traitement des membres du groupe
53: Foreach ($strMember in $($strGrp.Members))
54: {
55: try
56: {
57: $User = (Get-ADUser -Filter {(DistinguishedName -eq $strMember) -and (ObjectClass -eq "user")} -Properties Name, DistinguishedName, HomeDirectory, SamAccountName, Description, MemberOf)
58: }
59: catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
60: {
61: }
62:
63: repairhdir # Execution de la fonction de copie / suppression
64: }
65: }
66: User
67: {
68: Write-Host "Traitement de l'utilisateur $Name"
69: try
70: {
71: $User = (Get-ADUser $Name -Properties HomeDirectory, SamAccountName)
72: }
73: #Récupération de l'erreur en cas d'utilisateur inexistant :
74: catch [Microsoft.ActiveDirectory.Management.ADIdentityNotFoundException]
75: {
76: Write-warning "L'utilisateur $Name n'existe pas."
77: Break
78: }
79: repairhdir # Execution de la fonction de copie / suppression
80: }
81: CSV
82: {
83: $Right = $true
84: $Owner = $true
85: if ((Test-Path $Name) -eq $false) # Test de la présence du CSV
86: {
87: Write-Warning "Le CSV : $Name n'est pas accessible ou n'existe pas"
88: BREAK
89: }
90:
91: try
92: {
93: #Import du CSV :
94: $arrCsv = (Import-Csv $Name -Delimiter ";")
95: }
96: #Récupération de l'erreur en cas de mauvais format CSV
97: Catch
98: {
99: Write-warning "Il y a un problème avec le fichier CSV, vérifiez son encodage et supprimez les colonnes vides en fin de ligne (du type ;;;;;)"
100: Break
101: }
102:
103: foreach ($Line in $arrCsv)
104: {
105: $User = (Get-ADUser $($Line.LDAPLogin) -Properties HomeDirectory, SamAccountName)
106: repairhdir # Execution de la fonction de copie / suppression
107: }
108: }
109: }
110: }
111: <#
112: .SYNOPSIS
113: Permet de réparer les HomeDirectory des utilisateurs AD et peut être exploité dans le cadre d'une migration de donnée grâce à l'utilisation du fichier CSV généré par Match-HomeDir.
114:
115: .DESCRIPTION
116: Repair-HomeDir est une fonction qui permet de réparer les droits de l'HomeDirectory d'un utilisateur. Il rend la propriete à l'utilisateur et lui ajoute le contrôle total. La fonction réparera les droits sur le dossier indiqué dans la variable HomeDir de son profil Active Directory.
117:
118: .PARAMETER Source
119: Parametre obligatoire. La source peut être :
120: - User : La fonction corrigera le Home de l'utilisateur spécifié dans -Name
121: - CSV : Permet d'utiliser le fichier CSV généré par la fonction Match-HomeDir. Repair-HomeDir utilise les champs FolderSource, qui contient le chemin complet du Home à migrer et LDAPLogin qui doit contenir le LDAP de l'utilisateur.
122: - Group : cela signifie que le script cherchera les utilisateurs dans un groupe AD à préciser dans -Name
123: - OU : La fonction cherchera les utilisateurs dans une Unité d'Organisation Active Directory et corrigera leurs HomeDirectory
124:
125: .PARAMETER Name
126: Parametre obligatoire. Indiquez le nom de la source, qui peut être un utilisateur (utilisez l'identifiant SamAccountName : edgarcia), un groupe d'utilisateur Active Directory, une Unité d'Organisation.
127: (il faut respecter scrupuleusement la casse) ou un fichier CSV généré par Match-HomeDir. En utilisant un CSV, Repair-HomeDir renommera également les HomeDir en utilisant le SamAccountName.
128:
129: .PARAMETER HomeLetter
130: Parametre facultatif qui n'est utile que dans le cadre d'une migration via CSV. Indique la lettre de lecteur qui sera attribuée à la HomeDirectory dans le profil AD de l'utilisateur.
131:
132: .PARAMETER Owner
133: Parametre facultatif. Corrige le proprietaire NTFS de la HomeDirectory. Implicite lorsque la source est un CSV.
134:
135: .PARAMETER Right
136: Parametre facultatif. Corrige les droits NTFS de la HomeDirectory. Implicite lorsque la source est un CSV.
137:
138: .INPUTS
139: None. You cannot pipe objects to Repair-HomeDir.ps1.
140:
141: .OUTPUTS
142: La sortie peut être redirigée.
143:
144: .EXAMPLE
145: C:\PS> Repair-HomeDir -Source User -Name edgarcia -Owner -Right
146: Cette commande reappliquera les droits de l'utilisateur edgarcia sur son HomeDir : contrôle total et proprietés.
147:
148: .EXAMPLE
149: C:\PS> Repair-HomeDir -Source Group -Name AD_Grp -Owner -Right
150: Cette commande reappliquera les droits de tous les utilisateurs se trouvant dans le groupe Active Directory AD_Grp.
151:
152: .EXAMPLE
153: C:\PS> Repair-HomeDir -Source OU -Name "OU=Users,DC=domaine,DC=local" -Owner
154: Cette commande reappliquera les droits de tous les utilisateurs se trouvant dans l'OU Active Directory Users.
155:
156: .EXAMPLE
157: C:\PS> Repair-HomeDir -Source CSV -Name c:\match.csv -HomeLetter N:
158: Cette commande lit le fichier CSV (obtenu avec Match-HomDir) et renomme, remet les droits et remet le proprietaire sur toutes les HomeDirectory présentes dans le CSV.
159:
160: .NOTES
161: Edouard Garcia, 21/06/2011
162: #>
163: }
164:
165: Function global:repairhdir
166: {
167: if ($Source -match "CSV")
168: {
169: $strOldNasPath = $($Line.DossierSource)
170: $position = $strOldNasPath.LastIndexOfAny("\")
171: $strNewNasPath = $strOldNasPath.SubString(0,$position)
172: $strNewNasPath += "\$($user.SamAccountName)"
173: if ($strOldNasPath -ne $strNewNasPath)
174: {
175: try
176: {
177: Rename-Item -Path $strOldNasPath -NewName $($User.SamAccountName) -Force
178: }
179: catch [System.Management.Automation.PSInvalidOperationException]
180: {
181: Write-Host "Le dossier source n'existe pas"
182: }
183:
184:
185: Write-Host "dossier identique"
186: }
187:
188:
189: $position = $strOldNasPath.LastIndexOfAny("\")
190: $strNewNasPath = $strOldNasPath.SubString(0,$position)
191: $strNewNasPath += "\$($user.SamAccountName)"
192: Set-Aduser -identity $User -Homedir $strNewNasPath -HomeDrive $HomeLetter
193: $User = (Get-ADUser $($Line.LDAPLogin) -Properties HomeDirectory, SamAccountName) # On recharge l'utilisateur avec ses nouvelles proprietes
194: }
195:
196: if ($User.HomeDirectory)
197: {
198: if ((Test-Path $($User.HomeDirectory)) -eq $true)
199: {
200:
201: if ($Owner)
202: {
203: Write-Host "Traitement du proprietaire $($User.Name) sur le dossier $($User.HomeDirectory)" -ForegroundColor Green
204: & C:\Windows\system32\icacls $($User.HomeDirectory) /setowner [DOMAINE]\$($user.SamAccountName) /T /C /Q
205: }
206:
207: if ($Right)
208: {
209: Write-Host "Traitement des droits de l'utilisateur $($User.Name) sur le dossier $($User.HomeDirectory)" -ForegroundColor Green
210: & C:\Windows\system32\icacls $($User.HomeDirectory) /grant [DOMAINE]\$($user.SamAccountName):`(OI`)`(CI`)F /T /C /Q
211: }
212:
213: }
214: Else
215: {
216: Write-Host "Le dossier HomeDir $($User.HomeDirectory) de l'utilisateur $($User.Name) n'existe pas" -ForegroundColor Red
217: }
218: }
219: Else
220: {
221: Write-Host "L'utilisateur $($User.Name) n'a pas de HomeDir" -ForegroundColor Red
222: }
223: }