2015-05-28 9 views
0

Мне нужен способ отслеживания, когда файл удаляется с диска. Если файл не удаляется определенным временем, мы будем знать, что один из наших других процессов НЕИСПРАВНО - и мы можем быть предупреждены и т.д.Сценарий, чтобы получить временную метку, когда файл был удален

PowerShell мой инструмент выбора, и я знаю, что я могу проверить, если файл EXISTS с помощью Test-Path, однако, - я хотел бы использовать что-то вроде LastWriteTime но специально для что файл в что директория.

Кроме того - если мы можем предположить, что папка может быть изменены другим способом (возможно, с помощью других несвязанных файлов в папке) - я бы в идеале хотел бы понять, если этот конкретный файл был удален и КОГДА.

ответ

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