您似乎正在尝试使用 PowerShell 远程处理复制文件。正如其他答案中所发布的,使用Copy-Item
和/或 Robocopy 从源复制到目标计算机上的共享会更简单。
如果要使用 PowerShell 远程复制文件,可以将文件 slurp 到变量中并在远程脚本块中使用它。就像是:
$contents = [IO.File]::ReadAllBytes( $localPath )
Invoke-Command -ComputerName <IP Address> `
-Credential $credential `
-ScriptBlock { [IO.File]::WriteAllBytes( 'C:\remotepath', $using:contents ) }
当然,如果您正在阅读的文件非常大,这可能会导致远程连接内存不足(默认情况下,PowerShell 将远程连接限制在 128MB 左右)。
如果您无法使用 PowerShell 2,则需要将字节作为脚本块参数传递:
$contents = [IO.File]::ReadAllBytes( $localPath )
Invoke-Command -ComputerName <IP Address> `
-Credential $credential `
-ScriptBlock {
param(
[byte[]]
$Contents
)
[IO.File]::WriteAllBytes( 'C:\remotepath', $Contents)
} `
-ArgumentList @( ,$contents )
是的,当将它作为值传递给参数时,您必须将其包装$contents
在一个数组中,并且必须以逗号运算符为前缀,否则您的远程脚本块将只接收第一个字节。-ArgumentList
,