在我进行文件更改和创建文件后,为什么我的Powershell控制台会重复“未启动”状态。 (使用filesystemwatcher)

问题描述 投票:0回答:1

我在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}

enter image description here

shell powershell cmd filesystemwatcher ps1
1个回答
0
投票

您正在看到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
© www.soinside.com 2019 - 2024. All rights reserved.