서비스 목록과 서비스가 실행되는 계정을 어떻게 추출합니까?

서비스 목록과 서비스가 실행되는 계정을 어떻게 추출합니까?

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

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

(안타깝게도) PowerShell을 사용할 수 있는 옵션이 없어서 기본 CMD 방식을 찾고 있습니다. sc query 명령을 사용하는 방법이 있을 것이라고 가정했지만 그 목록은 모두 다음과 같습니다.

SERVICE_NAME
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT

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

답변1

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

답변2

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

  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 파일에 쓸 수 있습니다.

답변3

CMD에는 이를 수행할 수 있는 기본 방법이 없습니다. SC와 NET은 Windows와 함께 제공되는 기본 제공 애플리케이션이지만 이것이 기본이라는 의미는 아닙니다. 관리자는 언제든지 이를 제거할 수 있으며 CMD도 어둠 속에 남겨질 수 있습니다.

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

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

답변4

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 클래스.

관련 정보