0

我需要一种方法来监视文件何时从磁盘上删除——如果文件在特定时间没有被删除,我们将知道我们的其他进程之一失败——并且我们可以收到警报等。

PowerShell 是我选择的工具,我知道我可以使用Test-Path检查文件何时存在,但是 - 我想使用LastWriteTime 之类的东西,但专门用于该目录中的那个文件。

另外——如果我们可以假设可以以另一种方式修改文件夹(可能通过文件夹中的其他不相关文件)——我理想地想了解该特定文件是否被删除以及何时删除。

4

1 回答 1

1

如果您想在删除特定文件FileSystemWatcher记录下来,您需要一个监控文件是否删除并将信息记录在您以后可以检索的地方(例如事件日志)。

创建一个新的事件源(需要管理员权限):

New-EventLog -Source 'FileMonitor' -LogName 'Application'

然后创建实际的监视器(代码无耻地从这里窃取):

$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
于 2015-05-28T20:20:15.770 回答