Tìm trong các dịch vụ Windows, xem trước mọi thay đổi và biết điều gì đã lệch kể từ hôm qua

Better Windows Services là services.msc được xây dựng lại cho những người quản trị máy Windows - một cửa sổ và một dòng lệnh trên cùng một lõi. Hãy đặt câu hỏi cho máy thay vì cuộn qua tám trăm dòng. Xem một thay đổi sẽ làm gì trước khi bạn nhấn bất cứ thứ gì. Và phần mà services.msc chưa bao giờ có: đóng băng mọi dịch vụ vào một tệp, rồi một tuần sau hỏi điều gì đã thay đổi.

  • Miễn phí và mã nguồn mở, GPL-3.0
  • Một tệp, hoặc một trình cài đặt
  • Không cần quyền quản trị để xem
  • Không bao giờ kết nối với internet
Cửa sổ với năm mục được chọn và kế hoạch khởi động chúng hiển thị phía trên danh sách: năm bước, một ghi chú rằng hai trong số đó đã ở trạng thái ấy, một dòng bws start cho mỗi mục và nút Start 5 entries.
Các mục được chọn, một kế hoạch hiển thị trước khi có bất cứ điều gì xảy ra, và dòng bws yêu cầu chính xác điều tương tự. Chương trình nói tiếng Anh - cửa sổ đọc một tệp ngôn ngữ đặt bên cạnh nó, nên có thể dịch mà không cần biên dịch lại.
Nửa phút cùng nó

Nó trông ra sao khi dùng

Một phiên thật, trên Windows cài bằng tiếng Ba Lan - tên hiển thị đến từ Windows, nên bằng ngôn ngữ của nó. Bản thân cửa sổ nói tiếng Anh.

Bốn mục được chọn và kế hoạch khởi động chúng, một lần khởi động lại cưỡng bức Local Session Manager mà kế hoạch cảnh báo rằng máy không hoạt động nếu thiếu nó và yêu cầu nhập tên của nó trước khi nút hoạt động, các câu hỏi gợi ý bên dưới ô tìm kiếm trống, và Print Spooler được tìm thấy bằng cách gõ một phần tên rồi khởi động.
Bốn mục được chọn và kế hoạch khởi động chúng, một lần khởi động lại cưỡng bức yêu cầu nhập tên của dịch vụ mà máy cần, các câu hỏi bên dưới ô tìm kiếm trống, và Print Spooler được tìm thấy khi gõ rồi khởi động.
Màn hình mở đầu: ba thẻ con số về máy này - dịch vụ đang chạy, dịch vụ đặt tự khởi động nhưng chưa lên, và dịch vụ đặt tự khởi động nhưng tệp của nó đã mất - và một nút Show the list.
Nó mở ra với vài con số về máy này. Mỗi con số là một câu hỏi - nhấp vào, và câu hỏi đi vào ô tìm kiếm.
Danh sách dịch vụ với ba danh sách phía trên ô tìm kiếm, một ô tìm kiếm trống, các nút lọc mở thành từng hàng cho trạng thái, kiểu khởi động, chữ ký, điểm không khớp và trình kích hoạt, và danh sách bên dưới.
Các nút lọc ghi vào ô tìm kiếm, nên thứ bạn đã nhấp là một truy vấn mà bạn có thể đọc và sửa.
Vì sao nó tồn tại

services.msc hầu như không thay đổi kể từ Windows 2000

Quản trị viên mất hàng giờ mỗi tuần trong đó và va vào cùng những bức tường.

  • Không có tìm kiếm. Cách điều hướng duy nhất là nhảy tới chữ cái đầu của một tên hiển thị.
  • Không có bộ lọc. Không có cách nào để hỏi cho tôi xem những gì được đặt tự khởi động mà không chạy.
  • Mỗi lần một dòng. Khởi động lại mười hai dịch vụ là mười hai lần nhấp chuột phải và mười hai lần chờ.
  • "Stopping..." mãi mãi, không có lối thoát nào ngoài Task Manager và đoán tiến trình.
  • Không có lịch sử. Không ai biết ai đã đặt kiểu khởi động đó thành Disabled, hay khi nào.
  • Dữ liệu bị ẩn. Tiến trình, trình kích hoạt, đặc quyền, bộ mô tả bảo mật, ai đã ký tệp thực thi - tất cả đều cần sc.exe gõ theo trí nhớ, hoặc registry.
  • Không có tương đương trên dòng lệnh. sc.exe có cú pháp từ thập niên chín mươi, và Get-Service đi kèm Windows, trong Windows PowerShell 5.1, không hiển thị tài khoản mà dịch vụ chạy, nói gì đến mô tả. PowerShell 7 hiển thị cả hai và được cài riêng.

