syg_hira's tech memo

windows server関連のTipsのおぼえがき

Optimize(compact) VHD with PowerShell 3.0(修正版)

Windows Server 2012でHyper-V3.0環境を稼働中。
ディスク容量が足りなくなってきたので、VHDの最適化を行う。
PreCompact.exeにパスを通してある環境で、下記のようなスクリプトを実行

Mount-VHD -Path <VHD File Path>
Get-Partition | Where-Object { $_.diskid -like "*VIRTUAL_DISK*" -and $_.Driveletter} | ForEach-Object { Optimize-Volume $_.DriveLetter | Precompact.exe -SetDisks:<DriveLetter>}
Dismount-VHD -Path <VHD File Path>
Optimize-VHD -Path <VHD File Path>

最適化前のdefragとPrecompactが必要かどうかはよくわからないのですが、何もしないVHDをOptimizeしても、サイズはほとんど変化なし。
Precompactが不要なら、PowerShell3.0だけで実装できるので、あとで確認してみたいと思う。