이 질문의 강조는 후반부에 있습니다.
모든 서비스 목록을 추출하는 방법과 상태를 필터링하는 방법을 알고 있습니다. 그러나 어떻게해야할지 잘 모르겠 으면 서비스가 “다음 계정으로 실행”으로 설정된 사용자 계정을 추출하는 것입니다.
불행히도 PowerShell을 사용할 수있는 옵션이 없으므로 기본 CMD 방법을 찾고 있습니다. sc query 명령을 사용하는 방법이 있다고 가정했지만 모든 목록은 다음과 같습니다.
SERVICE_NAME
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT
참고-OS는 WIndows 2003 SP2이며 모든 서비스에 대해이 정보가 필요하므로 각 서비스에 대해 수동으로 수행해야하는 경우 시간이 오래 걸리는 프로세스입니다.
답변
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 \\localhost query | findstr SERVICE_NAME
- 누락 된 작품 :
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 파일에 추가하거나 정리할 수 있습니다.
답변
CMD는 기본 방법이 없습니다. SC 및 NET은 Windows와 함께 제공되는 기본 제공 응용 프로그램이지만 기본 응용 프로그램을 의미하지는 않습니다. 관리자는 언제든지 제거 할 수 있으며 심지어 CMD도 어둠 속에 남아 있습니다.
sc sdshow는 보안 설명자를 제공하지만 SDDL 문자열을 읽는 방법을 모르면 문제를 복잡하게 만듭니다.
가장 간단한 방법은 Tools 패키지에서 Sysinternals PsService.exe를 가져 와서 psservice security [service]로 사용하는 것입니다. 계정 이름을 포함하여 SDDL을 읽을 수있는 형식으로 나열합니다.
답변
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 클래스 에 대한 추가 정보 .