Windows 서비스를 검색하고, 모든 변경을 실행 전에 미리 보고, 어제 이후 무엇이 드리프트했는지 확인하세요

Better Windows Services는 Windows 컴퓨터를 관리하는 사람을 위해 다시 만든 services.msc입니다. 창과 명령줄이 하나의 엔진 위에서 동작합니다. 800개 행을 스크롤하는 대신 컴퓨터에 질문하세요. 아무것도 누르기 전에 변경이 무엇을 하는지 확인하세요. 그리고 services.msc에 없던 기능이 있습니다. 모든 서비스를 파일로 고정해 두고, 일주일 뒤 무엇이 바뀌었는지 물을 수 있습니다.

  • 무료 오픈 소스, GPL-3.0
  • 파일 하나 또는 설치 프로그램
  • 보기만 할 때는 관리자 권한이 필요 없음
  • 인터넷에 접속하지 않음
항목 다섯 개를 선택하고 목록 위에 그 항목들을 시작하는 계획이 표시된 창입니다. 다섯 단계, 그중 둘은 이미 그 상태라는 참고, 각 항목에 대한 bws start 줄, Start 5 entries 버튼이 있습니다.
선택한 항목, 아무 일이 일어나기 전에 표시되는 계획, 그리고 정확히 같은 일을 요청하는 bws 줄입니다. 프로그램은 영어로 표시됩니다. 창은 옆에 놓인 언어 파일을 읽으므로 다시 빌드하지 않고도 번역할 수 있습니다.
30초 체험

실제로 사용하면 이렇게 보입니다

폴란드어로 설치된 Windows에서의 실제 세션입니다. 표시 이름은 Windows에서 가져오므로 Windows의 언어로 표시됩니다. 창 자체는 영어입니다.

항목 네 개를 선택하고 그 항목들을 시작하는 계획, Local Session Manager의 강제 재시작(계획이 컴퓨터가 이것 없이는 동작하지 않는다고 경고하고 버튼이 동작하기 전에 이름을 입력하라고 요구함), 빈 검색 상자 아래의 시작용 질문, 이름의 일부를 입력해 찾아 시작한 Print Spooler.
항목 네 개를 선택하고 그 항목들을 시작하는 계획, 컴퓨터에 필요한 서비스의 이름을 요구하는 강제 재시작, 빈 검색 상자 아래의 질문, 입력해서 찾아 시작한 Print Spooler.
첫 화면: 이 컴퓨터에 대한 숫자가 담긴 카드 세 장(실행 중인 서비스, 자동으로 시작하도록 설정됐지만 올라오지 않은 서비스, 자동으로 시작하도록 설정됐지만 파일이 사라진 서비스)과 Show the list 버튼.
창은 이 컴퓨터에 대한 숫자 몇 개와 함께 열립니다. 각 숫자는 질문이며, 클릭하면 그 질문이 검색 상자에 들어갑니다.
검색 상자 위에 목록 세 개가 있는 서비스 목록, 빈 검색 상자, 상태, 시작 유형, 서명, 불일치, 트리거별 행으로 펼쳐진 필터 버튼, 그 아래의 목록.
필터 버튼은 검색 상자에 내용을 쓰므로, 클릭한 것은 읽고 편집할 수 있는 쿼리가 됩니다.
만든 이유

services.msc는 Windows 2000 이후 거의 바뀌지 않았습니다

관리자는 매주 몇 시간씩 이것을 사용하며 같은 벽에 부딪힙니다.

  • 검색이 없습니다. 유일한 탐색은 표시 이름의 첫 글자로 건너뛰는 것입니다.
  • 필터링이 없습니다. 자동으로 시작하도록 설정됐지만 실행 중이 아닌 것을 보여 줘라고 물을 방법이 없습니다.
  • 한 번에 한 행씩만 됩니다. 서비스 열두 개를 재시작하려면 오른쪽 클릭 열두 번과 기다림 열두 번이 필요합니다.
  • 끝없는 “Stopping...” 작업 관리자와 프로세스를 짐작하는 것 외에는 빠져나갈 길이 없습니다.
  • 기록이 없습니다. 누가 언제 시작 유형을 Disabled로 설정했는지 아무도 모릅니다.
  • 숨겨진 데이터. 프로세스, 트리거, 권한, 보안 설명자, 실행 파일에 서명한 주체까지, 이 모든 것을 보려면 기억에 의존한 sc.exe나 레지스트리가 필요합니다.
  • 동등한 명령줄이 없습니다. sc.exe는 1990년대 구문을 쓰고, Windows에 포함된 Windows PowerShell 5.1의 Get-Service는 서비스가 실행되는 계정은 물론 설명도 보여 주지 않습니다. PowerShell 7은 둘 다 보여 주며, 별도로 설치합니다.

다른 도구는 각자 일부만 해결합니다

