PowerShell调用WinSCP操作FTP时自动创建不存在的目标文件夹
PowerShell调用WinSCP实现FTP传输前自动建目录方案
实现步骤
- 建立WinSCP FTP会话连接后,先拼接目标目录的完整远程路径
- 校验目标目录是否存在,不存在则自动创建
- 校验通过后执行压缩包上传,最后释放会话资源
完整可运行代码
$sessionOptions = New-Object WinSCP.SessionOptions -Property @{ Protocol = [WinSCP.Protocol]::Ftp HostName = "10.10.10.10" PortNumber = 2121 UserName = "user" Password = "pass" FtpSecure = [WinSCP.FtpSecure]::Explicit TlsHostCertificateFingerprint = "-" } $session = New-Object WinSCP.Session try { # 连接FTP服务器 $session.Open($sessionOptions) # 定义远程目标存储目录 $remoteTargetDir = "/Public/$inputID" # 检查目录是否存在,不存在则创建 if (-not $session.FileExists($remoteTargetDir)) { $session.CreateDirectory($remoteTargetDir) } # 本地待上传压缩包路径 $localArchivePath = "E:\logs\win\Archive\$inputID - $Date.zip" # 执行上传,Check()方法会在传输失败时抛出异常 $session.PutFiles($localArchivePath, "$remoteTargetDir/").Check() } finally { # 无论传输成功失败,都释放会话资源 $session.Dispose() }
关键说明
- 原脚本中
PutFiles方法的远程路径写为/Public/$inputID/*是错误写法,该通配符适用于批量匹配文件场景,上传单个文件到指定目录时,远程路径末尾加/即可,WinSCP会自动保留本地文件名写入目标目录 - 需提前确认脚本上下文内
$inputID(机器名)、$Date(日期标识)两个变量已正确赋值,否则会出现路径拼接错误 - 提前给FTP账号分配
/Public目录的创建子目录、写入文件权限,避免权限不足导致操作失败
内容的提问来源于stack exchange,提问作者SySx
相关产品推荐
相关产品推荐

