如何在PowerShell中通过文件内容复制图片(远程场景)
实现将图片内容存入变量并远程生成相同图片的方案
需求可行性确认
完全可行。通过将图片文件读取为字节数组,可跨PowerShell会话传递,再在目标机器上写入字节数组还原文件,比逐台传输文件更高效。
本地测试正确操作
你之前的问题出在读取和写入时的参数搭配错误,正确的本地操作步骤:
- 读取图片为完整字节数组(加
-Raw避免将文件分割为多行字节集合):
$PhotoContent = Get-Content -Path "C:\Temp\photo_orig.jpg" -AsByteStream -Raw
- 写入字节数组生成图片:
Set-Content -Path "C:\Temp\photo_duplicate.jpg" -Value $PhotoContent -AsByteStream
执行后生成的photo_duplicate.jpg与原文件完全一致。
远程部署脚本示例
通过Invoke-Command将字节数组传递给多台远程机器,在目标机器上生成文件:
# 1. 读取本地图片字节数组 $PhotoContent = Get-Content -Path "C:\Temp\photo_orig.jpg" -AsByteStream -Raw # 2. 定义远程服务器列表 $remoteServers = @("Server01", "Server02", "Server03") # 3. 远程执行生成图片 Invoke-Command -ComputerName $remoteServers -ScriptBlock { param($ImageBytes, $TargetPath) # 确保目标目录存在 $targetDir = Split-Path $TargetPath -Parent if (-not (Test-Path $targetDir)) { New-Item -Path $targetDir -ItemType Directory -Force | Out-Null } # 写入字节数组生成图片 Set-Content -Path $TargetPath -Value $ImageBytes -AsByteStream } -ArgumentList $PhotoContent, "C:\RemoteDeploy\photo_copy.jpg"
错误原因分析
- 第一次
Set-Content未加-AsByteStream:PowerShell会将字节数组当作字符串处理,导致内容丢失,生成0KB文件。 - 第二次报错:若未加
-Raw,Get-Content会返回多行字节数组组成的集合,而非单个完整字节数组,Set-Content -AsByteStream无法处理该类型。 -Encoding byte参数无效:PowerShell的-Encoding参数不支持byte,读取二进制文件需用-AsByteStream参数。
内容的提问来源于stack exchange,提问作者Andrew Draper
相关产品推荐
相关产品推荐

