首页 文章

通过Powershell自动执行SSL FTP上传

提问于
浏览
1

我搜索并阅读了很多关于在Powershell中下载SSL FTP文件的信息......但是我如何上传它们?我有一个我需要每天上传的文件名,我收到的错误是我没有登录 . 我目前正在上传到其他FTP站点,如下所示:$ Filename =“myfile.txt”$ FullPath =“\ server \ share \ $ Filename“$ ftp =”ftp:// user:pass@ftp.domain.com/$Filename“$ ftpWebClient = New-Object System.Net.WebClient $ ULuri = New-Object System.URI($ ftp)$ ftpWebClient.UploadFile($ ULuri,$ FullPath)

我是否需要为SSL FTP上传创建一个全新的代码块,或者我只是需要对此代码进行微调?

谢谢!

2 回答

  • 6

    由于您已经在脚本中使用.NET框架中的WebClient类,我建议您通过在PowerShell中嵌入C#代码,从WebClient创建支持FTP over TLS的派生版本:

    $typeDefinition = @"
    using System;
    using System.Net;
    public class FtpClient : WebClient
    {
        protected override WebRequest GetWebRequest(Uri address)
        {
            FtpWebRequest ftpWebRequest = base.GetWebRequest(address) as FtpWebRequest;
            ftpWebRequest.EnableSsl = true;
            return ftpWebRequest;
        }
    }
    "@
    
    Add-Type -TypeDefinition $typeDefinition
    $ftpClient = New-Object FtpClient
    $ftpClient.UploadFile("ftp://your-ftp-server/yourfile.name", "C:\YourLocalFile.name")
    
  • 3

    我使用WinSCP DLL来做这件事 . 看看这里的一些例子:http://winscp.net/eng/docs/library#powershell

    这是我的一些示例代码 .

    [Reflection.Assembly]::LoadFrom("D:\WinSCP.dll") | Out-Null
    $sessionOptions = New-Object WinSCP.SessionOptions
    $sessionOptions.Protocol = [WinSCP.Protocol]::Sftp
    $sessionOptions.HostName = "192.168.1.120"
    $sessionOptions.UserName = "user"
    $sessionOptions.Password = "pass"
    $session = New-Object WinSCP.Session
    $session.Open($sessionOptions)
    
    #upload stuff here, check the link for detail on how, and use powershell to populate your file list!
    
    $session.Dispose()
    

相关问题