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

C言語

遡ること10数年、初めて学んだコンピュータ言語がC言語でした。以来、ずっとやってます。机の上には本が一冊。 「実習C言語」(アスキー・ラーニングシステム) この本の画像を探してみましたが、古いだけにみ …

zipcopyが設計上まちがっていることを書いたがホントにそうかを調べてみた

以下にzipcopy Ver1.07開発中に気付いたことを転記する。 いろいろ直していて気付いたんだけど、そもそものところでこのソフトの設計思想があやまっていた。 ネットワーク上のサーバーにあるファイ …

no image

random

JavaScriptと格闘してみたよ。 テーマはランダム。 10個の画像の中から、任意の3個の画像をWebサイトに表示する、 ってのが要求仕様。 Math.floor(Math.random() * …

no image

CADツール第2弾

 PMツールに続いてのCADツール第2弾を思いつきました。今まで、いくつかの企画があり、手をつけたものもあるのですが、いまいち乗り気にならなくてポシャってました。シリーズものとして継続したいところなの …

no image

イテレータ(Iterator)

あるコンポーネントで初めて出会いました。コンポーネントがバージョンアップされたときに、オブジェクト指向的な作りに一新されて、いろいろ変わったのですが中でもイテレータという訳の分からないものに遭遇して、 …