наблюдатель powershell для запуска все время без выхода - PullRequest
0 голосов
/ 06 марта 2020

Я тестирую наблюдатель событий файла / папки на основе этой ссылки

https://www.mobzystems.com/code/using-a-filesystemwatcher-from-powershell/

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

Есть ли какой-нибудь способ добиться этого?

большое спасибо

1 Ответ

0 голосов
/ 06 марта 2020

Мне пришлось использовать nssm для запуска моей PowerShell как службы. Внутри PowerShell я использовал Start-Process для запуска процесса, который меня интересовал (php .exe), а затем мой PowerShell контролировал PID для этого процесса и делал все, что мне нужно (оповещение в случае сбоя процесса, завершение процесса по сценарию). окончание и т. д. c.).

Nssm - это круто, это просто .exe, который вы запускаете (без установки) для создания службы.

Например:

Создайте скрипт для запуска Watcher

# Set up your logging; the stdout and stderr log files have to exist, Start-Process won't create them.

$global:JobID = Start-Process `
    -FilePath 'C:\Windows\System32\WindowsPowerShell\v1.0\Powershell.exe  `
    -ArgumentList -File Start-FileSystemWatcher.ps1 -Path <path to watch> `
    -PassThru `
    -RedirectStandardOutput <your stdout log>
    -RedirectStandardError <your stderr log>

# Optional loop to watch the JobID to see if it dies and then alert
# Optional loop to stop the job and rotate the log files; then restart the job

У вас могут возникнуть проблемы со списком аргументов. Я не пробовал передавать именованные параметры. Возможно, вы захотите выбросить параметры в таблицу ha sh и добавить их в Start-Process.

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

D:\nssm-2.24\win64\nssm.exe install "Watch <folder name> "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe"

D:\nssm-2.24\win64\nssm.exe set "Watch <folder name>" AppParameters  -nologo -noexit -noninteractive -noprofile -file <the script created above>

D:\nssm-2.24\win64\nssm.exe set "Watch <folder name>" AppDirectory <the directory you want it to run in (optional)>

Но вы можете просто запустить nssm.exe, установить «Наблюдать за именем папки» и это вызовет некоторые формы для вас заполняются, так как вы делаете это только один раз.

...