PowerShell FileSystemWatcher завершает работу, пока ($ true) - PullRequest
0 голосов
/ 03 мая 2018

Мне нужен этот сценарий для цикла, пока он не выполнит действие, но я не могу разорвать цикл.

# SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS YES/NO
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\TransX\InputTriggers\"
$watcher.Filter = "IVANS_TRIGGER_FILE.trig"
$watcher.IncludeSubdirectories = $false
$watcher.EnableRaisingEvents = $true

# DEFINE ACTIONS AFTER AN EVENT IS DETECTED
$action = {
    $path = $Event.SourceEventArgs.FullPath
    $changeType = $Event.SourceEventArgs.ChangeType
    $logline = "$(Get-Date), $changeType, Ivans File Arrived"
    Add-Content "C:\TransX\InputTriggers\ProcessLog.txt" -Value $logline
    Start-Process C:\TransX\Transxdl.bat
    Remove-Item C:\TransX\InputTriggers\IVANS_TRIGGER_FILE.trig

    break
}

# DECIDE WHICH EVENTS SHOULD BE WATCHED
Register-ObjectEvent $watcher "Created" -Action $action
#Register-ObjectEvent $watcher "Changed" -Action $action
#Register-ObjectEvent $watcher "Deleted" -Action $stopScript
Register-ObjectEvent $watcher "Renamed" -Action $action
while ($true) {sleep 5}

Команда break в $action не работает.

1 Ответ

0 голосов
/ 03 мая 2018

BREAK и CONTINUE будут работать таким образом только при использовании внутри цикла, ваше действие не в самом цикле.

То, что вы можете попробовать, это использовать переменную типа $ContinueWatching для вашего цикла и переключить ее из Action.

Пример:

$ContinueWatching = $true

$Action = {

    # <Your code here>
    # <Remove break>

    # StopWatching and Exit Script
    $global:ContinueWatching = $false
}

While ($ContinueWatching) {
    Start-Sleep -s 1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...