Powershell Format Hex如何截断右侧的解码文本列



嗨,我正在尝试使用powershell命令Format Hex,它运行良好。在普通的十六进制编辑器中,可以选择隐藏和不包括右侧的解码文本字符。

我不知道如何在powershell中使用Format Hex只显示:

00000030   1A 00 00 00 00 00 00 00 68 74 74 70 3A 2F 2F 66 

有没有一个参数可以对PS C:\Users\YourName\Desktop>格式化十六进制文件.dll而不是下面的?我只是确认在使用Format Hex命令时是否存在任何这样的参数或cli工具,而不是寻找截断或文件解析解决方案。

00000030   1A 00 00 00 00 00 00 00 68 74 74 70 3A 2F 2F 66  ........http://f
00000040   72 61 6E 6B 69 65 2E 70 68 6F 74 6F 00 00 FF ED  rankie.photo...í
00000050   00 C2 50 68 6F 74 6F 73 68 6F 70 20 33 2E 30 00  .APhotoshop 3.0.
00000060   38 42 49 4D 04 04 00 00 00 00 00 A6 1C 02 28 00  8BIM.......▌..(.
00000070   62 46 42 4D 44 30 31 30 30 30 61 66 63 30 64 30  bFBMD01000afc0d0

我阅读了关于格式化十六进制的帮助

Format-Hex没有参数,该参数将从其输出中省略最后一列。

如果您在macOS或Linux上运行,您可以使用那里提供的标准实用程序,如hexdump

然而,以牺牲性能为代价,您可以围绕Format-Hex:编写一个简单的包装器函数

function Format-HexBare {
Format-Hex @args | 
Out-String -Stream | 
ForEach-Object `
-Begin { $maxLen = if ($IsCoreCLR) { 64 } else { 58 } } `
-Process {
$line = $_
try { $line.Substring(0, $maxLen) } catch { $line }
}
}

注意:PowerShell版本特定的最大行长度(不包括最后一列(是上面的硬编码,原因如下:

  • 一个健壮的正则表达式解决方案将是一个挑战。

  • .Substring()解决方案还消除了不需要的列(仅在PowerShell(Core(7+中显示(的标头

虽然不能保证输出格式不会随着时间的推移而改变,但[1]在这种情况下不太可能。尽管如此,如果发生这种情况,该功能很容易适应。


[1]显示格式的细节(仅适用于人类观察者(不属于PowerShell关于向后兼容性的公共合同的一部分

最新更新