Мне пришлось использовать 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, установить «Наблюдать за именем папки» и это вызовет некоторые формы для вас заполняются, так как вы делаете это только один раз.