다운되기 전에 작업을 예약하고, powershell을 사용하여 서비스를 다시 시작하거나, 관리자가 아닌 계정에 서비스를 다시 시작할 수있는 권한을 부여하는 방법을 알고 있습니다. 그것은 문제가 아닙니다. 그러나 문제는이 세 가지 작업이 모두 결합 된 것입니다.
네트워크 폴더에서 파일을 처리해야하는 Windows 서비스가 있습니다. 따라서 실제로는 일반 도메인 계정 인 "서비스 계정"으로 로그온합니다. 이 도메인 계정은 관리자는 아니지만 해당 폴더에 대한 액세스 권한이 있습니다. 서비스가 제대로 실행되고 작동합니다.
그러나 때로는 파일 중 하나에 다른 파일을 처리하지 못하게하는 오류가 있습니다. 일반적으로 누군가가 알아 차리는 데 시간이 걸리고 약간의 백 로그가 있습니다.
따라서 Powershell에서 이러한 잘못된 파일에 대한 네트워크 폴더를 폴링하는 모니터링 스크립트를 작성했습니다. 파일이 발견되면 검토를 위해 파일이 임시 폴더로 이동되고 서비스를 다시 시작해야합니다.
서비스를 시작하고 중지하기 위해 그룹 정책을 통해 서비스 계정 권한을 부여했습니다.
서비스 계정으로 서버에 로그온하면 서비스 MMC를 사용하여 서비스를 수동으로 다시 시작할 수 있습니다. 또한 powershell 스크립트를 실행할 수 있으며 폴더를 폴링하고 파일을 이동하고 서비스를 다시 시작해야합니다. 큰!
다음 단계에서는 10 분마다 실행되는 예약 된 작업을 만들었습니다. 작업은 서비스와 동일한 서비스 계정을 사용하여 powershell 스크립트를 실행합니다. "가장 높은 권한으로 실행"상자가 선택되어 있습니다. 내가 말했듯이 powershell 스크립트는 네트워크 드라이브에 액세스해야하므로 로컬 서버 관리자로 실행할 수 없으며 이와 같은 멘탈 작업에 도메인 관리자 자격 증명을 사용하고 싶지 않습니다. (나는 가능한 한 최소한의 특권 원칙을 이행하려고 노력한다.)
로컬 보안 정책 MMC를 사용하여 로컬 서버에서 서비스 계정에 "일괄 작업으로 로그온"권한을 부여했습니다.
이제 이해할 수없는 부분 : 예약 된 시간에 예약 된 작업이 성공적으로 완료되고 powershell 스크립트가 실행되고 있습니다. 스크립트가 폴더를 폴링하고 오류 파일이 이동됩니다. 작동하지 않는 유일한 것은 서비스를 다시 시작하는 것입니다 ...?! 동일한 사용자로 스크립트를 수동으로 실행하면 완벽하게 작동합니다.
이벤트 뷰어에는별로 표시되지 않지만 스크립트에 로깅하면이 오류가 표시됩니다.
TerminatingError (Stop-Service) : "컴퓨터 '.'에서 Service Control Manager를 열 수 없습니다.이 작업에는 다른 권한이 필요할 수 있습니다."
서비스를 다시 시작하는 데 사용하는 명령은 다음과 같습니다.
Stop-Service -Verbose -DisplayName $($service[1])
...
Start-Service -Verbose -DisplayName $($service[1])
(2008 R2 도메인에서 Windows Server 2012 R2 및 Powershell 버전 4를 사용하고 있습니다.)
업데이트 : 나는 subinacl ( 여기에 설명 된 것처럼)을 사용하여 사용자에 대한 서비스 권한을 설정하고 SDDL 문자열을 수동으로 설정 ( 여기에 설명 된대로 )하려고 했으므로 제어 플래그는 다음과 같습니다 (A ;; CCLCSWRPWPDTLOCRRC ;;; S-1- X-XX-XXXXXXXXXX-XXXXXXXX-XXXXXXXXX-XXXX). 또한 GPO에서 서비스 권한을 모든 권한으로 설정하려고했습니다. 이들 중 어느 것도 문제를 해결하지 못했습니다. 서버의 로컬 관리자 인 도메인 계정으로 작업을 예약하면 제대로 작동하기 때문에 여전히 간과되는 어딘가에 권한 문제가 있어야합니다 .
Set-Service $($service[1]) -status stopped -ComputerName . -Verbose ....
대신 시도해 Stop-Service
보는 것은 어떻습니까? 이 답변에 따라 Stop-Service 및 Start-Service를 원격으로 사용할 수 없습니다. 원격 컴퓨터에서 Get-Service –ComputerName을 사용할 수 없으며 오류 메시지가 "원격"localhost '에 연결하려고하는 것과 관련이있을 수 있습니다.' (<== 저것은 점입니다.)