【发布时间】:2019-11-10 16:34:55
【问题描述】:
我有一个简单的 Powershell 脚本派生 from here,它应该在某个条件变为真时退出(文件删除、修改等)
脚本:
$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,然后循环应该结束并且脚本应该退出。然而,它仍在继续。即使满足条件,循环也是无限的。
我也尝试过使用exitto exit out of the powershell script。也不行。我尝试删除sleep 1,但是,由于没有任何时间间隔的无限循环,它最终杀死了我的cpu。
当文件更改条件满足时如何修复它退出?
【问题讨论】:
-
@Theo:链接的帖子是相关的,但不是重复的,因为 this 问题是关于使用事件处理程序中的变量将信息传达给主脚本。
标签: windows powershell