我需要编写一个脚本,将文件从文件夹传输到另一台服务器(Linux),但是传输文件的脚本在Windows上,我想知道PowerShell是否有scp
的替代方案(或者如果还有其他方法可以做到这一点)
答案 0 :(得分:20)
有一个名为pscp.exe
的{{3}}附带的方便的小工具可以执行此操作,并且可以在powershell中轻松调用。
下面的示例从Windows复制到CentOS框(以用户代码“bill”登录)并使用-pw
中的pscp
开关传入密码(否则命令窗口是spawned将提示输入Linux密码):
Start-Process 'C:\Program Files (x86)\PuTTY\pscp.exe' -ArgumentList ("-scp -pw password C:\Document.rtf bill@192.168.0.28:/home/bill/")
PuTTY Secure Copy client
Release 0.62
Usage: pscp [options] [user@]host:source target
pscp [options] source [source...] [user@]host:target
pscp [options] -ls [user@]host:filespec
Options:
-V print version information and exit
-pgpfp print PGP key fingerprints and exit
-p preserve file attributes
-q quiet, don't show statistics
-r copy directories recursively
-v show verbose messages
-load sessname Load settings from saved session
-P port connect to specified port
-l user connect with specified username
-pw passw login with specified password
-1 -2 force use of particular SSH protocol version
-4 -6 force use of IPv4 or IPv6
-C enable compression
-i key private key file for authentication
-noagent disable use of Pageant
-agent enable use of Pageant
-batch disable all interactive prompts
-unsafe allow server-side wildcards (DANGEROUS)
-sftp force use of SFTP protocol
-scp force use of SCP protocol
答案 1 :(得分:9)
pscp.exe
是一个可行的选择,但我已经使用Rebex中的库几年来在C#应用程序和PowerShell脚本中进行SFTP和FTPS传输并取得了巨大成功。他们的套餐还包括an SCP object,但我没有亲自使用过它。
与pscp
免费相比,这需要花钱。在选择Rebex软件包之前,我曾考虑过使用PuTTY路由,但我的团队认为,从长远来看,拥有一个可以轻松插入任何应用程序/脚本的库是值得的。
答案 2 :(得分:5)
您可以使用WinSCP .NET assembly中的PowerShell进行SCP转移。
例如,请参阅http://winscp.net/eng/docs/library_powershell#example
该示例使用SFTP协议。要使用SCP,只需将其修改为:
$sessionOptions.Protocol = [WinSCP.Protocol]::Scp
虽然如果您的服务器支持SCP协议,但它可能也支持SFTP。如果您有选择,SFTP是更好的选择。
答案 3 :(得分:1)
还有一种“.NET友好”的方式:
您可以使用SharpSSH dll执行ssh命令,并执行scp / sftp传输。
例如:
[Reflection.Assembly]::LoadFrom((Resolve-Path .\Tamir.SharpSSH.dll))
$ssh = New-Object Tamir.SharpSsh.Sftp("server","user","password")
$ssh.Connect()
$ssh.Put("C:\localfile","distantfile")
$ssh.Close()
还有SSH.Net库,它的功能大致相同。
答案 4 :(得分:1)
如今,Windows将OpenSSH(包括SCP)作为可选组件,因此您可以使用它。有关如何设置的说明,请参见OpenSSH in Windows。
或者,如果您在两台计算机上都具有PowerShell,则应该可以使用Copy-Item
并通过-ToSession
进行SSH连接的会话来进行操作,但是我从未真正尝试过。它要求使用PowerShell的最新版本以及更多设置(请参见PowerShell remoting over SSH)。像这样:
Copy-Item C:\localPath\*.* ~\remotePath\ -ToSession (New-PSSession -HostName UserA@LinuxServer01:22 -KeyFilePath c:\\userAKey_rsa)
如果两台计算机都是Windows计算机,则可以使用相同的-ToSession
参数通过WinRM复制文件。但是两台计算机都必须加入域,否则可能会出现安全问题。