Почему моя консоль Powersell постоянно «NotStarted» после того, как я сделал изменения файлов и файлы.(с помощью файловой системыwatcher) - PullRequest
0 голосов
/ 09 апреля 2019

Я довольно новичок в написании скриптов в файлах ps1, и я подумал, что все пойдет гладко, но теперь у меня возникли проблемы.Я пишу скрипт для просмотра папки и файлов в папке (изменен, обновлен, создан).Когда событие инициируется, действие должно запустить процесс запуска .exe.Скрипт должен проходить постоянно.У меня проблема с запуском exe;Это как если бы файловая система не распознала файлы, которые я изменяю, обновляю или создаю.Я с радостью оценю, ребята, помогите, спасибо!

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

1 Ответ

0 голосов
/ 10 апреля 2019

Вы видите вывод из 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                                 ...                      

Обычно я глотаю вывод из Register-ObjectEvent, отправляя его в $ null, так как мне все равно, если они не сработали.

### 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...