您不能使用WebClient
类来检查远程文件时间戳。
您可以使用FtpWebRequest class https://learn.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest以其GetDateTimestamp https://learn.microsoft.com/en-us/dotnet/api/system.net.webrequestmethods.ftp.getdatetimestamp FTP "method" https://learn.microsoft.com/en-us/dotnet/api/system.net.ftpwebrequest.method并解析它返回的 UTC 时间戳字符串。格式由以下指定RFC 3659 https://datatracker.ietf.org/doc/html/rfc3659#section-3 to be YYYYMMDDHHMMSS[.sss]
.
仅当 FTP 服务器支持时才有效MDTM
该方法在幕后使用的命令(大多数服务器都这样做,但不是全部)。
$url = "ftp://ftpsite.com/folder/install_firefox.exe"
$ftprequest = [System.Net.FtpWebRequest]::Create($url)
$ftprequest.Method = [System.Net.WebRequestMethods+Ftp]::GetDateTimestamp
$response = $ftprequest.GetResponse().StatusDescription
$tokens = $response.Split(" ")
$code = $tokens[0]
if ($code -eq 213)
{
Write-Host "Timestamp is" $tokens[1]
}
else
{
Write-Host "Error" $response
}
它会输出类似以下内容:
Timestamp is 20150709065036
现在解析它,并与本地文件的 UTC 时间戳进行比较:
(Get-Item "install_firefox.exe").LastWriteTimeUtc
或者节省一些时间并使用可以为您完成此操作的 FTP 库/工具。
例如与WinSCP .NET 程序集 https://winscp.net/eng/docs/library,您可以通过一次调用将整个远程文件夹与安装程序与本地副本同步Session.SynchronizeDirectories https://winscp.net/eng/docs/library_session_synchronizedirectories。或者您可以将同步限制为仅单个文件。
# Load WinSCP .NET assembly
Add-Type -Path "WinSCPnet.dll"
# Setup session options
$sessionOptions = New-Object WinSCP.SessionOptions
$sessionOptions.Protocol = [WinSCP.Protocol]::Ftp
$sessionOptions.HostName = "ftpsite.com"
$session = New-Object WinSCP.Session
# Connect
$session.Open($sessionOptions)
$transferOptions = New-Object WinSCP.TransferOptions
# Synchronize only this one file.
# If you remove the file mask, all files in the folder are synchronized:
$transferOptions.FileMask = "install_firefox.exe"
$session.SynchronizeDirectories(
[WinSCP.SynchronizationMode]::Local, "$dir\Apps", "/folder",
$False, $False, [WinSCP.SynchronizationCriteria]::Time,
$transferOptions).Check()
要使用该程序集,只需提取以下内容.NET 汇编包 https://winscp.net/eng/download.php到您的脚本文件夹。无需其他安装。
该组件不仅支持MDTM
,还有其他检索时间戳的替代方法。
另请参阅相关Powershell示例 https://winscp.net/eng/docs/library_session_getfiles#powershell显示了上述代码和其他技术。
(我是WinSCP的作者)