我正在尝试创建一种机制(在我的情况下是包装在 PowerShell 中的 Robocopy),该机制将把我们所有 Web 服务器的 IIS 日志备份到中央 CIFS 共享中。正如您所料,我在复制当前打开的日志文件时遇到了问题,因为除非关闭了文件的所有句柄,否则 NTFS 往往无法在写入文件时可靠地更新 LastWriteTime。
然而,我注意到,每当我用 Windows 资源管理器浏览目录时,不仅修改日期会更新,而且下一次 Robocopy 运行也会正确捕获文件并使其更新。为了模拟 Windows 资源管理器的行为,我在调用 Robocopy 作业之前在 PowerShell 中运行了以下代码:
$aryFileList = Get-ChildItem $job.SourcePath
ForEach ($file in $aryFileList) {(New-object System.IO.FileInfo $file).LastWriteTime | Out-Null}
这对我的部分 IIS 服务器和所有其他日志记录方法(主要是 log4net)都有效。但是,在我的两台 IIS 服务器上,这不起作用,即使它们与其他运行良好的服务器具有相同的操作系统和 IIS 版本。
这让我回想起一个问题:Windows 资源管理器到底是什么做当您使用它刷新目录以更新修改日期/上次写入时间信息时?对我的目的而言,最重要的是,是否有任何方法可以在 PowerShell 中调用相同的操作?