如何用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会话都会正常关闭。
注意事项:
- 测试脚本时,可以先注释掉
$session.DeleteFile($file.FullName)这一行,只看输出的文件列表,确认没有误删风险后再执行删除操作。 - 如果你需要基于服务器的时间而非本地时间判断,无需额外调整——
$_.LastWriteTime已经是WinSCP转换后的服务器端文件修改时间。
内容的提问来源于stack exchange,提问作者rich dave
相关产品推荐
相关产品推荐

