您可以将以下PowerShell函数与Get-Content一起使用,以查看文件内容的十六进制转储,即 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 ????????????????