How to pipe the output of a command to a file without powershell changing the encoding?

后端 未结 3 629
面向向阳花
面向向阳花 2021-01-20 02:50

I want to pipe the output of a command to a file:

PS C:\\Temp> create-png > binary.png

I noticed that Powershell changes the encoding

3条回答
  •  無奈伤痛
    2021-01-20 03:16

    Try using set-content:

    create-png | set-content -path myfile.png -encoding byte
    

    If you need additional info on set-content just run

    get-help set-content
    

    You can also use 'sc' as a shortcut for set-content.

    Tested with the following, produces a readable 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
    

    If you are calling out to a non-PowerShell executable like ipconfig and you just want to capture the bytes from Standard Output, try Start-Process:

    Start-Process -NoNewWindow -FilePath 'ipconfig' -RedirectStandardOutput 'output.dat'
    

提交回复
热议问题