====== Home-Pfade angleichen ====== ===== Ausgangssituation ===== Die Home-Verzeichnisse der drei Benutzer wurden bisher in drei Varianten in der AD angelegt: - \\Servername\Freigabename1\Verzeichnisname - \\Servername\Freigabename2\Verzeichnisname - \\Servername\Verzeichnisname$ Da die Homeverzeichnisse auf ein neues DFS mit dem Pfad "\\Domäne\Userdata\Verzeichnisname" migriert werden sollen, müssen alle Pfade gleichermaßen angepasst werden. ===== Script ===== #Lege Alle Benutzer mit ihren derzeitigen Pfaden in ein Array $Users ab: $Users = Get-ADUser -Filter {homeDirectory -like "*Servername*"} -Properties homeDirectory #Rufe alle Freigabenamen auf dem Server ab $RemoteShares = Get-WMIObject win32_share -ComputerName "Servername" ForEach ($User in $Users) { #Zerteile de Freigabepfad des Benutzers am \ und lege die Einzelergebnisse in ein Array $Path #Bei dem Freigabepfad '\\Servername\Freigabe1\Verzeichnisname' sieht das Ergebnis so aus: #$Path[0] = "" #$Path[1] = "" #$Path[2] = "Servername" #$Path[3] = "Freigabe1" #$Path[4] = "Verzeichnisname" $Path = $User.homeDirectory.Split('\') #Speichere die Anzahl der Elemente von $Path in $ItemCount und reduzieren $Itemcount um 1 $ItemCount = $Path.Count $ItemCount -= 1; #Besorge die den Freigabenamen und lege ihn in $Share ab $Share = $path[3] #Wenn $Share = "Freigabe1" oder gleich "Freigabe2" ist, fahre mit TRUE fort: if ($Share -eq "Freigabe1" -or $Share -eq "Freigabe2") { #Setze $newHomeDirectoryPath auf den neuen Pfad in "\\Domäne\Userdata\" $newHomeDirectoryPath = "\\Domäne\Userdata\" + $Path[$ItemCount] } else { #Der Else-Fall tritt nur dann auf, wenn der User bisher über eine versteckte Freigabe angesprochen wurde. #In diesem Fall muss die Freigabe aus den vorhandenen Freigaben rausgesucht werden, damit wir über diesen #Umweg an den Verzeichnisnamen kommen. Wird keine passende Freigabe gesucht, wird ein leerer String zurück- #gegeben, so dass bei einem folgenden Set-ADUser der ungültige Home-Pfad gelöscht würde: #Lege $newHomeDirectoryPath auf LEER: $newHomeDirectoryPath = "" #Durchsuche alle Freigabeverzeichnisse von "Servername" nach dem im Homepfad angegebenen $Share = $RemoteShares | Where-Object {$_.Name -eq $path[3]} #Wenn wirklich ein Share gefunden wurde, fahre mit TRUE fort: if ($Share -ne $NULL) { $Path = $Share.Path.Split('\') $ItemCount = $Path.Count $ItemCount -= 1 $newHomeDirectoryPath = "\\Domäne\Userdata\" + $Path[$ItemCount] } } #Setzt den neu definierten Pfad als Homedirectory fest. Set-ADUser -Identity $User -HomeDirectory $newHomeDirectoryPath } {{tag>[AD Powershell]}}