Bulk Migrate User Home Directory in Active Directory

This summer I'm decommissioning an old file server that is no longer under warranty, and we have plans for it along with the iSCSI SAN it's connected to. Slight problem though - even though I've configured our user shares to replicate around using DFS, for years the user creation script that was used for creating accounts hard coded the user home directory to this file server. With thousands of accounts - I'm not about to go and do all this by hand.

Enter Quest ActiveRoles Management Shell (free). Sure I could have used other tools - but I've got this one and I like it. Anyway, here's the script I wrote to do this. Note:  It is likely not perfect, maybe not the most efficient way to handle this (definitely a bit slow), but it works and was ran against a few thousand user accounts. [sourcecode language="powershell"] # # UserHomeDirMigration.ps1 # User migration script to move a user's home directory # from old file server to DFS Users share #

# Add Snap-Ins Add-PSSnapin Quest.ActiveRoles.ADManagement

# Set the working OU set-variable -name OU -value "OU_Users_Are_In"

# Pause on error function Failure { Write-Host "Press any key to continue ..." $x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown") }

Get-QADUser -SearchRoot $OU | Foreach-Object{ $user = Get-QADUser -Identity $_ \(user | select LogonName #\)user | select HomeDirectory \(nullTest = \(user.HomeDirectory # Check for an empty drive if (\)nullTest) { # Validate if user drive is old file server if (\)user.HomeDirectory.ToLower().Contains("OLDSERVER")) { #Write-Host -ForegroundColor GREEN "TRUE - OLDSERVER" #Write-Host -ForegroundColor YELLOW $user.HomeDirectory $finalHome = $user.HomeDirectory.ToLower().Replace("OLDSERVER", "NEWSERVER") #Write-Host -ForegroundColor YELLOW $finalHome Set-QADUser -Identity $_ -HomeDirectory \(finalHome # User drive is something other than old server } elseif (\)user.HomeDirectory.Contains("NEWSERVER")) { Write-Host -ForegroundColor GREEN "Already Changed to NEWSERVER" Failure } else { Write-Host -ForegroundColor RED "Unknown Value ---- ", $user.HomeDirectory Failure } } else { # User drive is empty Write-Host -ForegroundColor RED "Unknown Value - Likely Null" Failure } # A couple extra spaces in between users Write-Host Write-Host } [/sourcecode]