Get-Contentと共に以下のPowerShell関数を使用して、ファイルコンテンツのhexdumpを表示できますGet-Content -Encoding Byte 'MyFile.bin' | Format-HexDump
。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 ????????????????