У меня есть простой скрипт Powershell, полученный отсюда , который должен завершиться, когда определенное условие становится истинным (файл удален, изменен и т. Д.)
Сценарий:
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\Users\me\Desktop\folder\"
$watcher.Filter = "*.*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
$continue = $true
$action = {
Write-Host "Action..."
$anexe = "C:\Users\me\Desktop\aprogram.exe"
$params = "-d filename"
Start $anexe $params
$continue = $false
}
Register-ObjectEvent $watcher "Created" -Action $action
Register-ObjectEvent $watcher "Changed" -Action $action
Register-ObjectEvent $watcher "Deleted" -Action $action
Register-ObjectEvent $watcher "Renamed" -Action $action
while ($continue) {sleep 1}
Как вы можете видеть, сценарий должен завершаться при выполнении условия (выполняется «действие»), поскольку значение continue изменяется на false
, и цикл должен завершиться, а сценарий должен завершиться. Тем не менее, он продолжает идти. Цикл бесконечен даже при выполнении условия.
Я также пытался использовать exit
для выхода из сценария powershell . Тоже не работает. Я попытался удалить sleep 1
, но затем он убил мой процессор из-за бесконечного цикла без промежутка времени.
Как это исправить, чтобы выйти, когда условие изменения файла выполнено?