Backup Windows user's profile
Your code looks pretty good to me. A few notes:



You have a bug here:

$userID=$env:UserName

$SourceRoot      = "C:\Users\$User"


You are referring to $User, which hasn't been set. I always put this at the top of my scripts to catch such bugs:

Set-StrictMode -Version Latest


Why introduce a new variable, by the way? Why not just use it directly?:

$SourceRoot      = "C:\Users\$env:UserName"




This line can be simplified for the sake of readability:

$Source      = Join-Path -Path $SourceRoot -ChildPath $Folder


To this:

$Source      = Join-Path $SourceRoot $Folder




This code would be cleaner using the pipeline:

$mappedDrives = @()

foreach ($drive in $drives) {
    if ($drive.DisplayRoot) {
        $mappedDrives += Select-Object Name,DisplayRoot -InputObject $drive
    }
}


Like this:

$mappedDrives = $drives | ? $drive.DisplayRoot | Select-Object Name, DisplayRoot


(Not tested because I don't have any mapped drives, but I believe it is correct.)

You can format it like this if you like:

$mappedDrives = $drives |
    ? $drive.DisplayRoot | 
    Select-Object Name, DisplayRoot




This comment is misleading:

#####################################
###  Backup user's mapped drives  ###
#####################################


You aren't backing up the drives. You are recording the drive mappings.