如何在不更改编码的情况下将命令的输出传输到文件?

Mic*_*ann 4 powershell encoding pipeline pipe

我想将命令的输出通过管道传输到文件:

PS C:\Temp> create-png > binary.png
Run Code Online (Sandbox Code Playgroud)

我注意到 Powershell 更改了编码,并且我可以手动给出编码:

PS C:\Temp> create-png | Out-File "binary.png" -Encoding OEM
Run Code Online (Sandbox Code Playgroud)

然而,没有 RAW 编码选项,即使 OEM 选项也会将换行字节 ( 0xAresp 0xD) 更改为 Windows 换行字节序列 ( 0xD 0xA),从而破坏任何二进制格式。

如何防止 Powershell 在管道传输到文件时更改编码?

相关问题

Ric*_*ckH 5

尝试使用设置内容:

create-png | set-content -path myfile.png -encoding byte
Run Code Online (Sandbox Code Playgroud)

如果您需要有关设置内容的更多信息,只需运行

get-help set-content
Run Code Online (Sandbox Code Playgroud)

您还可以使用“sc”作为设置内容的快捷方式。

使用以下内容进行测试,生成可读的 PNG:

function create-png()
{
    [System.Drawing.Bitmap] $bitmap = new-object 'System.Drawing.Bitmap'([Int32]32,[Int32]32);
    $graphics = [System.Drawing.Graphics]::FromImage($bitmap);
    $graphics.DrawString("TEST",[System.Drawing.SystemFonts]::DefaultFont,[System.Drawing.SystemBrushes]::ActiveCaption,0,0);
    $converter = new-object 'System.Drawing.ImageConverter';
    return([byte[]]($converter.ConvertTo($bitmap, [byte[]])));
}

create-png | set-content -Path 'fromsc.png' -Encoding Byte
Run Code Online (Sandbox Code Playgroud)

如果您正在调用 ipconfig 等非 PowerShell 可执行文件,并且只想从标准输出捕获字节,请尝试 Start-Process:

Start-Process -NoNewWindow -FilePath 'ipconfig' -RedirectStandardOutput 'output.dat'
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

2774 次

最近记录:

2 年,6 月 前