CAD日記

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

ソフト開発

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

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

Hyper-Vのvhdxを圧縮するのはPowerShellでやるんだけど、その自動化手法がおもしろいじゃんの続き。以下2点の改修をしたスクリプトを作ってみた。
・vhdファイルが存在しなければ、エラーを出して終了
・圧縮前と後で、vhdのファイルサイズがどれだけ減ったかを比率で出す

手順と経過は以下の通り。
1.compvhdに必要なファイルをダウンロードして解凍
2.解凍結果のcompvhd.ps1を編集
 2行目の「vhd(x)ファイル名フルパス」を実際のvhdファイルのフルパスに書き換えて保存
3.解凍結果のcompvhd.batを管理者として実行 ※ダブルクリックして実行すると権限エラーになる
4.2で指定したファイルが存在しなければ圧縮失敗で終了
5.圧縮に成功すれば、圧縮前後のファイルサイズと比率を表示して終了

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

#vhd(x)ファイル名フルパス 例)C:\work\test.vhdx
$targetvhd = "vhd(x)ファイル名フルパス"

#必要な定義
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 = $size1 / $size2 * 100
$msg3 = &quot;比率:{0} %&quot; -f $h.ToString(&quot;0.00&quot;)
[System.Windows.Forms.MessageBox]::Show($msg1 + $k + $msg2 + $k + $msg3, &quot;圧縮成功&quot;)

PowerShellっておもしろい。DOSコマンドラインの流れを汲んでいるかと思いきや、立派なプログラム言語だった。イコール演算子が=や==ではなくて-eqというのがおもしろい。TrueとFalseは、$TRUEおよび$FALSEと書かなければならない。

本当はもう一つやりたかったんだけど、やり方がわからず断念。上記手順の2でvhdのファイルパスを自分で書き変えなきゃいけないのが難点だから、ps1と同じ場所にあるvhdまたはvhdxを探して、1つだけだったら無条件に圧縮実行。2つ以上あったら、そのリストを出してどれを圧縮するか指定させる。。なんて感じ。第3弾でやってみましょ。

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

-ソフト開発

執筆者:


comment

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

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

関連記事

no image

プロパティシート

ソフト開発の話です。 私はVC6でソフトを作ってます。 ダイアログボックスの作りこみは、おもしろいものです。 プログラマーにとっては、デザイン的センスを問われる分野ですかね。 プロパティシートとは、ペ …

特定サーバーにアクセスするためのIDと一致するものだけを許容するプログラムをつくるには(1)

Windowsで動作させるC#のプログラムの話で、特定サーバーにアクセスするためのIDと一致するものだけを許容するプログラムを作ろうとしていて、なかなか難航したのでその記録を残しておく。ようするに、I …

PDFアレコレで画面の拡大・縮小・移動ができるようにした

PDFアレコレをバージョンアップ。約4か月ぶり。 Ver3.05 2021/6/20 ・PDFの描画位置を左右上下にセンタリングするようにした(以前は左上)。 ・Ctrl+マウスホイール上下操作によっ …

no image

いたちごっこ3

開発者の考えた対策は空しく敗れ、3度目の戦いが始まるところから話は始まります。 ●3度目のクラック 開発者の考えたトラップに、クラッカーは見事に”はまって”くれました。でも、依 …

PDFアレコレはiTextSharp7も組み込むことにする

PDFiumViewerを使ってPDFアレコレという名のフリーソフトを作ってみたわけだが、PDFiumViewerの限界が見えてきた。