다른 컴퓨터에서 서비스를 다시 시작하는 PowerShell 스크립트가 있습니다. PowerShell의 기본 제공 서비스 제어 cmdlet을 사용하는 경우 다음과 같습니다.
$svc = Get-Service -Name MyService -ComputerName myservicehostname
Stop-Service -InputObject $svc
Start-Service -InputObject $svc
이 오류가 다시 발생합니다.
Stop-Service : ‘myservicehostname’컴퓨터에서 MyService 서비스를 열 수 없습니다.
그러나 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
할 수는 없습니까?
답변
에 충분한 권한을 부여하지 않은 것으로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 (Equirate Dependent Services)가 필요했습니다. PowerShell cmdlet은 시작 / 중지 할 때 종속 서비스를 확인해야합니다.
업데이트 된 subinacl
명령은 다음과 같습니다 .
subinacl.exe /service MyService /GRANT=MyServiceControlUser=STOE
다운로드 / 사용하지 않으려는 경우 카본 모듈의 Grant-ServiceControlPermission 또는 Grant-ServicePermission 함수 subinacl.exe
를 통해 PowerShell을 사용할 수 있습니다 . (면책 조항 : 저는 Carbon 프로젝트의 소유자 / 유지 자입니다.)
답변
다음 명령은 Windows Server 2008 R2 컴퓨터에서 예상대로 작동합니다.
Start-Service -InputObject $(Get-Service -Computer [ComputerName] -Name spooler)
이 일회용 명령을 사용해도 작동하는지 확인할 수 있으며, 사용자가 대상 서버에서 Users 그룹의 구성원 인 그룹의 구성원인지 확인 했습니까?