Как предоставить разрешения для удаленного запуска / остановки службы с помощью Powershell?

10

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

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

Мы получаем эту ошибку обратно:

Stop-Service: не удается открыть службу 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.)

забрызганные биты
источник
Пожалуйста, отметьте это как ваш правильный ответ. Это было огромной помощью для меня точно такой же проблемы :)
Alain O'Dea
Я никогда не слышал subinaclраньше. Какая полезная утилита! Спасибо, что вернулись, чтобы оставить эту информацию для всех нас.
Дан
Прекрасно работает в не доменной среде с серверами Windows 2016 для управления службами на удаленных компьютерах.
Даг Кнудсен
0

Следующая команда работает должным образом на моем компьютере с Windows Server 2008 R2.

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

Можете ли вы также попробовать эту однократную команду, чтобы определить, работает ли она, и проверили ли вы, что пользователь является членом группы, которая является членом группы «Пользователи» на целевых серверах?

Грег Аскью
источник
Твой разрез не работает для меня. Из-за требований безопасности я не могу сделать пользователя членом группы «Пользователи» (или любой встроенной группы Windows).
разбрызганные биты