我正在尝试构建一个Powershell脚本,该脚本利用WinSCP二进制文件从FTP服务器下载文件。
到目前为止的脚本如下(减去实际IP和文件夹路径):
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Ftp
FtpMode = [WinSCP.FtpMode]::Passive
HostName = "ftp server ip address"
UserName = "ftp-username"
Password = "ftp-password"
}
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
# Download files
$session.GetFiles("/home/ftp-username/uploads/*.txt", "C:\temp\").Check()
}
finally
{
# Disconnect, clean up
$session.Dispose()
}
我一直遇到以下错误:
使用“ 1”作为参数调用“ Open”的异常:“连接失败。检测到超时。 (控制连接)连接失败。”在C:\ winscp-ftp.ps1:18 char:5+ $ session.Open($ sessionOptions)+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+ CategoryInfo:未指定:(:) [],MethodInvocationException+ FullyQualifiedErrorId:SessionRemoteException
我做过一些阅读,建议说FTPMode Passive可以解决这个问题,但是即使包含了该错误,错误仍然存在。
任何建议/指导将不胜感激。
我收到相同的错误消息,然后我使用winscp生成了code,它开始工作。
这在我的ftp服务器上有效。我不知道为什么,我的代码与您的代码几乎没有什么不同。
使用完整路径进入winscpnet.dll
我认为您是否使用$sessionOptions.AddRawSettings("ProxyPort", "0")
都没有关系]
不管我是否做被动都行得通。
我已连接到ftp服务器并将文件下载到c:\ temp
我安装了Posh-SSH 2.2,但错误消息继续。我先卸载Posh-SSH 2.2,然后才能运行脚本。
如果使用winscp生成代码,则不会告诉您使用winscpnet.dll的完整路径
# Load WinSCP .NET assembly. If you are not in the winscp directory use the full path.
Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll"
# Set up session options
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
Protocol = [WinSCP.Protocol]::Ftp
FtpMode = [WinSCP.FtpMode]::Passive
HostName = "ftp server ip address"
UserName = "ftp-username"
Password = "ftp-password"
}
$sessionOptions.AddRawSettings("ProxyPort", "0")
$session = New-Object WinSCP.Session
try
{
# Connect
$session.Open($sessionOptions)
# Download files
$session.GetFiles("/home/ftp-username/uploads/*.txt", "C:\temp\").Check()
}
finally
{
# Disconnect, clean up
$session.Dispose()
}