我需要一种方法来监控文件何时从磁盘上删除 - 如果文件没有被特定时间删除,我们将知道我们的其中一个进程失败 - 我们可以收到警报等。
PowerShell是我的首选工具,我知道我可以使用 Test-Path 查看文件EXISTS的时间,但是 - 我想使用像 LastWriteTime 这样的东西但是专门针对 目录中的 文件。
另外 - 如果我们可以假设文件夹可以以另一种方式修改(可能通过文件夹中的其他无关文件) - 我理想地想要了解这个特定文件是否被删除和什么时候。
答案 0 :(得分:1)
如果您希望在删除特定文件时记录,则需要FileSystemWatcher
监视文件以进行删除,并将信息记录到以后可以检索的位置(例如事件日志) )。
创建新的事件源(需要管理员权限):
New-EventLog -Source 'FileMonitor' -LogName 'Application'
然后创建实际的监视器(从here无耻地窃取的代码):
$folder = 'c:\some\folder'
$file = 'something.txt'
$fsw = New-Object IO.FileSystemWatcher $folder, $file -Property @{
IncludeSubdirectories = $false
NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
}
Register-ObjectEvent $fsw Deleted -SourceIdentifier FileDeleted -Action {
Write-EventLog -LogName 'Application' -Source 'FileMonitor' -EventId 42 `
-EntryType 'Information' -Message $Event.TimeGenerated
}
然后可以从事件日志中获取删除时间,如下所示:
Get-EventLog -LogName 'Application' -Source 'FileMonitor' -InstanceId 42 `
-After (Get-Date).AddHours(-5) | % { [DateTime]$_.Message }
以上内容将检索过去5小时内发生的删除事件。
取消注册这样的观看事件:
Unregister-Event -SourceIdentifier FileDeleted