쿼리 언어

컴퓨터에 질문하세요

하나의 언어를 창의 검색 상자와 bws list --query에서 씁니다. 단어만 쓰면 이름, 표시 이름, 계정, 시작 경로에서 검색합니다. 필드를 붙이면 범위가 좁아집니다. 필드는 21개이며, 같은 텍스트는 도구의 두 쪽 모두에서 같은 뜻입니다.

실제 질문에 답하는 여섯 가지

떠 있어야 하는데 떠 있지 않은 것

start:auto !status:running

대부분의 사람이 가장 먼저 쓰는 쿼리이며, services.msc가 전혀 답할 수 없는 쿼리입니다.

파일이 사라진 서비스

file:missing

디스크에 없는 실행 파일을 가리키는 항목입니다. 보통은 등록 정보를 남기고 제거된 경우입니다.

서명 없음, 세션 잡음 제외

signed:no peruser:no

사용자별 계열은 세션마다 복사본을 만들어 목록을 거의 같은 항목으로 채웁니다. 이 쿼리는 나머지에 대해 묻습니다.

사용 안 함인데 실행 중

mismatch:running

구성과 상태가 어긋난 경우입니다. 서비스 관리자가 절대 시작하지 않도록 설정된 항목이 그래도 실행되고 있습니다.

디버그 권한을 요청하는 모든 것

privilege:SeDebugPrivilege

프로세스가 다른 어떤 프로세스든 열 수 있게 해 주는 권한입니다. 어떤 서비스가 이것을 요청하는지 알아 둘 가치가 있습니다.

도구가 읽지 못한 것

account:?

이 세션이 계정을 읽지 못한 항목입니다. services.msc는 물을 수조차 없는 질문입니다.

쿼리를 쓰는 방법

검색어

  • 검색어는 공백으로 구분하며 모두 일치해야 합니다. and 키워드가 없는 것은 달리 뜻할 수 있는 것이 없기 때문입니다.
  • 같은 필드를 두 번 쓰는 것이 유일한 예외입니다. status:running status:stopped는 둘 중 하나를 뜻합니다. 필터 두 개를 선택하면 쓰이는 것이 바로 이것이기 때문입니다. 숫자에 대한 두 경계는 여전히 범위를 좁힙니다. pid:>1000 pid:<2000은 둘 사이의 범위입니다.
  • 검색어 앞의 !는 부정입니다. !status:running처럼 씁니다. setlocal EnableDelayedExpansion이 있는 배치 파일에서는 cmd가 이 !를 아무 말 없이 먹어 버려 쿼리가 조용히 다른 뜻이 되므로, 거기서는 따옴표 안에 ^!를 쓰세요.
  • 필드 안의 쉼표는 또는입니다. start:manual,disabled처럼 씁니다.
  • 따옴표는 공백이나 콜론이 있는 것을 보호합니다. account:"NT SERVICE\McmSvc"처럼 씁니다.
  • C:\Windows\System32\svchost.exe처럼 그대로 붙여 넣은 경로는 C라는 필드로 읽히지 않고 검색됩니다.

텍스트를 일치시키는 방법

  • name:spool은 그것을 포함하는 모든 것과 일치합니다. 사람들이 검색 상자에서 기대하는 동작이므로 기본값입니다.
  • name:=spooler는 정확히 일치합니다.
  • name:spool*은 와일드카드 *와 ?를 받습니다.
  • name:/^Sql.*/은 정규식이며, 슬래시 안에서는 정규식을 쓰는 방식 그대로 씁니다. \?, \\, 쉼표는 거기서의 뜻 그대로입니다. 닫히지 않는 슬래시는 오류입니다. 슬래시 자체를 검색하려면 \/를 쓰거나 따옴표를 사용하세요.
  • 대소문자는 ASCII 밖에서도 무시됩니다. 폴란드어나 그리스어 표시 이름도 어떻게 입력하든 일치합니다.

모든 필드가 받는 세 단어

  • any - 값이 있으며, 무엇이든 상관없음
  • none - 정말로 값이 없음, 항목에 값이 없음
  • ? - 도구가 이 필드를 읽지 못했거나 읽지 않았음, services.msc는 물을 수조차 없는 질문

잘못 입력한 값은 빈 결과가 아니라 오류입니다. status:runing은 Did you mean running?이라고 답하고 코드 2로 끝납니다. 빈 목록은 답처럼 보일 텐데, “아무것도 일치하지 않음”과 “잘못 입력함”의 차이는 깨끗한 컴퓨터와 아무것도 증명하지 못한 감사의 차이입니다. 아무것도 좁히지 못하는 쿼리는 명령줄에서도 거부되므로, 오타 때문에 스크립트가 컴퓨터 전체에 작업을 하는 일은 없습니다.

