FileSystemWatcher перестанет работать, если я закрою окно PS, в котором оно работает - PullRequest
0 голосов
/ 16 мая 2018

Я хочу постоянно отслеживать любые новые файлы в папке ... если какой-либо новый файл, мой сценарий должен выбрать файл и начать его обработку.

После поиска в Google я нашел это решение, и оно прекрасно работает для меня ..

 $folder = 'G:\localexcelfiles\Logistics\logistics automation'
 $filter = '*.*'                             # <-- Takes only files that has xlsx extension


 $fsw = New-Object IO.FileSystemWatcher $folder, $filter -Property @{
  IncludeSubdirectories = $false              
  NotifyFilter = [IO.NotifyFilters]'FileName, LastWrite'
 }
 $onCreated = Register-ObjectEvent $fsw Created -SourceIdentifier FileCreated -Action {

  $path = $Event.SourceEventArgs.FullPath
  $Filename = $Event.SourceEventArgs.Name
  $changeType = $Event.SourceEventArgs.ChangeType
  $timeStamp = $Event.TimeGenerated 
 }

Для запуска этого скрипта я открываю Windows PowerShell ISE и запускаю следующую команду

  ./scriptname

это запускает мой скрипт и создает наблюдателя для моей папки ... и если я пытаюсь запустить скрипт снова, он выдает ошибку, говорящую "подписчик уже существует"

Но проблема в том, что ... если я закрываю ISE powershell, где я запускал скрипт ... мой скрипт также останавливается и наблюдатель также удаляется

Как убедиться, что этот FileSytemWatcher должен работать 24X7?

это можно сделать, если мой скрипт запускается с помощью планировщика заданий?

1 Ответ

0 голосов
/ 19 сентября 2018

Вызов сценария PowerShell из планировщика задач со следующими рекомендуемыми настройками.

C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -NoExit -noprofile
-executionpolicy bypass -file C:\YourPowerShellScript.ps1

ПРИМЕЧАНИЕ. Я добавил эту команду в пакетный файл, а затем вызвал пакетный файл из запланированной задачи, этодополнительный шаг, который не является необходимым, но я считаю, что его проще и проще запустить таким образом из запланированной задачи.

-NoExit Останавливает закрытие окна, поэтому он продолжает запускать FileSystemWatcher за кулисами..

-NoProfile нет необходимости загружать профиль пользователя, слишком запустить этот сценарий, это означает, что он более эффективен, поскольку не загружает все пользовательские сценарии, которые настроены в профиле.

-Executionpolicy bypass убедитесь, что скрипт будет запущен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...