Các công cụ khác mỗi cái sửa một phần

Process Hacker và System Informer hiển thị một danh sách phong phú và có thể buộc kết thúc tiến trình, nhưng không có kiểm toán và không có dòng lệnh. sc.exe và PsService có thể làm mọi thứ và không cho bạn biết gì. Các cmdlet *-Service của PowerShell viết script được và nông cạn.

Không ai kết hợp một danh sách có thể tìm kiếm, một bản xem trước trước mỗi thay đổi, và một bản ghi về những gì đã thay đổi theo thời gian - và bản ghi đó là lý do để giữ công cụ này trên máy sau buổi chiều đầu tiên.

So sánh đầy đủ
Nó làm gì

Một cửa sổ và một dòng lệnh trên cùng một lõi

Hỏi thay vì cuộn

start:auto !status:running nghĩa là những gì lẽ ra phải chạy mà không chạy. Một ngôn ngữ, trong ô tìm kiếm và trong bws list --query, với các trường được gợi ý khi bạn gõ.

Cho xem kế hoạch trước khi có gì xảy ra

Mỗi lần dừng, khởi động, khởi động lại và đổi kiểu khởi động đều được xem trước cùng với các dịch vụ bị kéo theo, và bản xem trước chính là thứ sẽ chạy.

Cho biết điều gì đã lệch, và ai đã thay đổi

bws snapshot create đóng băng máy vào một tệp, và bws snapshot diff cho biết điều gì đã thay đổi từ đó, cấu hình tách riêng khỏi những gì chỉ vừa khởi động hoặc dừng. bws history cho biết, từ nhật ký System, ai đã đổi kiểu khởi động và ai đã cài một dịch vụ. Cửa sổ làm cả ba dưới Audit....

Sửa một sự cố phổ biến chỉ bằng một lần nhấn

Thẻ Tools và bws tool fix khởi động lại dịch vụ đằng sau máy in không in, âm thanh biến mất hoặc tìm kiếm bị treo, cùng với những gì phụ thuộc vào nó, qua cùng một kế hoạch như mọi thứ khác.

Dừng một dịch vụ không chịu dừng

Nó hỏi lịch sự trước và chỉ kết thúc tiến trình nếu điều đó thất bại, nêu tên mọi dịch vụ khác sống trong đó.

Cho xem những gì services.msc giấu

Ai đã ký tệp thực thi và Windows có tin nó không, trình kích hoạt, đặc quyền, bộ mô tả bảo mật, tiến trình và bộ nhớ của nó. Dưới dạng cột, và dưới dạng thứ để tìm kiếm.

Nói khi không đọc được điều gì

Một trường không đọc được sẽ được báo là chưa đọc, không bao giờ hiển thị là trống. Một bản chụp lấy khi không có quyền quản trị nói điều đó ngay trong tệp.

Khớp với script

--json ở mọi lệnh, một mã thoát cho mọi kết cục, và 5 khi một lần so sánh phát hiện sai lệch.

Chạy từ một tệp, ngoại tuyến

Giải nén và chạy, hoặc cài cho cả máy. Không có .NET để cài, và nó không bao giờ kết nối với internet. Đọc không cần quyền quản trị. GPL-3.0.

Phần mà services.msc chưa bao giờ làm

Điều gì đã thay đổi kể từ hôm qua

Một bản chụp là cả máy tại một thời điểm - mọi dịch vụ và trình điều khiển, với kiểu khởi động, tài khoản, đường dẫn khởi chạy, mã băm và người ký của tệp, các phụ thuộc, trình kích hoạt, đặc quyền và bộ mô tả bảo mật. Nó là JSON với một trường mỗi dòng, nên có thể đưa vào kho mã và git diff đọc được nó.

$ 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.
  • Cấu hình và trạng thái chạy được báo riêng. Hai bản chụp cách nhau một ngày khác nhau ở những gì tình cờ đang chạy và hầu như không có gì trong đó là sai lệch - kiểu khởi động đã thay đổi mới là dòng cần đọc.
  • Những gì không thể so sánh được liệt kê, không bị giấu. Một trường mà một bản chụp chưa bao giờ đọc sẽ hiện ra là not compared, nên một lần so sánh nói không có gì thay đổi nghĩa là không có gì thay đổi trong những gì cả hai phía đều thấy được.
  • --exit-code kết thúc bằng 5 khi cấu hình khác nhau, để một tác vụ theo lịch có thể chụp lúc triển khai và gọi ai đó vào đêm đầu tiên máy bị lệch.
  • Hai máy, hai tệp. Chụp một bản trên môi trường thử nghiệm và một bản trên môi trường sản xuất rồi so sánh chúng ở bất cứ đâu.
