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

如何用PowerShell删除SFTP服务器上5天前的指定路径文件

修改后的SFTP清理脚本(仅删除5天前文件)

没问题,我帮你调整了脚本,现在它只会删除/test/my_file/路径下5天前的文件,不会误删新文件或者目录。下面是完整的修改后脚本:

Add-Type -Path "WinSCPnet.dll"

# 计算5天前的日期时间
$fiveDaysAgo = (Get-Date).AddDays(-5)

$sessionOptions = New-Object WinSCP.SessionOptions -Property @{
    Protocol = [WinSCP.Protocol]::Sftp
    HostName = "example.test.com"
    UserName = "username"
    Password = "password"
    SshHostKeyFingerprint = "ssh-rsa 1234 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx..."
}

$session = New-Object WinSCP.Session
try {
    # 连接SFTP服务器
    $session.Open($sessionOptions)

    # 获取目标目录的文件列表
    $remoteDirectory = "/test/my_file"
    $remoteFiles = $session.ListDirectory($remoteDirectory)

    # 筛选出5天前的文件(排除目录)
    $filesToDelete = $remoteFiles.Files | Where-Object {
        !$_.IsDirectory -and $_.LastWriteTime -lt $fiveDaysAgo
    }

    # 循环删除符合条件的文件
    foreach ($file in $filesToDelete) {
        Write-Host "正在删除文件: $($file.FullName)"
        $session.DeleteFile($file.FullName)
    }

    Write-Host "清理完成,共删除 $($filesToDelete.Count) 个文件"
}
finally {
    # 确保会话关闭
    $session.Dispose()
}

关键修改点说明:

  • 日期计算:用(Get-Date).AddDays(-5)获取当前时间往前推5天的时间戳,作为判断文件是否需要删除的阈值。
  • 文件筛选:通过Where-Object过滤掉目录(!$_.IsDirectory),只保留最后修改时间早于5天前的文件。
  • 安全操作:添加了Write-Host输出要删除的文件路径,方便你提前确认;同时用try/finally确保无论脚本执行是否出错,SFTP会话都会正常关闭。

注意事项:

  1. 测试脚本时,可以先注释掉$session.DeleteFile($file.FullName)这一行,只看输出的文件列表,确认没有误删风险后再执行删除操作。
  2. 如果你需要基于服务器的时间而非本地时间判断,无需额外调整——$_.LastWriteTime已经是WinSCP转换后的服务器端文件修改时间。

内容的提问来源于stack exchange,提问作者rich dave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:46:24