You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:01:48