Powershellでファイルダンプコマンドを作る(その1)

Windowsには、certutilコマンドもありますが、PowerShellで作ります。
ダンプする対象の簡単なバイナリ作成。

C:\Users\takk\tmp>echo 123>a.bin

C:\Users\takk\tmp>

少しずつ作っていきます。Get-Contentでダンプ。

C:\Users\takk\tmp>powershell "gc -encoding byte a.bin"
49
50
51
13
10

C:\Users\takk\tmp>

10進数ではなく、16進数でダンプします。

C:\Users\takk\tmp>powershell "gc -encoding byte a.bin | % { '{0:x2}' -f $_ }"
31
32
33
0d
0a

C:\Users\takk\tmp>

毎回Powershellコマンドを打つのも面倒なので、powershellしてから、変数$aに16進に変換した値を格納。

C:\Users\takk\tmp> powershell
PS C:\Users\takk\tmp> $a=(gc -encoding byte a.bin | % {'{0:x2}' -f $_})
PS C:\Users\takk\tmp> $a
31
32
33
0d
0a
PS C:\Users\takk\tmp>

16進数に変換した値は配列に格納されているので、一行に表示したい列数分、joinで結合して表示。まずは2列毎の表示で確認してみます。

PS C:\Users\takk\tmp> for($i=0;$i -le 5; $i+=2){
>> $b=$a[$i..($i+1)]
>> $b -join " "
>> }
>>
31 32
33 0d
0a
PS C:\Users\takk\tmp>

この方法で良さそうです。あとは2を16に変えて、ちょこちょこいじっていきます。

続く

コメント

タイトルとURLをコピーしました