Запланований перезапуск послуги з powerhshell як обліковий запис служби не адміністратора


11

Перш ніж мене збити, я знаю, як запланувати завдання, перезапустити службу за допомогою повноважень або надати правам облікового запису, який не є адміністратором, для перезавантаження служби. Це не проблема. Однак проблема полягає у поєднанні всіх цих трьох завдань у поєднанні.

У мене є служба Windows, якій потрібно обробляти файли в мережевій папці. Тому він входить у систему "облікового запису послуги", який фактично є лише звичайним обліковим записом домену. Цей обліковий запис домену не є адміністратором, але має права доступу до вказаної папки. Сервіс працює нормально і робить свою роботу.

Однак іноді в одному з файлів є помилка, яка не дозволяє обробляти інші файли. Зазвичай, хтось помічає, якийсь час помічає, і є відставання.

Отже, я створив скрипт моніторингу в powershell, який опитує мережеву папку для цих помилкових файлів. Якщо вони знайдені, файли переміщуються у тимчасову папку для перегляду, і сервіс потрібно перезапустити.

Я надав привілеї облікового запису служби через групову політику для запуску та припинення послуги.

введіть тут опис зображення

Коли я входжу на сервер за допомогою облікового запису послуги, я можу перезапустити службу вручну за допомогою сервісу MMC. Я також в змозі виконати скрипт повноважень, і він робить саме те, що повинен робити: опитувати папку, переміщувати файли та перезапускати службу. Чудово!

На наступному етапі я створив планове завдання, яке виконується кожні 10 хвилин. Завдання використовує той самий обліковий запис служби, що і служба для виконання сценарію оболонки повноважень. Поле "Виконати з найвищими привілеями" встановлено. Як я вже говорив, сценарію повноважень потрібен доступ до мережевого накопичувача, тому я не можу запустити його як адміністратор локального сервера, і я не хочу використовувати облікові дані адміністратора домену для такого завдання, як це. (Я намагаюся максимально реалізувати принцип найменшої пільги.)

Я надав правам на обліковий запис служби "вхід як пакетна робота" на локальному сервері за допомогою ММС локальної політики безпеки.

Тепер про частину, яку я не можу з’ясувати: у запланований час заплановані завдання успішно виконуються і сценарій повноважень виконується. Сценарій опитує папку і файли помилок переміщуються. Єдине, що не працює - це перезапуск послуги ...?! Знову ж, запуск сценарію вручну, оскільки той самий користувач працював чудово.

Я не бачу багато в переглядачі подій, але при реєстрації в моєму сценарії зазначена помилка:

TerminatingError (Stop-Service): "Не вдається відкрити диспетчер управління сервісом на комп'ютері". "Ця операція може вимагати інших привілеїв."

Команди, які використовую для перезапуску послуги, є:

Stop-Service -Verbose -DisplayName $($service[1])
...
Start-Service -Verbose -DisplayName $($service[1])

(Я використовую Windows Server 2012 R2 та паттерн версії 4 версії домену R2 2008 року.)

Оновлення: я обидва намагався налаштувати сервісні дозволи для користувача за допомогою subinacl (як описано тут ) та встановити рядок SDDL вручну (як описано тут ), тому мої контрольні прапори виглядають так (A;; CCLCSWRPWPDTLOCRRC ;;; S-1- X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX). Я також спробував встановити привілеї на послугу на повний контроль в груповій групі. Жоден із них також не вирішив це питання. Мені це має бути проблема з привілеями десь, яку я все ще не помічаю, тому що коли я планую завдання з обліковим записом домену, який є локальним адміністратором на сервері, воно працює чудово.


Це може бути в чомусь довідковою сервером defaultfault.com/questions/357424/…, здається, що повноваження дуже вибагливі щодо дозволів, а не очевидних
Drifter104,


@ Drifter104: Навіть якщо я використовую GPO для встановлення дозволів на сервіс, а не subinacl, я все-таки спробував це все-таки з параметрами STOE, але все-таки побачив той же результат. Двічі перевірив мої налаштування GPO, і у них включена опція «Перерахувати залежні послуги».
VolrathTheFallen

@ MyronSemack-msemack Я спробував встановити рядок SDDL для служби вручну, як описано в статті, але все одно не пощастило. Я думаю, що в кінцевому рахунку GPO і subinacl роблять те саме, що, здається, перекриває одне та інше.
VolrathTheFallen

1
Як щодо спроби Set-Service $($service[1]) -status stopped -ComputerName . -Verbose ....замість Stop-ServiceCmdLet? Зрозуміло, що Stop-Service та Start-Service, можливо, не віддалено відповідно до цієї відповіді: Неможливо використовувати Get-Service –ComputerName на віддаленому комп’ютері, і ваше повідомлення про помилку може бути пов’язане зі спробою підключення до "віддаленого" localhost "." (<== це крапка там.)
Джон ака hot2use

Відповіді:


3

Anwser на інше питання вирішене моє запитання , як добре.

Кроки, які я робив:

  1. enable-psremoting на сервері в запиті адміністратора повноважень
  2. Set-PSSessionConfiguration -Name Microsoft.PowerShell -ShowSecurityDescriptorUI на сервері в запиті адміністратора повноважень
  3. Додано обліковий запис служби (або групу безпеки) з повними привілеями
  4. sc sdshow scmanager на сервері в командному рядку адміністратора
  5. Скопіюйте вихід SDDL
  6. Додайте (A;;KA;;;SID_OF_USER_OR_SECURITY_GROUP)до SDDL перед S: частина
  7. sc sdset scmanager THE_MODIFIED_SDDL моя виглядала так: sc sdset scmanager D:(A;;CC;;;AU)(A;;CCLCRPRC;;;IU)(A;;CCLCRPRC;;;SU)(A;;CCLCRPWPRC;;;SY)(A;;KA;;;BA)(A;;CC;;;AC)(A;;KA;;;S-1-X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX)S:(AU;FA;KA;;;WD)(AU;OIIOFA;GA;;;WD)
  8. Змініть мій скрипт повноважень, щоб він використовував Start-ServiceCmdLet замість Set-Service(Set-Service не працював).

Схоже, щось вийшло просто, ШЛЯХО складніше, ніж мало бути ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.