Process Hacker와 System Informer는 풍부한 목록을 보여 주고 강제 종료를 할 수 있지만 감사 기능과 명령줄이 없습니다. sc.exe와 PsService는 모든 것을 할 수 있지만 아무것도 알려 주지 않습니다. PowerShell의 *-Service cmdlet은 스크립트에 쓸 수 있지만 얕습니다.

검색 가능한 목록, 모든 변경 전의 미리 보기, 시간에 따른 변경 기록을 함께 갖춘 도구는 없습니다. 그리고 첫 오후가 지난 뒤에도 이 도구를 컴퓨터에 두는 이유가 바로 그 기록입니다.

전체 비교
하는 일

창과 명령줄이 하나의 엔진 위에서 동작합니다

스크롤하지 말고 물어보세요

start:auto !status:running은 떠 있어야 하는데 떠 있지 않은 것입니다. 검색 상자와 bws list --query에서 같은 하나의 언어를 쓰며, 입력하는 동안 필드가 제안됩니다.

무슨 일이 일어나기 전에 계획을 보여 줍니다

모든 중지, 시작, 재시작, 시작 유형 변경은 함께 내려가는 서비스와 함께 미리 보이며, 미리 보기가 곧 실행되는 내용입니다.

무엇이 드리프트했고 누가 바꿨는지 알려 줍니다

bws snapshot create는 컴퓨터를 파일로 고정하고, bws snapshot diff는 그 이후 무엇이 바뀌었는지를, 단순히 시작되거나 중지된 것과 구분해 구성 기준으로 알려 줍니다. bws history는 System 로그에서 누가 시작 유형을 바꿨고 누가 서비스를 설치했는지 알려 줍니다. 창은 Audit... 아래에서 세 가지를 모두 합니다.

흔한 문제를 한 번에 해결합니다

Tools 탭과 bws tool fix는 인쇄되지 않는 프린터, 사라진 소리, 멈춘 검색 뒤에 있는 서비스를, 그것에 종속된 것과 함께, 다른 모든 작업과 같은 계획을 통해 재시작합니다.

멈추지 않는 서비스를 멈춥니다

먼저 정중하게 요청하고, 그것이 실패할 때만 프로세스를 종료하며, 그 안에서 실행 중인 다른 서비스를 모두 이름으로 알려 줍니다.

services.msc가 숨기는 것을 보여 줍니다

실행 파일에 서명한 주체와 Windows가 그것을 신뢰하는지, 트리거, 권한, 보안 설명자, 프로세스와 그 메모리를 보여 줍니다. 열로 보여 주고 검색 조건으로도 쓸 수 있습니다.

읽지 못했을 때 그렇다고 말합니다

읽지 못한 필드는 비어 있는 것으로 표시되지 않고 읽지 못한 것으로 보고됩니다. 관리자 권한 없이 만든 스냅샷은 파일 안에 그 사실을 기록합니다.

스크립트에 맞습니다

모든 명령에 --json, 모든 종료 방식에 종료 코드, 차이에서 드리프트가 발견되면 5.

파일 하나로, 오프라인으로 실행합니다

압축을 풀어 실행하거나 컴퓨터 전체에 설치합니다. 설치할 .NET이 없고, 인터넷에 접속하지 않습니다. 읽기에는 관리자 권한이 필요 없습니다. GPL-3.0.

services.msc에 없던 기능

어제 이후 무엇이 바뀌었는가

스냅샷은 한 시점의 컴퓨터 전체입니다. 모든 서비스와 드라이버의 시작 유형, 계정, 시작 경로, 파일의 해시와 서명자, 종속성, 트리거, 권한, 보안 설명자가 들어 있습니다. 한 줄에 필드 하나인 JSON이라서 저장소에 넣을 수 있고 git diff로 읽을 수 있습니다.

$ bws snapshot diff before.json --live --exit-code
Changed (2):
  Spooler  Print Spooler
    startType: Manual -> Automatic
    status: Stopped -> Running  (running state, not configuration)
  wlidsvc  Microsoft Account Sign-in Assistant
    status: Stopped -> Running  (running state, not configuration)

Added 0, removed 0, changed 2. Fields differing: 1 in configuration, 2 in running state.
  • 구성과 실행 상태를 따로 보고합니다. 하루 간격으로 만든 스냅샷 두 개는 우연히 실행 중인 것이 다르고, 그중 거의 아무것도 드리프트가 아닙니다. 읽어야 할 줄은 바뀐 시작 유형입니다.
  • 비교하지 못한 것은 숨기지 않고 나열합니다. 스냅샷 하나가 한 번도 읽지 않은 필드는 not compared로 나오므로, 아무것도 바뀌지 않았다라고 말하는 차이는 양쪽이 볼 수 있었던 범위에서 아무것도 바뀌지 않았다는 뜻입니다.
  • --exit-code는 구성이 다르면 5로 종료합니다. 따라서 예약 작업이 배포 때 스냅샷을 만들고, 컴퓨터가 드리프트한 첫날 밤에 누군가를 호출할 수 있습니다.
  • 컴퓨터 둘, 파일 둘. 스테이징 환경과 운영 환경에서 각각 스냅샷을 만들어 어디서든 비교하세요.