더 많은 예

각 예는 창의 검색 상자와 bws list --query 뒤에서 똑같이 동작하며, 여기에 쓰기 전에 실제 Windows에서 실행했습니다. 무엇이 찾아지는지는 컴퓨터에 따라 다르며, 문제에 대한 질문에서는 빈 답이 바라는 답입니다.

상태와 시작 유형

쿼리찾는 것
status:stopPending,startPending중지 중이나 시작 중에서 멈춘 것입니다. 스냅인이 보여 주고 끝나지 않는 기다림입니다.
start:auto status:stopped trigger:none자동으로 시작하도록 설정됐고, 중지되어 있으며, 트리거를 기다리지 않는 것입니다. 재시작 뒤에 읽어 볼 만한 짧은 목록입니다.
start:delayed자동이지만 다른 자동 항목보다 조금 뒤에 시작됩니다.
start:manual,disabled status:running부팅 때 아무것도 시작하지 않는데 실행 중인 것입니다. 무언가가 요청했거나, 트리거가 시작했거나, 누군가 시작했습니다.

계정

쿼리찾는 것
account:localsystem !publisher:microsoft가장 강력한 계정인 LocalSystem으로, Microsoft가 서명하지 않은 파일에서 실행됩니다. 게시자에 대한 쿼리는 서명을 스스로 읽으므로 몇 초가 걸립니다.
!account:localsystem,localservice,networkservice type:ownProcess,sharedProcess다른 계정으로 실행되는 서비스입니다. 가상 계정, 관리되는 계정, 또는 개인 계정입니다.
account:"NT SERVICE"서비스 자체의 가상 계정입니다. 공백 때문에 따옴표로 단어를 묶습니다.

파일과 서명

쿼리찾는 것
signed:notSigned,untrustedRoot,tampered서명이 없거나, Windows가 신뢰하지 않는 체인이거나, 서명 후에 변경된 파일입니다.
signed:trusted !publisher:microsoft서명되었고, 신뢰되며, Microsoft가 아닙니다. 다른 회사가 이 컴퓨터에 둔 소프트웨어입니다.
type:driver start:boot,system !signed:trustedWindows가 시작될 때 로드되는 드라이버 중 서명을 Windows가 신뢰하지 않는 것입니다. 건강한 컴퓨터에서는 없습니다.
!path:C:\Windows type:ownProcess자체 프로세스를 가진 서비스 중 파일이 Windows 폴더 밖에 있는 것입니다.
path:\AppData\누군가의 프로필 안에서 시작된 것입니다. 서비스가 있으리라고 가장 기대하지 않는 곳입니다.
path:\System32\\ type:ownProcess공백 앞의 백슬래시는 그 공백을 단어의 일부로 만들므로, 백슬래시로 끝나는 경로 뒤에 다른 검색어가 이어질 때는 백슬래시를 두 개 씁니다. 쿼리 끝에서는 하나로 충분합니다.

트리거와 종속성

쿼리찾는 것
trigger:device status:stopped장치가 연결되기를 기다리므로 이유가 있어 중지된 것입니다.
trigger:network네트워크 끝점(포트, 명명된 파이프, RPC 인터페이스)에 요청이 도착하면 시작됩니다.
trigger:stop트리거가 시작만 하는 것이 아니라 중지도 할 수 있는 항목입니다.
dependson:Winmgmt실행하려면 WMI가 필요한 항목입니다.
requiredby:SpoolerPrint Spooler가 실행되는 데 필요한 모든 것과, 그것들이 다시 필요로 하는 것입니다.

권한과 프로세스

쿼리찾는 것
privilege:SeTcbPrivilege운영 체제의 일부로 동작하기를 요청합니다.
privilege:SeImpersonatePrivilege !account:localsystemLocalSystem이 아닌 계정으로 실행되면서 클라이언트를 대신해 동작할 수 있습니다.
sidtype:unrestricted프로세스 안에 자체 서비스 SID를 가지므로, 권한에서 그것만 지목할 수 있습니다. sidtype:restricted는 프로세스가 쓰기 제한도 된 것을 묻습니다.
type:sharedProcess status:running공유 svchost 안에서 다른 서비스와 함께 실행됩니다.
memory:>200MB200MB보다 많이 사용하는 프로세스입니다. 쿼리가 묻는 경우 메모리는 스스로 읽힙니다.
pid:1000-2000ID가 1000에서 2000 사이인 프로세스 안에 있습니다.

