如何通过PowerShell ISE或WinSCP上传指定时间戳的XML文件至FTP服务器
没问题,我来给你梳理清楚用PowerShell结合WinSCP实现这个自动化上传需求的具体步骤,亲测好用:
实现步骤
1. 准备WinSCP .NET组件
首先得搞定WinSCP的.NET Assembly,这是PowerShell能调用WinSCP FTP功能的核心。你可以从WinSCP官方渠道下载对应版本的安装包,安装完成后,在默认安装目录(一般是C:\Program Files (x86)\WinSCP\)里找到WinSCPnet.dll文件,后续脚本需要引用它。
2. 编写PowerShell自动化脚本
下面是完整的脚本示例,每个部分都加了注释,你可以根据自己的实际情况修改参数:
# 1. 加载WinSCP .NET程序集,请替换成你实际的WinSCPnet.dll路径 Add-Type -Path "C:\Program Files (x86)\WinSCP\WinSCPnet.dll" # 2. 配置FTP服务器连接参数 $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::Ftp # 指定使用FTP协议 HostName = "ftp.yourserver.com" # 替换成你的FTP服务器地址 UserName = "your-ftp-username" # FTP登录用户名 Password = "your-ftp-password" # FTP登录密码 # 如果你的FTP需要TLS加密连接,取消下面两行注释并配置 # FtpSecure = [WinSCP.FtpSecure]::Explicit # TlsHostCertificateFingerprint = "服务器证书的指纹信息" # 若需要被动模式连接,添加下面一行 # EnablePassiveMode = $true } # 3. 筛选本地要上传的目标文件 $localFolder = "C:\Your\Local\Folder\Path" # 替换成你的本地文件夹路径 # 这里分两种常见情况,你根据实际需求选一种: # 情况A:文件名中包含10pm标识(比如ABCDEF_10pm.XML) $targetFiles = Get-ChildItem -Path $localFolder -Filter "*10pm*.XML" | Where-Object { $_.Name -match "^ABCDEF" } # 情况B:文件的最后修改时间是晚上10点(22点) # $targetFiles = Get-ChildItem -Path $localFolder -Filter "ABCDEF.XML" | Where-Object { $_.LastWriteTime.Hour -eq 22 } # 4. 建立FTP连接并执行上传 $session = New-Object WinSCP.Session try { # 打开FTP会话 $session.Open($sessionOptions) foreach ($file in $targetFiles) { $remoteFilePath = "/your/remote/folder/" + $file.Name # 替换成FTP服务器上的目标路径 # 执行上传,第三个参数$false表示不覆盖已存在的文件,需要覆盖的话改成$true $transferResult = $session.PutFiles($file.FullName, $remoteFilePath, $false) # 检查上传结果并输出提示 if ($transferResult.IsSuccess) { Write-Host "✅ 成功上传文件: $($file.Name)" } else { Write-Host "❌ 上传失败 $($file.Name): $($transferResult.Failures[0].Message)" } } } finally { # 无论成功失败,最后都要关闭会话释放资源 $session.Dispose() }
3. 测试与定时执行
- 先手动运行脚本测试,确保能正常连接FTP并上传文件,如果遇到报错,根据提示调整参数(比如服务器地址、用户名密码、文件路径这些)。
- 如果需要每天自动执行,用Windows任务计划程序即可:创建一个基本任务,设置好触发时间,操作选择“启动程序”,程序或脚本选
powershell.exe,添加参数为你的脚本路径(比如-File "C:\Scripts\UploadFTPScript.ps1")。
内容的提问来源于stack exchange,提问作者user9161162
相关产品推荐
相关产品推荐