Bản chụp và sai lệch hoạt động ra sao
Không có gì xảy ra mà không có kế hoạch

Bản xem trước chính là việc thực thi

Mọi thao tác ghi đều dựng một kế hoạch trước, và chính kế hoạch ấy là bản xem trước, chuỗi các dịch vụ phụ thuộc, lời từ chối trước khi bạn nhấn bất cứ thứ gì, dòng lệnh yêu cầu điều tương tự, và đường quay lại sau đó.

$ 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.
  • Chạy không có --dry-run và đây là các bước, theo thứ tự đó, với cùng những lý do bên cạnh. Không có đường mã thứ hai cho việc thực thi thật.
  • Những gì bị kéo theo đều nằm trong kế hoạch. Các dịch vụ sẽ hỏng là những bước riêng, và một kế hoạch sẽ hạ gục thứ mà máy cần sẽ nói điều đó trong phần cảnh báo.
  • Lời từ chối đến trước nút bấm. Một trình điều khiển, một dịch vụ mà trình quản lý không chấp nhận lệnh dừng, một tiến trình mà hệ thống bảo vệ - bị từ chối khi kế hoạch được dựng, kèm lý do. Cửa sổ làm xám nút và nói lý do ngay bên cạnh.
  • Dừng cưỡng bức gồm hai bước, và bước thứ hai có điều kiện. bws kill yêu cầu dịch vụ dừng và chỉ kết thúc tiến trình của nó nếu điều đó không có tác dụng, nêu tên mọi dịch vụ khác sống trong đó.
Khi một dịch vụ không chịu dừng
Hai phút cùng nó

Từ dòng lệnh

Cùng lõi với cửa sổ, cho script, tác vụ theo lịch và CI. Dữ liệu đi tới đầu ra chuẩn và mọi thứ khác đi tới lỗi chuẩn, nên bws list --json | jq hoạt động và một cảnh báo không bao giờ rơi vào JSON của bạn.

bws list --query "start:auto !status:running"     những gì lẽ ra phải chạy mà không chạy
bws list --query "file:missing"                   các dịch vụ có tệp thực thi đã mất
bws list --query "signed:no peruser:no"           chưa ký, không kể các bản sao theo phiên
bws show Spooler                                  mọi thứ đã biết về một mục
bws stop Winmgmt --dry-run --dependents           việc dừng nó sẽ kéo theo những gì
bws kill Spooler --dry-run                        việc kết thúc tiến trình của nó sẽ cuốn theo những gì
bws start-type Spooler manual --dry-run           việc bỏ nó khỏi chế độ tự động sẽ gây ra gì
bws snapshot create before.json                   đóng băng máy trước một thay đổi
bws snapshot diff before.json --live --exit-code  điều gì đã thay đổi từ đó, 5 nếu cấu hình đã đổi
bws history Spooler                               ai đã đổi kiểu khởi động của nó, và khi nào
bws tool fix printer --dry-run                    cách sửa nhanh cho máy in bị treo sẽ làm gì
Mọi lệnh, tùy chọn và mã thoát
Lấy nó

Giải nén và chạy, hoặc cài đặt

Windows 10 1809 hoặc Windows Server 2019 trở lên, 64-bit. Các bản nén không cần trình cài đặt và không ghi gì vào registry, và việc xem không cần quyền quản trị. Thay đổi bất cứ thứ gì cần một phiên nâng quyền, và cả hai nửa đều nói điều đó thay vì lặng lẽ thất bại - cửa sổ đề nghị Restart as admin.

TệpĐó là gì
BetterWindowsServices-win-x64.zipCửa sổ, một tệp thực thi độc lập - không có .NET để cài
bws-cli-win-x64.zipDòng lệnh, một tệp thực thi độc lập, cho script và CI
BetterWindowsServices-win-x64.msiTrình cài đặt: cả hai chương trình cho mọi tài khoản trên máy, cửa sổ trong menu Start và bws trong PATH

Các tệp thực thi mang chữ ký Authenticode, nên Windows nêu tên nhà phát hành thay vì cảnh báo về một nhà phát hành không rõ.