ค้นหาบริการ Windows ของคุณ ดูตัวอย่างทุกการเปลี่ยนแปลง และดูว่าอะไรดริฟต์ไปตั้งแต่เมื่อวาน

Better Windows Services คือ services.msc ที่สร้างใหม่สำหรับคนที่ดูแลเครื่อง Windows เป็นหน้าต่างกับบรรทัดคำสั่งที่ใช้เอนจินตัวเดียวกัน ถามเครื่องแทนการเลื่อนดู 800 แถว ดูว่าการเปลี่ยนแปลงจะทำอะไรก่อนกดอะไรทั้งนั้น และสิ่งที่ services.msc ไม่เคยมี: บันทึกทุกบริการลงไฟล์ แล้วอีกสัปดาห์ถามว่าอะไรเปลี่ยนไป

  • ฟรีและโอเพนซอร์ส GPL-3.0
  • ไฟล์เดียว หรือตัวติดตั้ง
  • ดูข้อมูลได้โดยไม่ต้องใช้สิทธิ์ผู้ดูแลระบบ
  • ไม่เชื่อมต่ออินเทอร์เน็ตเลย
หน้าต่างที่เลือกไว้ 5 รายการ พร้อมแผนการเริ่มบริการเหล่านั้นแสดงเหนือรายชื่อ: 5 ขั้นตอน หมายเหตุว่า 2 รายการอยู่ในสถานะนั้นอยู่แล้ว บรรทัด bws start ของแต่ละรายการ และปุ่ม Start 5 entries
รายการที่เลือก แผนที่แสดงก่อนจะมีอะไรเกิดขึ้น และบรรทัด bws ที่ขอสิ่งเดียวกันทุกประการ โปรแกรมใช้ภาษาอังกฤษ หน้าต่างจะอ่านไฟล์ภาษาที่วางไว้ข้างๆ จึงแปลได้โดยไม่ต้องสร้างใหม่
ลองใช้ครึ่งนาที

หน้าตาเวลาใช้งานจริง

เซสชันจริง บน Windows ที่ติดตั้งเป็นภาษาโปแลนด์ ชื่อที่แสดงมาจาก Windows จึงเป็นภาษาของ Windows ส่วนตัวหน้าต่างเองเป็นภาษาอังกฤษ

เลือก 4 รายการพร้อมแผนการเริ่มบริการเหล่านั้น การรีสตาร์ตแบบบังคับของ Local Session Manager ซึ่งแผนเตือนว่าเครื่องทำงานไม่ได้หากไม่มีมัน และขอให้พิมพ์ชื่อก่อนปุ่มจะใช้งานได้ คำถามเริ่มต้นใต้ช่องค้นหาที่ว่าง และ Print Spooler ที่พบโดยพิมพ์ชื่อบางส่วนแล้วเริ่มทำงาน
เลือก 4 รายการพร้อมแผนการเริ่มบริการ การรีสตาร์ตแบบบังคับที่ขอชื่อบริการที่เครื่องต้องใช้ คำถามใต้ช่องค้นหาที่ว่าง และ Print Spooler ที่ค้นพบโดยการพิมพ์แล้วเริ่มทำงาน
หน้าจอเปิดเครื่อง: การ์ดตัวเลข 3 ใบเกี่ยวกับเครื่องนี้ ได้แก่ บริการที่กำลังทำงาน บริการที่ตั้งให้เริ่มอัตโนมัติแต่ไม่ได้ขึ้นมา และบริการที่ตั้งให้เริ่มอัตโนมัติแต่ไฟล์หายไป พร้อมปุ่ม Show the list
เปิดมาพร้อมตัวเลขไม่กี่ตัวเกี่ยวกับเครื่องนี้ แต่ละตัวคือคำถาม คลิกแล้วคำถามจะไปอยู่ในช่องค้นหา
รายชื่อบริการที่มีรายการสามชุดอยู่เหนือช่องค้นหา ช่องค้นหาที่ว่าง ปุ่มตัวกรองที่กางออกเป็นแถวสำหรับสถานะ ประเภทการเริ่มต้น ลายเซ็น ความไม่สอดคล้อง และทริกเกอร์ และรายชื่ออยู่ด้านล่าง
ปุ่มตัวกรองเขียนลงในช่องค้นหา สิ่งที่คุณคลิกจึงเป็นคิวรีที่อ่านและแก้ไขได้
ทำไมถึงมีโปรแกรมนี้

