Powershell和WinSCP-连接到FTP服务器

问题描述 投票:0回答:1

我正在尝试构建一个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可以解决这个问题,但是即使包含了该错误,错误仍然存​​在。

任何建议/指导将不胜感激。

powershell scripting ftp sftp winscp
1个回答
0
投票

我收到相同的错误消息,然后我使用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()
}
© www.soinside.com 2019 - 2024. All rights reserved.