Назад | Перейти на главную страницу

Запустите powershell.exe как службу или помогите найти альтернативное решение

Резюме: мне нужно постоянно запускать сценарий Powershell в фоновом режиме независимо от того, вошел ли пользователь в систему или нет. Это на сервере 2012.

Я выполнил следующую команду:

sc.exe create "MyService" binPath="powershell.exe 'c:\myFolder\myScript.ps1'"

Эта команда успешно выполнена. Однако, когда я запускаю службу, сразу появляется ошибка «Служба не ответила своевременно». Я знаю, что запуск Powershell как службы противоречит передовой практике, но возможно ли это вообще?

Лучший совет, который я получил, - запускать этот сценарий как запланированную задачу, а не как службу. Это имело бы смысл, но мои сотрудники службы безопасности включили опцию GPO «Сетевой доступ: не разрешать хранение паролей и учетных данных». Это не позволяет диспетчеру задач запускать задачи с правильными учетными данными, когда ни один пользователь не вошел в систему.

Зачем я это делаю? У нас есть старая программа, которая работает только в оконном режиме (не как служба) и выводит на экран как stdout, так и stderr. Это означает, что (а) пользователь должен быть авторизован на этом сервере 24 часа в сутки, и (б) файлы журнала отсутствуют. Если вы не смотрите на экран при возникновении ошибки, она прокручивается мимо вас. Исполняемый файл запускается в новом окне, поэтому операторы перенаправления на него не влияют.

Пока мы заменяем эту программу, мне нужно, чтобы она (а) работала постоянно, даже после выхода пользователя из системы или перезагрузки, и (б) записывала stdout и stderr в файл журнала.

Я решил вторую проблему с помощью простого сценария Powershell Powershell:

"Program started at $(get-date)" | Out-File c:\myFolder\CrapProgram.log -append
& "c:\myFolder\CrapProgram.exe" | Tee-Object c:\myFolder\CrapProgram.log

Это запустит программу в Powershell. Его вывод направляется как в окно Powershell, так и в файл журнала.

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

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

Вы можете попробовать запустить его как запланированную задачу и настроить пользователя для запуска задачи как «NT Authority \ System». Вам не нужно вводить пароль для этой учетной записи.