Як я можу надати дозволи на віддалений запуск / зупинку послуги за допомогою Powershell?


10

У нас є сценарій PowerShell, який перезапускає послугу на іншому комп’ютері. Коли ми використовуємо вбудовані командлети управління сервісом PowerShell, наприклад:

$svc = Get-Service -Name MyService -ComputerName myservicehostname
Stop-Service -InputObject $svc
Start-Service -InputObject $svc

Ми повертаємо цю помилку:

Стоп-сервіс: Неможливо відкрити службу MyService на комп'ютері "myservicehostname".

Однак коли ми використовуємо sc.exe, так:

C:\Windows\System32\sc \\myservicehostname stop MyService
C:\Windows\System32\sc \\myservicehostname start MyService

початок і зупинка успішні.

Користувач, який здійснює перезапуск, не є адміністратором. Ми використовуємо subinacl для надання дозволу користувача на запуск / зупинку та запит служби:

subinacl.exe /service MyService /GRANT=MyServiceControlUser=STO

Чому PowerShell не може зупинити мою послугу, але sc.exeможе?

Відповіді:


20

Виявляється, я не давав достатньої кількості дозволівsubinacl . Можливі значення доступу для грантової дії:

    F : Full Control  
    R : Generic Read  
    W : Generic Write  
    X : Generic eXecute  
  or any following values  
    L : Read controL  
    Q : Query Service Configuration  
    S : Query Service Status  
    E : Enumerate Dependent Services  
    C : Service Change Configuration  
    T : Start Service  
    O : Stop Service  
    P : Pause/Continue Service  
    I : Interrogate Service  
    U : Service User-Defined Control Commands  

Я використовував S (стан обслуговування запиту), T (запуск служби) та O (зупинка служби). Мені також знадобився E (перерахувати залежні послуги). Здається, що командлети PowerShell потребують перегляду залежних служб при запуску / зупинці.

Ось моя оновлена subinaclкоманда:

subinacl.exe /service MyService /GRANT=MyServiceControlUser=STOE

Якщо ви не хочете завантажувати / використовувати subinacl.exe, ви можете використовувати PowerShell через функції Grant-ServiceControlPermission або Grant-ServicePermission модуля Carbon . (ВІДМОВЛЕННЯ: Я є власником / підтримувачем проекту Carbon.)


Будь ласка, позначте це як свою правильну відповідь. Це було для мене величезною допомогою для точно такого ж питання :)
Ален О'Дея

Я ніколи раніше не чув subinacl. Яка корисна утиліта! Дякуємо, що повернулися, щоб залишити цю інформацію для всіх нас.
Dan

Відмінно працює в недоменному середовищі з серверами Windows 2016 для управління послугами на віддалених комп’ютерах.
Дуг Кнудсен

0

Наступна команда працює, як очікувалося, на моїй машині Windows Server 2008 R2.

Start-Service -InputObject $(Get-Service -Computer [ComputerName] -Name spooler)  

Чи можете ви також спробувати цю одноразову команду, щоб визначити, чи працює це, і чи підтвердили ви, що користувач є членом групи, яка є членом групи Користувачі на цільових серверах?


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