services.msc แทบไม่เปลี่ยนเลยตั้งแต่ Windows 2000

ผู้ดูแลระบบใช้เวลาหลายชั่วโมงต่อสัปดาห์กับมัน และเจอกำแพงเดิมๆ ซ้ำแล้วซ้ำอีก

  • ไม่มีการค้นหา วิธีเดียวที่ใช้นำทางคือกระโดดไปที่ตัวอักษรแรกของชื่อที่แสดง
  • ไม่มีการกรอง ถามไม่ได้ว่า อะไรบ้างที่ตั้งให้เริ่มอัตโนมัติแต่ไม่ได้ทำงาน
  • ทีละแถว การรีสตาร์ต 12 บริการคือคลิกขวา 12 ครั้งและรอ 12 รอบ
  • “Stopping...” ไม่จบสิ้น ไม่มีทางออกนอกจาก Task Manager และการเดากระบวนการ
  • ไม่มีประวัติ ไม่มีใครรู้ว่าใครตั้งประเภทการเริ่มต้นเป็น Disabled และเมื่อไร
  • ข้อมูลที่ซ่อนอยู่ กระบวนการ ทริกเกอร์ สิทธิพิเศษ security descriptor และใครลงลายเซ็นไฟล์ปฏิบัติการ ทั้งหมดต้องใช้ sc.exe จากความจำ หรือเปิดรีจิสทรี
  • บรรทัดคำสั่งไม่เท่าเทียมกัน sc.exe มีไวยากรณ์จากยุค 90 และ Get-Service ที่มากับ Windows ใน Windows PowerShell 5.1 ไม่แสดงบัญชีที่บริการใช้รัน ไม่ต้องพูดถึงคำอธิบาย PowerShell 7 แสดงทั้งสองอย่าง แต่ต้องติดตั้งแยกต่างหาก

เครื่องมืออื่นแต่ละตัวแก้ได้เพียงบางส่วน

Process Hacker และ System Informer แสดงรายชื่อที่ละเอียดและบังคับปิดกระบวนการได้ แต่ไม่มีการตรวจสอบและไม่มีบรรทัดคำสั่ง sc.exe และ PsService ทำได้ทุกอย่างแต่ไม่บอกอะไรคุณเลย cmdlet *-Service ของ PowerShell เขียนสคริปต์ได้แต่ตื้น

ไม่มีเครื่องมือไหนรวมรายชื่อที่ค้นหาได้ ตัวอย่างก่อนทุกการเปลี่ยนแปลง และบันทึกว่าอะไรเปลี่ยนไปตามเวลา และบันทึกนั้นเองคือเหตุผลที่ควรเก็บโปรแกรมนี้ไว้ในเครื่องหลังจากบ่ายวันแรก

เปรียบเทียบฉบับเต็ม
ทำอะไรได้บ้าง

หน้าต่างและบรรทัดคำสั่งบนเอนจินเดียวกัน

ถามแทนการเลื่อนหา

start:auto !status:running คือ อะไรที่ควรทำงานแต่ไม่ได้ทำงาน ภาษาเดียวกัน ทั้งในช่องค้นหาและใน bws list --query พร้อมแนะนำฟิลด์ขณะพิมพ์

แสดงแผนก่อนจะมีอะไรเกิดขึ้น

ทุกการหยุด เริ่ม รีสตาร์ต และการเปลี่ยนประเภทการเริ่มต้นจะแสดงตัวอย่างพร้อมบริการที่จะล้มตามไปด้วย และตัวอย่างนั้นคือสิ่งที่ทำงานจริง

บอกว่าอะไรดริฟต์ และใครเปลี่ยน

bws snapshot create บันทึกสถานะเครื่องลงไฟล์ และ bws snapshot diff บอกว่าหลังจากนั้นอะไรเปลี่ยนไป โดยแยกการกำหนดค่าออกจากสิ่งที่แค่เริ่มหรือหยุด bws history บอกว่าใครเปลี่ยนประเภทการเริ่มต้นและใครติดตั้งบริการ จาก System log หน้าต่างทำทั้งสามอย่างภายใต้ Audit...

แก้ปัญหาที่พบบ่อยด้วยการกดครั้งเดียว

