A: A Virtual Hard Disk (VHD) or VHDX file can be shrunk to reduce its size (or possible size, if dynamic) by using the Resize-VHD cmdlet.
However, you might hit a problem where the VHD can't be shrunk by as much as expected, even though in the case of a dynamic VHD, the actual physical size of the VHD on disk is far less than the size you are trying to resize to.
The important part isn't the VHD's size on disk but rather the size of volumes that have been created inside the VHD. You can't shrink a VHD size below the size of created volumes. This can be seen with the Get-VHD command:
PS D:\> get-vhd d:\temp\temp2tb.vhdx
Which returns the output below:
Path : D:\temp\temp2tb.vhdx
VhdFormat : VHDX
VhdType : Dynamic
Size : 2199023255552
MinimumSize : 220023767552
LogicalSectorSize : 512
PhysicalSectorSize : 4096
BlockSize : 33554432
Alignment : 1
Attached : True
DiskNumber : 7
Number : 7
The MinimumSize value shows the smallest size the VHD can be shrunk to. In this case, the size is 200GB because I have a 200GB volume created inside the VHD. If I shrink the size of the volume inside the VHD file (or remove it) that would reduce the size I can shrink the VHD to.