通过 Powershell Remoting 传输文件(类似于 Linux 中的 scp)

通过 Powershell Remoting 传输文件(类似于 Linux 中的 scp)

在创建一些基于 powershell 的部署脚本时,我非常想念一种通过 Powershell Remoting 快速将文件传输到另一台服务器(通过互联网)的简单方法,类似于 Linux 的 scp。幸运的是,可以通过 Powershell Remoting 激活。我是不是忽略了什么?

答案1

您可以使用 Invoke-Command 通过 PSRemoting 会话轻松地通过网络复制文件的内容Set-Content

$Session = New-PSSession -ComputerName "remotehost.domain.tld" -Credential (Get-Credential) -UseSsl

$FileContents = Get-Content -Path 'C:\path\to\arbitrary.file'
Invoke-Command -Session $Session -ScriptBlock {
    param($FilePath,$data)
    Set-Content -Path $FilePath -Value $data
} -ArgumentList "C:\remote\file\path.file",$FileContents

答案2

新品PowerShell 5.0Copy-Item现在带有-ToSession-FromSession参数!

更多详细信息和示例请参见:复制到 PowerShell 会话或从 PowerShell 会话复制

答案3

为您提供 Oneliner。适用于任何版本。如果需要,可以传输二进制文件。

放置文件:

Invoke-Command -ComputerName "myserver.somewhere.net" -Credential (Get-Credential) -ScriptBlock {[io.file]::WriteAllBytes($Args[0],$Args[1])} -ArgumentList "c:\remote.file.path",(get-content "c:\local.file.path" -encoding byte -Read 0)

获取文件(未剥离的变量):

[io.file]::WriteAllBytes("$localfile",(Invoke-Command -ComputerName $remotehost -Credential $usercred -ScriptBlock {get-content $Args[0] -encoding byte -Read 0} -ArgumentList "$remotefile"))

相关内容