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

Gregory Strike

Husband, father, IT dude & blogger wrapped up into one good looking package.