0

以下のコードでは、action.bat - ファイル名を引数として渡して Java プロセスを呼び出し、log.txt - ファイル名がタイムスタンプで作成された行をログに記録します。

完全に機能する10個のtxtファイルをドロップしてこのスクリプトをテストしています。このテストを数回繰り返したところ、log.txtが更新され、action.batも正しく呼び出されました。

ただし、この filewatcher を 4 時間実行したままにし、10 個の新しいテキスト ファイルをドロップすると、log.txt のみが更新され、action.bat ファイルは呼び出されません。

再び、powershell を強制終了してスクリプトを再起動し、10 個の新しいファイルで再度テストすると、問題なく動作しました。

4時間待ってもStart-processが呼び出されないのはなぜですか? しかし、ログステートメントは実際に更新されます

私のコードはnet event filewatch.ps1に似ています

 $watcher = New-Object System.IO.FileSystemWatcher
    $watcher.Path = "D:\code\Apps\input"
    $watcher.Filter = "*.txt"
    $watcher.IncludeSubdirectories = $false
    $watcher.EnableRaisingEvents = $true 
### DEFINE ACTIONS AFTER A EVENT IS DETECTED
    $action = {
    $path = $Event.SourceEventArgs.FullPath
                $changeType = $Event.SourceEventArgs.ChangeType
                $logline = "$(Get-Date), $changeType, $path"
                Add-content "D:\code\Apps\log.txt" -value $logline   
                Start-process -Filepath D:\code\Apps\action.bat $path -Wait -passthru; 
                }    

### DECIDE WHICH EVENTS SHOULD BE WATCHED + SET CHECK FREQUENCY  
    $created = Register-ObjectEvent $watcher "Created" -Action $action
    while ($true) {sleep 10}
4

1 に答える 1