获取文件删除时间戳的脚本

时间:2015-05-28 18:53:34

标签: powershell last-modified windows2012

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

PowerShell是我的首选工具,我知道我可以使用 Test-Path 查看文件EXISTS的时间,但是 - 我想使用像 LastWriteTime 这样的东西但是专门针对 目录中的 文件。

另外 - 如果我们可以假设文件夹可以以另一种方式修改(可能通过文件夹中的其他无关文件) - 我理想地想要了解这个特定文件是否被删除和什么时候。

1 个答案:

答案 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