이름과 텍스트

쿼리찾는 것
spool단어만 쓴 경우로, 이름, 표시 이름, 계정, 시작 경로에서 검색됩니다.
name:=wuauserv정확히 이 이름이며, 단지 포함할 뿐인 것은 해당되지 않습니다.
name:win*win으로 시작하는 이름이며, 와일드카드로 썼습니다.
name:/svc$/svc로 끝나는 이름이며, 정규식으로 썼습니다.
description:none설명이 전혀 없는 것으로, 대부분의 드라이버가 해당됩니다.
description:?Windows가 넘겨주지 못한 설명으로, 대개 존재하지 않는 언어 파일을 가리키기 때문입니다.
peruser:templateWindows가 로그인한 세션마다 복사하는 사용자별 템플릿입니다.

모든 필드

프로그램 자체에서 만들어지므로, 이 표는 도구가 받아들이는 것과 어긋날 수 없습니다. 값 목록이 없는 필드는 텍스트, 숫자, 크기를 받으며, 세 번째 열이 어느 쪽인지 알려 줍니다.

필드묻는 내용값
name서비스 이름으로, Windows가 식별에 쓰는 것텍스트
display표시 이름으로, 이 Windows가 쓰는 표기텍스트
description항목이 자신에 대해 말하는 것텍스트
type어떤 종류의 항목인지driver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown
peruserWindows가 세션마다 복사본을 만드는 사용자별 계열 중 하나인지yes, no, template, instance
status지금 무엇을 하고 있는지running, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown
start다음 부팅 때 서비스 관리자가 어떻게 다루는지automatic, auto, delayed, manual, disabled, boot, system, unknown
account실행되는 계정으로, 서비스 관리자가 쓰는 표기텍스트, 예: localsystem
pid실행 중인 프로세스숫자: 1234, >1000, 100-200
trigger시작하거나 중지시키는 조건device, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop
path서비스 관리자가 시작하는 명령줄텍스트
file실행하는 파일이 디스크에 있는지present, missing
signed해지 확인 없이, 파일의 서명에 대해 Windows가 판단하는 것yes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown
publisher파일에 서명한 주체로, 신뢰된 서명으로만 증명됨텍스트
privilege항목이 요청하는 권한텍스트, 예: SeDebugPrivilege
dependson이 항목이 필요로 하는 것서비스 이름
requiredby이 항목이 중지되면 망가지는 것서비스 이름
sidtype서비스 SID 유형unrestricted, restricted, unknown
sddl텍스트로 표현한 보안 설명자텍스트
memory그 프로세스가 사용하는 것단위가 붙은 크기: 500MB, >1GB, 100MB-1GB
mismatch서로 어긋나는 구성과 상태stopped, running

알아 둘 두 가지

일부 필드는 비용이 크며, 그것을 묻으면 읽기가 켜집니다

서명은 컴퓨터 전체에서 몇 초가 걸리고 메모리는 설정이 아니라 측정값이므로, 요청하지 않으면 목록을 위해 읽지 않습니다. 둘 중 하나를 언급하는 쿼리는 그 읽기를 스스로 켭니다. signed:no와 함께 --signatures도 기억할 필요가 없습니다. 창에서는 서명에 대한 쿼리가, 짧은 목록을 마치 답인 것처럼 보여 주는 대신 서명이 도착할 때까지 답이 불완전하다고 알려 줍니다.

읽을 수 없는 것을 근거로 판단한 결과는 그렇다고 말합니다

이 세션이 읽지 못한 필드를 근거로 항목을 판단했다면, 결과에 그 수를 알려 주는 줄이 붙습니다. 그런 결과에는 항목이 빠져 있거나 속하지 않는 항목이 들어 있을 수 있기 때문입니다. 도구 전체가 지키는 규칙과 같습니다. 읽기 실패는 답 안에 보이며, 삼켜지지 않습니다. 인증서만 주장하는 게시자도 같은 대우를 받습니다. trusted 이외의 판정 옆에서는 이름이 not verified로 표시되고, publisher:는 그 항목을 불확실한 것으로 별도의 줄에 셉니다. 그래서 !publisher:microsoft는 서명 후 누군가 변경한 Microsoft 파일을 남겨 둡니다.

명령줄 참조