Here’s how to convert a bunch of VHD files in a directory to VHDX. The actual conversion process uses the Convert-VHD cmdlet so you need to be on Windows 8 or Windows Server 2012.
1 |
PS> Get-Item *.vhd | %{ $vhd = $_.Name; $vhdx = $_.Name.Replace("vhd","vhdx"); Convert-VHD "$vhd" "C:\Hyper-V\Virtual Hard Disks$vhdx" } |
I am storing all the VHDX files at “C:\Hyper-V\Virtual Hard Disks” which is why I put the path there. If you’d rather put the VHDX files in the same location as the VHD files use the following instead:
1 |
PS> Get-Item *.vhd | %{ $vhd = "$_"; $vhdx = $vhd.Replace("vhd","vhdx"); Convert-VHD "$vhd" "$vhdx" } |
Note to self: If you convert the objects returned by Get-Item
to string (by doing $_
) you get the file name with the full path (this is equivalent to $_.FullName
). If you want just the file name, use $_.Name
. If you want the file name only, without the extension, use $_.BaseName
; and if you want the extension only but not the file name use $_.Extension
.