在PowerShell中将字节本地写入文件

时间:2015-08-06 12:24:48

标签: powershell

我有一个用于测试API的脚本,该API返回base64编码的图像。我目前的解决方案就是这个。

$e = (curl.exe -H "Content-Type: multipart/form-data" -F "image=@clear.png" localhost:5000)
$decoded = [System.Convert]::FromBase64CharArray($e, 0, $e.Length)
[io.file]::WriteAllBytes('out.png', $decoded) # <--- line in question

Get-Content('out.png') | Format-Hex

这有效,但我希望能够在PowerShell中本地编写字节数组,而无需从[io.file]中获取。

我的尝试在PowerShell中编写$ decode所有这些都导致编写整数字节值的字符串编码列表。 (例如)

42
125
230
12
34
...

你如何正确地做到这一点?

3 个答案:

答案 0 :(得分:19)

Set-Content cmdlet(现在?)允许您使用Byte编码将原始字节写入文件:

$decoded = [System.Convert]::FromBase64CharArray($e, 0, $e.Length)
$decoded | Set-Content out.png -Encoding Byte

答案 1 :(得分:9)

运行C#程序集是PowerShell的原生程序,因此您已经在“本机”中将字节写入文件。

如果你坚持,你可以使用类似set-content test.jpg -value (([char[]]$decoded) -join "")的结构,这有一个缺点,即在书面数据的末尾添加#13#10。使用JPEG,它是可以忍受的,但其他文件可能会因此更改而损坏。因此,请坚持使用.NET的字节优化例程,而不是搜索“本机”方法 - 这些已经是原生的。

答案 2 :(得分:1)

Powershell Core(v6及更高版本)不再具有-Encoding byte作为选项,因此您需要使用-AsByteStream,例如:

Set-Content -Path C:\temp\test.jpg -AsByteStream