求WinSCP PowerShell脚本:按文件名匹配下载最新文件
带文件名筛选的WinSCP最新文件下载PowerShell脚本
基于你提供的参考脚本,只需在文件筛选环节添加文件名匹配条件,即可实现只下载符合特定命名规则的最新文件。以下是修改后的完整脚本:
param ( $localPath = "c:\downloaded", $remotePath = "/home/user", $fileNamePattern = "*" # 默认匹配所有文件,可修改为如"*report*.csv"的规则 ) try { # 加载WinSCP .NET程序集 Add-Type -Path "WinSCPnet.dll" # 设置会话参数 $sessionOptions = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::Sftp HostName = "example.com" UserName = "user" Password = "mypassword" SshHostKeyFingerprint = "ssh-rsa 2048 xxxxxxxxxxx..." } $session = New-Object WinSCP.Session try { # 连接服务器 $session.Open($sessionOptions) # 获取远程目录文件列表 $directoryInfo = $session.ListDirectory($remotePath) # 筛选符合文件名规则的最新文件 $latest = $directoryInfo.Files | Where-Object { -Not $_.IsDirectory -and $_.Name -like $fileNamePattern } | Sort-Object LastWriteTime -Descending | Select-Object -First 1 # 检查是否找到符合条件的文件 if ($latest -eq $Null) { Write-Host "未找到符合条件的文件" exit 1 } # 下载选中的文件 $session.GetFileToDirectory($latest.FullName, $localPath) | Out-Null Write-Host "已成功下载最新文件: $($latest.Name)" } finally { # 关闭会话,清理资源 $session.Dispose() } exit 0 } catch { Write-Host "错误: $($_.Exception.Message)" exit 1 }
核心修改说明
- 在参数块新增
$fileNamePattern,支持通过通配符指定文件名匹配规则(比如*daily*.xlsx匹配包含daily的Excel文件) - 在
Where-Object筛选器中加入$_.Name -like $fileNamePattern,仅保留符合命名规则的文件 - 新增下载成功的提示信息,方便确认执行结果
示例用法
若要下载远程目录中所有以backup_开头且以.zip结尾的最新备份文件,运行脚本时传入对应参数:
.\Download-LatestFilteredFile.ps1 -localPath "d:\backups" -remotePath "/server/backups" -fileNamePattern "backup_*.zip"
注意事项
- 确保
WinSCPnet.dll的路径正确,若脚本与dll不在同一目录,需修改Add-Type -Path的路径 - 替换脚本中的服务器连接信息为你的实际SFTP服务器配置
- 如需更复杂的匹配规则,可将
-like替换为-match,并传入正则表达式作为$fileNamePattern
内容的提问来源于stack exchange,提问作者Rafa
相关产品推荐
相关产品推荐

