我在ps1文件中编写脚本相当新,我认为一切都会顺利但现在我遇到了问题。我正在编写一个脚本来观察文件夹和文件夹中的文件(更改,更新,创建)。触发事件时,操作应该开始运行.exe的过程。脚本应该循环不断。我在exe开始时遇到问题;就好像filesystemwatcher无法识别我更改,更新或创建的文件。我很乐意感谢你们的帮助,谢谢!
while($true){
### SET FOLDER TO WATCH + FILES TO WATCH + SUBFOLDERS
$watcher = New-Object System.IO.FileSystemWatcher
$watcher.Path = "C:\BigData\COLLECTION_A\L_READ"
$watcher.Filter = "*.xlsx*"
$watcher.IncludeSubdirectories = $true
$watcher.EnableRaisingEvents = $true
$watcher.NotifyFilter = [IO.NotifyFilters]'LastAccess,LastWrite,FileName,DirectoryName'
### DECIDE WHICH EVENTS SHOULD BE WATCHED
Register-ObjectEvent $watcher "Created" -Action $action
Register-ObjectEvent $watcher "Changed" -Action $action
Register-ObjectEvent $watcher "Renamed" -Action $action
### DEFINE ACTIONS AFTER AN EVENT IS DETECTED
$action = { Start-Process C:\Users\sammy\Documents\parsing Engine 1.0.exe}
sleep 2}
您正在看到Register-ObjectEvent的输出。由于PSEventJob刚刚创建并且尚未被调用(通过事件),因此您将其视为NotStarted。
PS> Get-Job 4
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
4 e04ec31b-c2b... NotStarted False ...
一旦事件从您的FileSystemWatcher触发,您将看到它转为运行。
PS> Get-Job 4
Id Name PSJobTypeName State HasMoreData Location Command
-- ---- ------------- ----- ----------- -------- -------
4 e04ec31b-c2b... Running True ...
我通常通过将它发送到$ null来吞下Register-ObjectEvent的输出,因为如果它们没有被触发我就不关心它们。
### DECIDE WHICH EVENTS SHOULD BE WATCHED
$null = Register-ObjectEvent $watcher "Created" -Action $action
$null = Register-ObjectEvent $watcher "Changed" -Action $action
$null = Register-ObjectEvent $watcher "Renamed" -Action $action