서비스 목록을 추출하고 어떤 계정으로 실행합니까?


13

이 질문의 강조는 후반부에 있습니다.

모든 서비스 목록을 추출하는 방법과 상태를 필터링하는 방법을 알고 있습니다. 그러나 어떻게해야할지 잘 모르겠 으면 서비스가 "다음 계정으로 실행"으로 설정된 사용자 계정을 추출하는 것입니다.

불행히도 PowerShell을 사용할 수있는 옵션이 없으므로 기본 CMD 방법을 찾고 있습니다. sc query 명령을 사용하는 방법이 있다고 가정했지만 모든 목록은 다음과 같습니다.

SERVICE_NAME
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT

참고-OS는 WIndows 2003 SP2이며 모든 서비스에 대해이 정보가 필요하므로 각 서비스에 대해 수동으로 수행해야하는 경우 시간이 오래 걸리는 프로세스입니다.

답변:


20

wmic :
모든 서비스의 이름과 계정 :
wmic service get name,startname

시작된 서비스 만 :
wmic service where started=true get name, startname

특정 패턴의 서비스 이름 :
wmic service where 'name like "%sql%"' get name, startname

html 테이블로 형식이 지정된 다음 브라우저에서 열림 :
(wmic service where 'name like "%sql%"' get name, startname /format:htable >out.html) && out.html

전체 구문은 다음과 같습니다. https://msdn.microsoft.com/en-us/library/aa394531%28v=vs.85%29.aspx


차이 무엇 sc querywmic?
Pacerier

1
@Pacerier 차이점은 무엇입니까? 서비스를 쿼리 / 상호 작용할 수있는 서로 다른 도구 (cmd line)입니다. sc는이 목적으로 만 사용되는 반면 wmic는 더 일반적입니다 (시스템의 다양한 부분을 쿼리 할 수 ​​있기 때문에). wmic는 또한이 특정 문제에 대해 사용하기가 더 쉽습니다 (단 하나의 쿼리)
wmz

5

이 작업은 두 단계로 수행 할 수 있습니다.

  1. 서비스 목록을 얻으십시오.sc \\localhost query | findstr SERVICE_NAME
  2. 누락 된 작품 : sc \\localhost qc+ SERVICE_NAME +| findstr SERVICE_START_NAME

다음과 같은 배치 스크립트를 권장합니다.

@echo off
setlocal EnableDelayedExpansion
sc \\localhost query | findstr SERVICE_NAME > services.lst
for /f "tokens=1,2" %%A in (services.lst) do (
    echo %%B
    sc \\localhost qc %%B | findstr SERVICE_START_NAME
)
del services.lst

그러면 다음과 같은 출력이 나타납니다. 여기에 이미지 설명을 입력하십시오

물론 원하는 방식으로 출력을 CSV 파일에 추가하거나 정리할 수 있습니다.


1

CMD는 기본 방법이 없습니다. SC 및 NET은 Windows와 함께 제공되는 기본 제공 응용 프로그램이지만 기본 응용 프로그램을 의미하지는 않습니다. 관리자는 언제든지 제거 할 수 있으며 심지어 CMD도 어둠 속에 남아 있습니다.

sc sdshow는 보안 설명자를 제공하지만 SDDL 문자열을 읽는 방법을 모르면 문제를 복잡하게 만듭니다.

가장 간단한 방법은 Tools 패키지에서 Sysinternals PsService.exe를 가져 와서 psservice security [service]로 사용하는 것입니다. 계정 이름을 포함하여 SDDL을 읽을 수있는 형식으로 나열합니다.


"기본 방법이 없다"는 것은 무엇을 의미합니까? 그것은 아닌 C:\Windows\System32\sc.exe윈도우의 모든 버전을 검색 하시나요?
Pacerier

다시 읽으세요. 내장은 CMD와 같이 제거 할 수 없음을 의미합니다. 관리자가 PowerShell을 비활성화하면 sc 및 net도 비활성화 할 수 있습니다. 가장 간단한 방법은 기본적으로 모든 작업을 수행하고 OS에 연결되지 않은 휴대용 앱을 사용하는 것입니다.
JasonXA

1

PowerShell을 사용할 수는 없지만 VBScript를 사용하여 WMI에서 정보를 가져올 수 있습니다.

VBS 스크립트는 다음과 같습니다. 모든 서비스와 서비스가 시작되는 계정을 나열합니다.

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service")

For Each objService in colServices 
    wscript.echo objService.Name & ": " & objService.StartName
Next

저장하고로 실행하십시오 cscript ScriptName.vbs.

objService.State 서비스의 현재 상태를 제공합니다 (필터링하려고한다고 언급 했으므로).

Win32_Service 클래스 에 대한 추가 정보 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.