我必须写一个脚本,访问FTP服务器,然后删除所有的*.zip
文件,这是旧的X天。
说明:该脚本不能在FTP服务器上运行。
这是我目前所拥有的:
$ftpServer = "RandomFTPServer"
$ftpUser = "Username"
$ftpPassword = Read-Host "Password" -AsSecureString
$credentials = New-ObjectSystem.Net.NetworkCredential($ftpUser, $ftpPassword)
function Get-FtpRequest($ftpPath) {
$ftpRequest = [System.Net.FtpWebRequest]::Create("$ftpServer/$ftpPath")
$ftpRequest.Credentials = $credentials
$ftpRequest.UseBinary = $true
$ftpRequest.KeepAlive = $true
$ftpRequest.UsePassive = $true
return $ftpRequest
}
字符串
有没有关于我下一步该做什么的提示?
2条答案
按热度按时间dfddblmv1#
您必须检索远程文件的时间戳,以选择旧的。
不幸的是,没有真正可靠和有效的方法来使用.NET框架/PowerShell提供的功能检索时间戳,因为它不支持FTP
MLSD
命令。所以你要么用途:
ListDirectoryDetails
方法(FTPLIST
命令)检索目录中所有文件的详细信息,然后处理FTP服务器特定格式的详细信息(*nix类似于ls
*nix命令是最常见的,缺点是格式可能会随着时间的推移而改变,对于较新的文件使用“May 8 17:48”格式,对于较旧的文件使用“Oct 18 2009”格式)GetDateTimestamp
方法(FTPMDTM
命令)来单独检索每个文件的时间戳。优点是响应由RFC 3659标准化为YYYYMMDDHHMMSS[.sss]
。缺点是您必须为每个文件发送单独的请求,这可能非常低效。一些参考资料:
Microsoft does not recommend
FtpWebRequest
for a new development无论如何或者,您可以使用支持现代
MLSD
命令和/或内置支持解析不同格式的LIST
命令的第三方FTP客户端实现。例如,WinSCP .NET assembly支持两者。
字符串
如果你可以处理一个普通的批处理文件,那么使用WinSCP scripting实际上更容易:
型
请参见具有时间约束的文件掩码。
请注意,WinSCP不需要任何安装。因此,您只需将其二进制文件与批处理文件或PowerShell脚本一起复制即可。
oewdyzsn2#
我目前正在使用FTPUSE,一个免费的命令行工具,它将FTP文件夹Map到Windows驱动器号,并通过以下方式将批处理文件Map到Windows驱动器号:
字符串
该软件与所有主要版本的Windows兼容:Windows XP,Vista,7,Server 2003,Server 2008,Windows 8,Server 2012和Windows 10(32位,64位)。
要了解更多信息,你也可以阅读我写的关于FTPUSE的this post(我不是作者,我只是觉得它对这类任务非常有用)。