ค้นหาบริการ Windows ของคุณ ดูตัวอย่างทุกการเปลี่ยนแปลง และดูว่าอะไรดริฟต์ไปตั้งแต่เมื่อวาน
Better Windows Services คือ services.msc ที่สร้างใหม่สำหรับคนที่ดูแลเครื่อง Windows เป็นหน้าต่างกับบรรทัดคำสั่งที่ใช้เอนจินตัวเดียวกัน ถามเครื่องแทนการเลื่อนดู 800 แถว ดูว่าการเปลี่ยนแปลงจะทำอะไรก่อนกดอะไรทั้งนั้น และสิ่งที่ services.msc ไม่เคยมี: บันทึกทุกบริการลงไฟล์ แล้วอีกสัปดาห์ถามว่าอะไรเปลี่ยนไป
- ฟรีและโอเพนซอร์ส GPL-3.0
- ไฟล์เดียว หรือตัวติดตั้ง
- ดูข้อมูลได้โดยไม่ต้องใช้สิทธิ์ผู้ดูแลระบบ
- ไม่เชื่อมต่ออินเทอร์เน็ตเลย
bws ที่ขอสิ่งเดียวกันทุกประการ โปรแกรมใช้ภาษาอังกฤษ หน้าต่างจะอ่านไฟล์ภาษาที่วางไว้ข้างๆ จึงแปลได้โดยไม่ต้องสร้างใหม่หน้าตาเวลาใช้งานจริง
เซสชันจริง บน Windows ที่ติดตั้งเป็นภาษาโปแลนด์ ชื่อที่แสดงมาจาก Windows จึงเป็นภาษาของ Windows ส่วนตัวหน้าต่างเองเป็นภาษาอังกฤษ
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
อะไรเปลี่ยนไปตั้งแต่เมื่อวาน
สแนปช็อตคือเครื่องทั้งเครื่อง ณ ช่วงเวลาหนึ่ง ทุกบริการและไดรเวอร์ พร้อมประเภทการเริ่มต้น บัญชี พาธการเปิดใช้งาน แฮชและผู้ลงลายเซ็นของไฟล์ การพึ่งพา ทริกเกอร์ สิทธิพิเศษ และ 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 จะแสดงชื่อผู้เผยแพร่ แทนที่จะเตือนว่าเป็นผู้เผยแพร่ที่ไม่รู้จัก