แท็บ Tools และ bws tool fix รีสตาร์ตบริการที่อยู่เบื้องหลังเครื่องพิมพ์ที่ไม่พิมพ์ เสียงที่หายไป หรือการค้นหาที่ค้าง พร้อมสิ่งที่ขึ้นอยู่กับมัน ผ่านแผนเดียวกับทุกอย่างอื่น

หยุดบริการที่หยุดไม่ลง

ขอดีๆ ก่อน และจบกระบวนการเฉพาะเมื่อวิธีนั้นล้มเหลว พร้อมบอกชื่อบริการอื่นทุกตัวที่อยู่ในกระบวนการนั้น

แสดงสิ่งที่ services.msc ซ่อนไว้

ใครลงลายเซ็นไฟล์ปฏิบัติการและ Windows เชื่อถือหรือไม่ ทริกเกอร์ สิทธิพิเศษ security descriptor กระบวนการและหน่วยความจำของมัน เป็นทั้งคอลัมน์และสิ่งที่ค้นหาได้

บอกเมื่ออ่านอะไรไม่ได้

ฟิลด์ที่อ่านไม่ได้จะรายงานว่าไม่ได้อ่าน ไม่เคยแสดงเป็นค่าว่าง สแนปช็อตที่สร้างโดยไม่มีสิทธิ์ผู้ดูแลระบบจะบอกเรื่องนี้ไว้ในไฟล์

ใช้ในสคริปต์ได้

--json ในทุกคำสั่ง รหัสออกสำหรับทุกการจบ และ 5 เมื่อ diff พบดริฟต์

รันจากไฟล์เดียว แบบออฟไลน์

แตกไฟล์แล้วรัน หรือติดตั้งให้ทั้งเครื่อง ไม่ต้องติดตั้ง .NET และไม่เชื่อมต่ออินเทอร์เน็ตเลย การอ่านไม่ต้องใช้สิทธิ์ผู้ดูแลระบบ GPL-3.0

สิ่งที่ services.msc ไม่เคยทำ

อะไรเปลี่ยนไปตั้งแต่เมื่อวาน

สแนปช็อตคือเครื่องทั้งเครื่อง ณ ช่วงเวลาหนึ่ง ทุกบริการและไดรเวอร์ พร้อมประเภทการเริ่มต้น บัญชี พาธการเปิดใช้งาน แฮชและผู้ลงลายเซ็นของไฟล์ การพึ่งพา ทริกเกอร์ สิทธิพิเศษ และ security descriptor เป็น 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 ดังนั้น diff ที่บอกว่า ไม่มีอะไรเปลี่ยน หมายถึงไม่มีอะไรเปลี่ยนในสิ่งที่ทั้งสองฝั่งมองเห็น
  • --exit-code จบด้วย 5 เมื่อการกำหนดค่าต่างกัน งานตามกำหนดเวลาจึงสร้างสแนปช็อตตอนติดตั้งใช้งานและแจ้งคนในคืนแรกที่เครื่องดริฟต์ได้
  • สองเครื่อง สองไฟล์ สร้างสแนปช็อตบนสเตจจิงหนึ่งชุดและบนโปรดักชันหนึ่งชุด แล้ว diff กันที่ไหนก็ได้
สแนปช็อตและดริฟต์ทำงานอย่างไร
ไม่มีอะไรเกิดขึ้นถ้าไม่มีแผน

ตัวอย่างคือการทำงานจริง

ทุกการดำเนินการที่เขียนข้อมูลจะสร้างแผนก่อน และแผนเดียวกันนั้นคือตัวอย่าง ลำดับบริการที่ล้มตามกัน การปฏิเสธก่อนที่คุณจะกดอะไร บรรทัดคำสั่งที่ขอสิ่งเดียวกัน และทางย้อนกลับหลังจากนั้น

$ 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 ขอให้บริการหยุดและจบกระบวนการของมันเฉพาะเมื่อวิธีนั้นไม่ได้ผล พร้อมบอกชื่อบริการอื่นทุกตัวที่อยู่ในนั้น
เมื่อบริการหยุดไม่ลง
ลองใช้สองนาที

จากบรรทัดคำสั่ง

เอนจินเดียวกับหน้าต่าง สำหรับสคริปต์ งานตามกำหนดเวลา และ CI ข้อมูลไปที่ standard output และอย่างอื่นทั้งหมดไปที่ standard error ดังนั้น 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 จะแสดงชื่อผู้เผยแพร่ แทนที่จะเตือนว่าเป็นผู้เผยแพร่ที่ไม่รู้จัก