如何在PowerShell中使用管道传输二进制数据

11

我尝试在PowerShell和PowerShell ISE(5.1.1版本)中通过mmcat.exe提取主引导记录(MBR)。输出的二进制数据总是大于512个字节。PowerShell 6.1.1仍然存在这个问题。

$mmcat = "C:\Tools\sleuthkit\bin\mmcat.exe"
& $mmcat -t dos "$EWF_IMAGE" 0 > "$OUTPUT\Disk-Geometry\MBR.bin"

这里很好地描述了问题:PowerShell的对象管道破坏了管道二进制数据 你知道有什么解决方法吗?

尝试添加“-NoNewLine”。 - Lieven Keersmaekers
我曾经尝试过使用-NoNewLine和-Encoding ascii & -Encoding oem等选项...当输出达到512字节时...例如MBR签名(55 AA)在结尾处是错误的。 - user3022917
刚刚检查了我的MBR,发现它以55 AA结尾,所以我认为那是一个“通用”的标记?我没有mmcat,但如果你只在控制台中显示结果,输出是什么? - Lieven Keersmaekers
您可以在此处下载mmcat.exe:https://github.com/sleuthkit/sleuthkit/releases/download/sleuthkit-4.6.4/sleuthkit-4.6.4-win32.zip - user3022917
这个Get-ProcessOutputAsBinary对你也应该适用,但可惜它似乎不能直接使用。 - Lieven Keersmaekers
显示剩余6条评论
2个回答

4

PowerShell 7 支持使用 -AsByteStream 命令将二进制数据传输:

Get-Content -AsByteStream .\original.bin | Set-Content -AsByteStream .\copied-file.bin

如果您想将二进制文件连接起来,请使用Add-Content命令:
Get-Content -AsByteStream .\original.bin | Add-Content -AsByteStream .\appended-file.bin

PS 5有get-content -encoding byte。 - js2010
@js2010 未来的PowerShell版本将不再支持-Encoding Byte,而是由-AsByteStream取代。 - dns

2

在 PowerShell 中无法使用管道传输二进制数据。为了解决这个问题,可以像下面这样使用 cmd.exe

$command = "C:\Tools\sleuthkit\bin\mmcat.exe -t dos `"$EWF_IMAGE`" 0 > `"$OUTPUT\Disk-Geometry\MBR.bin`""
cmd /c $command

您可以像这样读取二进制数据:

[byte[]]$mbr = Get-Content -Path $OUTPUT\Disk-Geometry\MBR.bin -Encoding Byte

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接