Код запускается без ошибок, однако, когда я добавляю/удаляю файл в файловой системе, код не выполняет действия, которые должны выполняться в Register-ObjectEvent $watcher "watchType" -Action $action
. Я знаю это, потому что в прошлом он работал и создавал/добавлял к log.txt
запись о файле, удаленном/добавленном и его дате. Теперь ничего не происходит. Что происходит?PowerShell: FileSystemWatcher не работает
Код:
#local path of the folder you want to sync. By default sets to current directory
$localPath = get-location
#filter specific files by name/type
$filter = "*.*"
#include subdirectories
$inclSubDirectories = $true
#end of user defined variables
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = $localPath
$watcher.Filter = $filter
$watcher.IncludeSubdirectories = $inclSubDirectories
$watcher.EnableRaisingEvents = $true
$oldContent = ""
$action = {
$path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$logline = "$(Get-Date), $changeType, $path"
Add-content "'$localPath'\log.txt" -value $logline
}
$created = Register-ObjectEvent $watcher "Created" -Action $action
$action1 = {
$path = $Event.SourceEventArgs.FullPath
$changeType = $Event.SourceEventArgs.ChangeType
$logline = "$(Get-Date), $changeType, $path"
Add-content "'$localPath'\log.txt" -value $logline
}
$deleted = Register-ObjectEvent $watcher "Deleted" -Action $action1
$exitAction = {
"File wathcer unregistered!"
Unregister-Event $created
Unregister-Event $deleted
}
$exit = Register-EngineEvent PowerShell.Exiting -action $exitAction
while ($true) {
if($oldContent -eq $logline){}
else{
$logline
$oldContent = $logline
}
Start-Sleep -m 1000
}
EDIT
Я решил попробовать скопировать и вставить код непосредственно в PowerShell, и она работает так, как надо ... Не совсем, это Безразлично 't, но он обновляет файл log.txt, как он должен. На самом деле, он работал только один раз. Теперь он вернулся к тому, как это было раньше.
EDIT v2
Это, кажется, работает только один раз в случае (создание, а затем удалить), когда я копипаст в PowerShell (например, было бы зарегистрировать файл удален в журнале, то это было бы зарегистрируйте созданный файл, но он ничего не сделает.) Он все равно не выводит, как должен.
Я думаю, что 'в то время как ($ верно)' цикл полностью блокирует основной поток, в котором, как предполагается, обратные вызовы событий для запуска. Зачем тебе это? – wOxxOm
@wOxxOm Я прокомментировал секцию цикла, и скрипт закроется, потому что он достиг конца скрипта. Кроме того, у меня была петля до того, когда она работала, поэтому я не думаю, что проблема. –
Я по-прежнему считаю, что это неправильно, если не запуститься «Пуск-Сон-Миллисекунды 100» внутри цикла. – wOxxOm