스냅샷과 드리프트의 동작 방식
계획 없이는 아무 일도 일어나지 않습니다

미리 보기가 곧 실행입니다

쓰기를 하는 모든 작업은 먼저 계획을 만들고, 같은 계획이 미리 보기, 종속 서비스로의 연쇄, 아무것도 누르기 전의 거부, 같은 일을 요청하는 명령줄, 그리고 나중의 되돌리기가 됩니다.

$ bws stop Winmgmt --dry-run --dependents
Plan: stop Winmgmt  (2 steps)
  1. stop  vmms      (would break otherwise)
  2. stop  Winmgmt   (asked for)

Warnings:
  - Stopping Winmgmt also stops one other entry: vmms
  - Winmgmt starts automatically, so it will be back after the next restart.
  • --dry-run 없이 실행하면 그 단계들이 그대로 실행됩니다. 같은 순서로, 같은 이유가 옆에 표시됩니다. 실제 작업을 위한 두 번째 코드 경로는 없습니다.
  • 함께 내려가는 것이 계획에 들어 있습니다. 망가질 서비스는 각각 별도의 단계가 되고, 컴퓨터에 필요한 것을 내릴 계획은 경고로 그 사실을 알려 줍니다.
  • 거부는 버튼보다 먼저 옵니다. 드라이버, 서비스 관리자가 중지를 받아들이지 않는 서비스, 시스템이 보호하는 프로세스는 계획을 만들 때 이유와 함께 거부됩니다. 창은 버튼을 회색으로 만들고 그 옆에 이유를 표시합니다.
  • 강제 중지는 두 단계이며, 두 번째는 조건부입니다. bws kill은 서비스에 중지를 요청하고, 그것이 통하지 않을 때만 프로세스를 종료하며, 그 안에 있는 다른 서비스를 모두 이름으로 알려 줍니다.
서비스가 멈추지 않을 때
2분 체험

명령줄에서

스크립트, 예약 작업, CI를 위한, 창과 같은 엔진입니다. 데이터는 표준 출력으로, 나머지는 모두 표준 오류로 나가므로 bws list --json | jq가 동작하고 경고가 JSON에 섞이지 않습니다.

bws list --query "start:auto !status:running"     떠 있어야 하는데 떠 있지 않은 것
bws list --query "file:missing"                   실행 파일이 사라진 서비스
bws list --query "signed:no peruser:no"           서명 없음, 세션별 복사본 제외
bws show Spooler                                  한 항목에 대해 알려진 모든 것
bws stop Winmgmt --dry-run --dependents           중지하면 무엇이 함께 내려가는지
bws kill Spooler --dry-run                        프로세스를 종료하면 무엇이 함께 사라지는지
bws start-type Spooler manual --dry-run           자동에서 빼면 무슨 일이 일어나는지
bws snapshot create before.json                   변경 전에 컴퓨터를 고정
bws snapshot diff before.json --live --exit-code  그 이후 바뀐 것, 구성이 바뀌었으면 5
bws history Spooler                               누가 언제 시작 유형을 바꿨는지
bws tool fix printer --dry-run                    멈춘 프린터의 빠른 해결이 하는 일
모든 명령, 옵션, 종료 코드
받기

압축을 풀어 실행하거나 설치하세요

Windows 10 1809 또는 Windows Server 2019 이상, 64비트. 압축 파일에는 설치 프로그램이 필요 없고 레지스트리에 아무것도 쓰지 않으며, 보기만 할 때는 관리자 권한이 필요 없습니다. 무엇이든 변경하려면 상승된 세션이 필요하며, 두 쪽 모두 조용히 실패하지 않고 그 사실을 알려 줍니다. 창은 Restart as admin을 제공합니다.

파일설명
BetterWindowsServices-win-x64.zip창입니다. 자체 포함 실행 파일 하나이며, 설치할 .NET이 없습니다
bws-cli-win-x64.zip명령줄입니다. 스크립트와 CI를 위한 자체 포함 실행 파일 하나입니다
BetterWindowsServices-win-x64.msi설치 프로그램입니다. 컴퓨터의 모든 계정을 위해 두 프로그램을 설치하고, 창은 시작 메뉴에, bws는 PATH에 추가합니다

실행 파일에는 Authenticode 서명이 있으므로, Windows는 알 수 없는 게시자를 경고하는 대신 게시자 이름을 표시합니다.