I wrote this PowerShell function to change drive letters with PowerShell and DiskPart. Other methods posted online utilize the Win32_Volume WMI class which is not available in Windows XP. Using DiskPart makes the function compatible with Windows XP/2003 as well as Vista/2008/7.
Also, note the method used to detect whether or not a drive exists. I use this method vs. Test-Path as Test-Path can return (what I consider) False-Falses. If you run Test-Path on a CD-ROM or other drive letter without any media, it will return False even though the drive letter itself is in use.
function ChangeDriveLetter($Current, $New){
$CurrentDrive = New-Object System.IO.DriveInfo($Current)
$NewDrive = New-Object System.IO.DriveInfo($New)
if (($CurrentDrive.DriveType -ne "NoRootDirectory") -and ($NewDrive.DriveType -eq "NoRootDirectory")){
Write-Host("Changing drive letter from " + $Current + " to " + $New + "...")
"select volume " + $Current + [char]13 + [char]10 + "assign letter " + $New | diskpart > $Null
Return $True
} else {
Write-Error("Can not change drive letter. Either " + $Current + ":\ doesn't exist or " + $New + ":\ already exists.")
Return $False
}
}