以下の PowerShell 関数を Get-Content と一緒に使用すると、ファイルの内容、つまり Get-Content -Encoding Byte 'MyFile.bin' | Format-HexDump
の 16 進ダンプを見ることができます。222 KB のファイルをダンプするのに約 23 秒かかりますが、必要に応じて出力をテキストファイルにリダイレクトすることで、ダンプを簡単に調べることができます。
$encodingAutoCompleter = {
param($commandName, $parameterName, $wordToComplete, $commandAst, $fakeBoundParameters)
$availableEncodings = ([System.Text.Encoding]::GetEncodings() | Select Name, CodePage, DisplayName) + @( [PSCustomObject] @{ CodePage = '20127'; Name = 'ascii'; DisplayName = 'US-ASCII' }, [PSCustomObject] @{ CodePage = '1200'; Name = 'unicode'; DisplayName = 'Unicode' } )
$availableEncodings | ?{ $_.Name.StartsWith($wordToComplete) } | %{ New-Object System.Management.Automation.CompletionResult -ArgumentList $_.Name, $_.Name, 'ParameterValue', "$($_.DisplayName). Code Page $($_.CodePage)." }
}
function Format-BufferText([byte[]] $buffer, [System.Text.Encoding] $displayEncoding, [switch] $useControlPictures)
{
$bufferChars = $displayEncoding.GetChars($buffer);
$bufferText = (($bufferChars | %{ if ([char]::IsControl($_) -eq $true) { if ($useControlPictures -eq $false) { '.' } else { [char] ($_.ToInt16([cultureinfo]::InvariantCulture) + 0x2400) } } else { "$_" } }) -join "")
$bufferText
}
<#
.Synopsis
Displays binary data as a hexadecimal dump.
.Description
Displays binary data as a hexadecimal dump. Options are available to suppress displaying text and to display control characters
as Unicode Control Pictures instead of dots.
.Parameter Bytes
The bytes to be displayed.
.Parameter Encoding
The name of the text encoding to use. The default is ascii.
.Parameter NoTextDisplay
If specified the text display sidebar will be suppressed; otherwise, the display text sidebar will be present.
.Parameter UseControlPictures
If specified control characters will be displayed as Unicode Control pictures; otherwise, dots are used to represent control
characters.
.Example
Format-HexDump -Encoding unicode $bytes
.Example
Get-Content -Encoding Byte 'MyFile.bin' | Format-HexDump -Encoding unicode
.Example
0..255 | Format-HexDump -NoTextDisplay
#>
function Format-HexDump
{
[CmdletBinding()]
param
(
[Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)]
[byte[]] $Bytes,
[ValidateScript({ if (([System.Text.Encoding]::GetEncodings().Name + @('unicode', 'ascii')) -icontains $_) { return $true } else { Throw "Encoding must be one of the following: $([System.Text.Encoding]::GetEncodings().Name -join ', '), unicode, or ascii." } })]
[Parameter(ValueFromPipeline = $false)]
[string] $Encoding = "ASCII",
[Parameter()]
[switch] $NoTextDisplay,
[Parameter()]
[switch] $UseControlPictures
)
BEGIN
{
$displayEncoding = [System.Text.Encoding]::GetEncoding($Encoding)
$counter = 0
$hexRow = ""
[byte[]] $buffer = @()
}
PROCESS
{
foreach ($byte in $Bytes)
{
$buffer += $byte
$hexValue = $byte.ToString("X2")
if ($counter % 16 -eq 0)
{
$buffer = @($byte)
$hexRow = "$($counter.ToString("X8")): $($hexValue) "
}
elseif ($counter % 16 -eq 15)
{
if ($NoTextDisplay -eq $true)
{
$hexRow += "$($hexValue)"
$hexRow
}
else
{
$bufferText = Format-BufferText $buffer $displayEncoding $UseControlPictures
$hexRow += "$($hexValue) $($bufferText)"
$hexRow
}
}
else
{
$hexRow += "$($hexValue) "
}
$counter++
}
}
END
{
$counter--
if ($counter % 16 -ne 15)
{
$hexRow += " " * (((16 - $counter % 16) * 3) - 1)
if ($NoTextDisplay -eq $false)
{
$bufferText = Format-BufferText $buffer $displayEncoding $UseControlPictures
$hexRow += "$($bufferText)"
}
$hexRow
}
}
}
Register-ArgumentCompleter -CommandName Format-HexDump -ParameterName Encoding -ScriptBlock $encodingAutoCompleter
出力は以下のようになります。
00000000: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ................
00000010: 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F ................
00000020: 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F !"#$%&'()*+,-./
00000030: 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 0123456789:;<=>?
00000040: 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F @ABCDEFGHIJKLMNO
00000050: 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F PQRSTUVWXYZ[\]^_
00000060: 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F `abcdefghijklmno
00000070: 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F pqrstuvwxyz{|}~.
00000080: 80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F ????????????????
00000090: 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 9E 9F ????????????????
000000A0: A0 A1 A2 A3 A4 A5 A6 A7 A8 A9 AA AB AC AD AE AF ????????????????
000000B0: B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 BA BB BC BD BE BF ????????????????
000000C0: C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF ????????????????
000000D0: D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB DC DD DE DF ????????????????
000000E0: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 EA EB EC ED EE EF ????????????????
000000F0: F0 F1 F2 F3 F4 F5 F6 F7 F8 F9 FA FB FC FD FE FF ????????????????