CAD日記

主にAutoCADのことについて書いているけど、近頃は投資系ネタに注力している。自動売買、仮想通貨、PC関係、プログラミングなど。@caddiary

ソフト開発

Hyper-Vのvhdxを圧縮するのはPowerShellでやるんだけど、その自動化手法がおもしろいじゃん(3)

投稿日:2020年3月8日 更新日:

vhdを手軽に圧縮できるPowerShellプログラムの決定版。
まずは、前回考えたことを振り返る。。
ps1内のvhdのファイルパスを自分で書き変えなきゃいけないのが難点だから、ps1と同じ場所にあるvhdまたはvhdxを探して、1つだけだったら無条件に圧縮実行。2つ以上あったら、そのリストを出してどれを圧縮するか指定させる。。なんて考えたことの決定的な解決策が出てきたので、第3弾として記事を書く。おそらくこれがこのシリーズの最終回になるだろう。

手順と経過は以下の通り。
1.compvhdに必要なファイルをダウンロードして解凍
2.解凍結果のcompvhd.batを管理者として実行 ※ダブルクリックして実行すると権限エラーになる
3.ファイル選択が出るので、ターゲットのvhdファイルを選択する
 指定したファイルが存在しなければ圧縮失敗で終了。自分で選択しているファイルなんだから、存在しないわけないけど。。
4.圧縮に成功すれば、圧縮前後のファイルサイズと比率を表示して終了

PowerShellはCUIだと思い込んでいたから、上で書いたようにメンドウな手順を考えた。しかし、前回ダイアログボックスを出せることがわかっていたので、ファイル選択出せばいいじゃんと思い至った。PowerShellはGUIを使えるってことが発見だ。
ググればこんな記事がすぐに見つかる。便利な世の中ですなぁ。
PowerShell でファイル選択ダイアログを利用する

ps1の中身を以下に転記しておく。

[void][System.Reflection.Assembly]::LoadWithPartialName("System.windows.forms")

#ファイル選択でvhdまたはvhdxファイルを選ばせる
$dialog = New-Object System.Windows.Forms.OpenFileDialog
$dialog.Filter = "仮想ディスクファイル(*.vhd;*.vhdx)|*.vhd;*.vhdx"
$dialog.InitialDirectory = "C:\"
$dialog.Title = "仮想ディスクファイルを選択してください"
if($dialog.ShowDialog() -ne [System.Windows.Forms.DialogResult]::OK){
    exit
}
$targetvhd = $dialog.FileName

#必要な定義
Add-Type -Assembly System.Windows.Forms  #メッセージ表示に必要な宣言
$k = &quot;<code>r</code>n&quot;  #改行コード

#ファイル存在チェック
If((Test-Path $targetvhd) -ne $TRUE)
{
    [System.Windows.Forms.MessageBox]::Show(&quot;ファイルが見つかりません。&quot; + $k + $targetvhd, &quot;圧縮失敗&quot;)
    exit
}
#圧縮実行
$size1 = (Get-ChildItem $targetvhd).Length  #圧縮前のファイルサイズ
Mount-VHD $targetvhd -Readonly
Optimize-VHD $targetvhd -Mode Quick
Optimize-VHD $targetvhd -Mode Quick
Dismount-VHD $targetvhd
$size2 = (Get-ChildItem $targetvhd).Length  #圧縮後のファイルサイズ

#メッセージ表示
$msg1 = &quot;圧縮前:{0} byte&quot; -f $size1
$msg2 = &quot;圧縮後:{0} byte&quot; -f $size2
$h = $size2 / $size1 * 100
$msg3 = &quot;比率:{0} %&quot; -f $h.ToString(&quot;0.00&quot;)
[System.Windows.Forms.MessageBox]::Show($msg1 + $k + $msg2 + $k + $msg3, &quot;圧縮成功&quot;)

関係記事はこちら。
Hyper-Vのvhdxを圧縮するのはPowerShellでやるんだけど、その自動化手法がおもしろいじゃん(1)
Hyper-Vのvhdxを圧縮するのはPowerShellでやるんだけど、その自動化手法がおもしろいじゃん(2)

-ソフト開発

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

関連記事

no image

フォルダ監視

フォルダを常時監視しておいて、ファイルが放り込まれたら、 自動的にファイル変換してくれたらよいね。 なんていう話があった。 一週間という短い間に、対象ソフトは別で2件あった。 こいつぁ、なんとかせにゃ …

ソフトウェアの品質管理とは何か?

今日も酒なしで退屈なんで、今日仕事をしていた中で印象深かったテーマでたらたらと文章を書いてみよう。 年に一度のバージョンアップ版リリースに向けて品質確認レビューなるものを3月の1カ月間ほどやっている。 …

電子印鑑のつくり方

PDFアレコレで捺印ができるようにしたわけだけど、PDFアレコレで印鑑を作ることはできない。別途つくったpdfまたはpngをnatsuinフォルダに入れておけば、捺印時にそいつらが指定可能になる。 電 …

本質的にPDFに捺印できるようにしたPDFアレコレを公開

先週に引き続き今週もPDFアレコレをバージョンアップ。変更点は以下の通り。 Ver2.02 2020/3/21 ・捺印時に画面でクリックしたところに配置できるようにした。(Ver2.01は固定値) 詳 …

no image

レイヤ付きPDFを出力する弊害

Illustratorという高価なアプリを使ってPDFを出力すると、PDFにレイヤが付いてしまって非表示にしたはずのレイヤが表示されて困ったなという事象に2回遭遇したので以下に記録。共通しているのが、 …