저는 현재 Windows용 서비스를 작성 중이며 자주 이를 조정하여 테스트 컴퓨터에 업데이트하고 있습니다. 자동으로 서비스를 중지하고, exe를 업데이트하고, 서비스를 다시 시작하는 스크립트를 작성하고 싶습니다. 그러나 내가 문제를 겪고 있는 부분은 중지 및 시작 부분입니다.
내가 연결하려는 컴퓨터는 도메인에 있지 않으며 우리는 사용자 이름과 비밀번호를 공유하지 않습니다. 그러나 최선의 방법은 sc.exe \\testsvr stop "myService"
도메인이 없거나 공유된 사용자 이름 및 비밀번호가 없기 때문에 "액세스가 거부되었습니다"라는 메시지가 표시되는 것입니다.
사용자를 추가하기만 하면 매우 쉽게 할 수 있지만 사용자를 변경할 수 없는 경우를 위한 학습 경험으로 활용하고 싶었습니다.
답변1
나는 살펴볼 것이다Ps서비스Microsoft의 Sysinternals(Mark Russinovich가 작성한 뛰어난 도구 세트의 일부)에서 제공됩니다.
웹사이트에서 바로:
Usage: psservice [\\computer [-u username] [-p password]] <command> <options>
의 경우 가장 일반적인 옵션으로 , 또는 를 <command>
사용할 수 있습니다 . 이 스크립트의 좋은 점은 두 시스템이 동일한 도메인의 구성원이거나 다른 신뢰를 갖는 것에 의존하지 않는다는 것입니다.start
stop
restart
답변2
여기에서 완전성을 기하기 위해 기본 Windows 도구만 사용하여 이 작업을 수행하려면 먼저 원격 시스템에 대한 IPC 연결을 설정하고(해당 시스템에 보안 토큰을 설정하기 위해) "SC" 명령을 사용할 수 있습니다.
net use \\remote\IPC$ /user:local-username-on-remote-machine passowrd
sc \\remote stop service-name
net use \\remote\IPC$ /delete
이렇게 하면 두 컴퓨터의 작업 그룹/도메인 멤버십 조합에 관계없이 원격 컴퓨터의 서비스를 제어할 수 있습니다.
답변3
도메인이 아닌 구성에서 개인적으로 시도한 적이 없지만 "RunAs"로 SC.exe를 실행하고 대상 컴퓨터에 대한 자격 증명을 사용할 수 있습니까?
Runas /user:TargetComputerName\TargetAccountName "sc.exe \\testsvr stop ""myService"""
답변4
DOMAIN 환경에서는 스크립트를 실행하는 로그인한 사용자에게 적절한 사용자 권한이 부여되었다고 가정하여 NET USE 명령을 사용할 수 있습니다. PowerShell은 아마도 가장 강력한 옵션일 것입니다. 그러나 이전 Microsoft 운영 체제를 실행하는 경우 일부 PowerShell 명령을 실행하는 데 몇 가지 문제가 발생할 수 있습니다. 모든 것이 Windows 2008 이상이라면 반드시 PowerShell을 사용하겠습니다.
이것이 가능하지 않다면 PSTools 패키지를 사용하여 큰 성공을 거두었습니다. Evan이 앞서 언급했듯이 이 옵션을 사용한다면 아마도 동일한 패키지에 있는 pskill 유틸리티에 익숙해져야 할 것입니다. 일부 서비스는 원격으로 작업할 때 정상적으로 종료되지 않으며, 이 작은 유틸리티는 해당 서비스를 종료하는 데 매우 좋습니다.
궁금한데, 어떤 스크립트 언어로 코딩하고 있나요? VB스크립트? 일괄? 펄?