Tham chiếu dòng lệnh
Mọi lệnh, mọi tùy chọn và mọi mã thoát của bws, phiên bản 0.5.0. bws --help là bản có thẩm quyền và dài hơn - trang này là cùng bề mặt đó, được bố trí để dễ đọc.
Các lệnh
Mười một lệnh. snapshot là một danh từ và theo sau nó là một từ nữa. tool cũng là một danh từ, và đứng một mình nó liệt kê các công cụ.
bws list [--query TEXT] [--signatures] [--memory] [--required-by] [--follow-network] [--json] [--timing]
bws show NAME [--full] [--follow-network] [--json] [--timing]
bws stop|start|restart NAME [--dry-run] [--dependents] [--timeout SECONDS] [--json] [--timing]
bws kill NAME [--force] [--restart] [--dry-run] [--dependents] [--timeout SECONDS] [--json] [--timing]
bws start-type NAME automatic|delayed|manual|disabled [--stop] [--dry-run] [--json] [--timing]
bws snapshot create [FILE] [--note TEXT] [--follow-network] [--force] [--json] [--timing]
bws snapshot diff EARLIER LATER [--exit-code] [--json] [--timing]
bws snapshot diff EARLIER --live [--exit-code] [--json] [--timing]
bws history [NAME] [--json] [--timing]
bws tool
bws tool fix
bws tool fix NAME [--dry-run] [--timeout SECONDS] [--json] [--timing]
bws license [--components]
bws --help
bws --version
Một lệnh gõ nhầm sẽ được đề nghị lệnh mà bạn có khả năng muốn dùng, và lần chạy kết thúc với mã 2 thay vì làm điều gì đó gần giống điều bạn yêu cầu.
$ bws lst
There is no command lst. Did you mean list?
Mỗi lệnh làm gì
list và show
list là cả máy, được thu hẹp bởi --query. show là một mục với mọi thứ đã biết về nó - chữ ký, đặc quyền, bộ mô tả bảo mật và bộ nhớ, tất cả đều được đọc mỗi lần, vì với một mục thì việc đó tốn khoảng sáu mươi mili giây còn với cả máy thì tốn một giây. Các trường thực sự trống bị bỏ ra trừ khi bạn truyền --full. Một trường không ai đọc được thì được in trong cả hai trường hợp, vì bỏ nó đi sẽ trông như một câu trả lời.
stop, start và restart
Mỗi lệnh dựng một kế hoạch và thực hiện nó. --dry-run in kế hoạch và không thay đổi gì, --dependents đưa các dịch vụ sẽ hỏng vào đó thành những bước riêng, và --timeout nói một bước được phép trôi qua bao lâu không có tiến triển. Trình điều khiển bị từ chối chứ không thử, vì dừng một trình điều khiển nhân thường không thể hoàn tác nếu không khởi động lại.
kill - cho một dịch vụ không chịu dừng
Nó yêu cầu dịch vụ dừng và kết thúc tiến trình đằng sau nó chỉ khi điều đó không có tác dụng, nên một mục tự dừng thì không bao giờ bị kết thúc. Kết thúc một tiến trình kéo theo mọi dịch vụ khác sống trong tiến trình đó, dù chúng đã dừng trước hay chưa, và bản xem trước nêu tên chúng và nêu tiến trình bằng số. --force bỏ qua bước lịch sự và bản xem trước khi đó hiển thị một bước thay vì hai. --restart đưa mọi thứ trở lại sau đó.
Windows viết ý tưởng này theo cách khác. --force trên Stop-Service nghĩa là "ngay cả khi có thứ phụ thuộc vào nó", điều mà --dependents làm ở đây. Đó là lý do đây là một lệnh riêng chứ không phải một tùy chọn của stop.
start-type - một thiết lập, không phải một cú di chuyển
Nó nói trình quản lý sẽ làm gì với một mục ở lần khởi động tiếp theo, và không có --stop nó không di chuyển gì: một mục đang chạy vẫn chạy, một mục đã dừng vẫn dừng, và kế hoạch nói điều đó. disabled là cái đáng dừng lại suy nghĩ, vì nó ngăn trình quản lý khởi động mục hoàn toàn, kể cả theo yêu cầu cho thứ khác cần nó. delayed là tự động, được khởi động muộn hơn một chút so với các mục tự động khác - từ mà start:delayed hỏi trong một truy vấn - và Windows từ chối nó với một mục trong nhóm thứ tự tải, điều mà kế hoạch nói trước khi có gì xảy ra. Mỗi trong bốn kiểu ghi việc mục có khởi động muộn hay không, như sc.exe làm. --stop, chỉ bên cạnh disabled, dừng mục trong cùng kế hoạch sau khi thiết lập được ghi.
snapshot create và snapshot diff
create luôn đọc chữ ký và mã băm, vì một bản chụp được giữ lại và so sánh sau, và một bản không có chúng, so với một bản có chúng, sẽ trông như thể máy đã thay đổi. diff nói điều gì đã thay đổi đi từ tệp thứ nhất sang tệp thứ hai, hoặc từ một tệp sang máy này với --live. Trang về bản chụp có định dạng và lập luận.
history - ai đã thay đổi, từ nhật ký System
Các lần đổi kiểu khởi động và cài đặt từ nhật ký System, mới nhất trước, cùng tài khoản mà Windows đã ghi lại. Dòng đầu tiên nói nhật ký lùi xa đến đâu và có bị xóa không, vì một lịch sử chỉ dài bằng nhật ký. Với một tên, đó là các lần đổi kiểu khởi động của dịch vụ đó - các lần cài đặt chỉ được liệt kê khi không có tên, vì Windows ghi một lần cài đặt dưới tên hiển thị và không bao giờ dưới tên dịch vụ. Một tài khoản được nêu tên ở nơi máy này tự nêu được và hiển thị dưới dạng SID của nó nếu không, và các kiểu khởi động đến bằng những từ Windows đã viết.
tool - câu trả lời dựng sẵn cho các sự cố phổ biến
Chính những công cụ mà cửa sổ hiển thị trên thẻ Tools. bws tool liệt kê chúng và bws tool fix liệt kê các cách sửa nhanh: printer, sound, indexing và search, mỗi cái là một lần khởi động lại một dịch vụ Windows cùng với những gì phụ thuộc vào nó, được chọn vì chính các trang khắc phục sự cố của Microsoft đề xuất nó. bws tool fix printer chính xác là bws restart Spooler --dependents - cùng kế hoạch, cùng đầu ra và cùng mã thoát - và như mọi lệnh ở đây thay đổi gì đó, nó không hỏi trước, nên --dry-run là cách để xem trước khi nó chạy.
license - bên trong tệp bạn đã tải về có gì
Nó không đọc gì cả - không trình quản lý dịch vụ, không đĩa, không mạng - và trả lời từ một sổ đăng ký được biên dịch vào tệp thực thi. --components biến thông báo thành mọi thành phần cùng phiên bản, giấy phép và nguồn gốc của nó. Cùng tập hợp mà bảng kê vật liệu phát hành bên cạnh bản tải xuống mang, vì cả hai được dựng từ một sổ đăng ký, và là lý do nó đáng có: chương trình là một tệp độc lập, nên bên cạnh nó không có gì để một trình quét đọc.
Ví dụ
Các kế hoạch dưới đây đã được kiểm tra bằng --dry-run với chương trình mà trang này mô tả. Một lệnh thay đổi gì đó không hỏi trước, nên --dry-run là cách để xem trước khi nó chạy. Spooler đại diện cho bất kỳ dịch vụ nào - hãy đặt tên dịch vụ của bạn vào chỗ đó.
Tìm và đọc
bws list mọi dịch vụ và trình điều khiển trên máy này
bws list --query "start:auto !status:running" những gì lẽ ra phải chạy mà không chạy
bws list --query "status:running" --memory tiến trình của mỗi mục đang chạy đang dùng gì
bws show Spooler mọi thứ đã biết về một mục
bws show Spooler --full cả các trường thực sự trống
Xem trước, rồi mới thay đổi
bws restart Spooler --dry-run chỉ kế hoạch, không gì khác
bws restart Spooler --dependents khởi động lại nó cùng những gì phụ thuộc vào nó
bws stop Spooler --dependents --timeout 120 cho phép hai phút mỗi bước không có tiến triển
bws start-type WSearch delayed --dry-run khởi động muộn hơn một chút so với các mục tự động khác
bws start-type Spooler disabled --stop vô hiệu hóa và dừng trong một kế hoạch
Một dịch vụ không chịu dừng
bws kill Spooler --dry-run tiến trình, và mọi dịch vụ sống trong đó
bws kill Spooler --restart chỉ kết thúc tiến trình nếu lệnh dừng thất bại, rồi đưa mọi thứ trở lại
bws kill Spooler --force --dry-run một bước thay vì hai: tiến trình bị kết thúc ngay
Bản chụp và sai lệch
bws snapshot create before.json --note "before the patch" đóng băng máy, kèm một ghi chú lưu bên trong
bws snapshot diff before.json after.json hai tệp - hai ngày, hoặc hai máy
bws snapshot diff before.json --live tệp so với máy này như hiện giờ
bws snapshot diff before.json --live --exit-code như trên, kết thúc bằng 5 nếu cấu hình đã lệch
Ai đã thay đổi
bws history mọi lần đổi kiểu khởi động và cài đặt mà nhật ký System lưu
bws history Spooler các lần đổi kiểu khởi động của một dịch vụ
bws history --json như trên dưới dạng tài liệu, kèm nhật ký và thay đổi
Sửa nhanh
bws tool các công cụ hiện có
bws tool fix các cách sửa nhanh, và dịch vụ đằng sau mỗi cách
bws tool fix sound --dry-run kế hoạch khởi động lại hai dịch vụ âm thanh
bws tool fix printer khởi động lại Print Spooler cùng những gì phụ thuộc vào nó
Bên trong tệp có gì
bws license --components mọi thành phần, phiên bản, giấy phép và nguồn gốc của nó
bws --version phiên bản của tệp thực thi này
Trong một script PowerShell
# các mục lẽ ra phải chạy mà không chạy, dưới dạng đối tượng
bws list --query "start:auto !status:running" --json | ConvertFrom-Json | Select-Object serviceName, displayName, status
# các tệp chưa ký, vào một bảng tính
bws list --query "signed:no" --json | ConvertFrom-Json | Select-Object serviceName, binaryPath | Export-Csv unsigned.csv -NoTypeInformation
# một dịch vụ cần gì
(bws show Spooler --json | ConvertFrom-Json).dependsOn
# một lần kiểm tra hằng đêm rẽ nhánh theo mã thoát
bws snapshot diff C:\baselines\web01.json --live --exit-code > $null
switch ($LASTEXITCODE) {
0 { 'no configuration drift' }
5 { 'the configuration drifted' }
default { "no clean answer, exit code $LASTEXITCODE" }
}
Trong cmd và tệp batch
rem lệnh thứ hai chỉ khi lệnh đầu không kết thúc sạch
bws restart Spooler || echo the restart did not end cleanly
rem trong tệp batch bật delayed expansion, dấu ! cần dấu ^
bws list --query "start:auto ^!status:running"
Tùy chọn
18 tùy chọn. Cột thứ ba là các lệnh mà mỗi tùy chọn thuộc về - một tùy chọn truyền cho lệnh không dùng đến nó là một lỗi có danh sách đó trong đó, chứ không phải một cờ bị lặng lẽ bỏ qua.
| Tùy chọn | Nó làm gì | Nơi nó hoạt động |
|---|---|---|
--query | Thu hẹp danh sách bằng ngôn ngữ truy vấn. | list |
--signatures | Đọc ai đã ký mỗi tệp thực thi và Windows có tin nó không. Mất vài giây trên cả máy, nên tắt trừ khi được yêu cầu - và một truy vấn về chữ ký tự bật nó. | list |
--memory | Đọc tiến trình của mỗi mục đang chạy đang dùng gì. Mặc định tắt vì đây là một phép đo chứ không phải một thiết lập: một giây sau nó đã khác. | list |
--required-by | Đọc những mục nào hỏng nếu dừng một mục, hỏi thẳng Windows chứ không suy ra từ những gì mọi thứ khai báo. Một lệnh gọi cho mỗi mục, nên tắt trừ khi được yêu cầu. show và snapshot create luôn đọc nó. | list |
--follow-network | Cho phép công cụ vươn ra ngoài máy này - một đường dẫn khởi chạy nằm trên thư mục chia sẻ của người khác, và một chứng chỉ mà máy này chưa có. Mặc định tắt vì an toàn: một thư mục chia sẻ không truy cập được tốn hai mươi mốt giây và xác thực bằng danh tính của người chạy nó, còn việc lấy chứng chỉ là một kết nối tới bên thứ ba giữa một danh sách bình thường. Không có nó, một chữ ký được kiểm tra với những gì có ở đây, và một kết quả có thể do không nhìn mà ra được báo là chưa đọc chứ không phải một phán quyết. | list, show, snapshot create |
--force | Với kill, kết thúc tiến trình ngay lập tức mà không hỏi lịch sự - bản xem trước khi đó hiển thị một bước thay vì hai. Với snapshot create, thay thế một bản chụp đã có - một tệp không phải bản chụp không bao giờ bị thay thế. | snapshot create, kill |
--restart | Với kill, đưa mục trở lại khi tiến trình đã mất, cùng mọi thứ đã dùng chung nó. | kill |
--stop | Với start-type, và chỉ bên cạnh disabled, dừng mục trong cùng kế hoạch sau khi thiết lập được ghi. Kiểu khởi động thay đổi lần khởi động tiếp theo và không thay đổi gì ngay bây giờ, nên không có nó, một mục đang chạy được đặt thành disabled vẫn tiếp tục chạy. | start-type |
--full | Với show, in cả các trường thực sự trống. Một trường không ai đọc được thì được in trong cả hai trường hợp. | show |
--json | Cùng tài liệu đó, máy đọc được, trên đầu ra chuẩn. | list, show, stop, start, restart, start-type, snapshot create, snapshot diff, kill, history, tool fix NAME |
--note | Bản chụp được tạo ra để làm gì, lưu bên trong tệp. | snapshot create |
--exit-code | Kết thúc bằng mã 5 khi cấu hình khác nhau - một mục được thêm hoặc bị xóa, hoặc một mục được thiết lập khác. Riêng trạng thái chạy không được tính. Mặc định tắt, để một script chỉ muốn in các khác biệt không bị vấp chỉ vì tìm thấy một vài cái. | snapshot diff |
--live | So sánh tệp với máy này như hiện giờ, thay vì với một tệp thứ hai. | snapshot diff |
--timing | Mỗi phần của việc đọc mất bao lâu, trên lỗi chuẩn. | list, show, stop, start, restart, start-type, snapshot create, snapshot diff, kill, history, tool fix NAME |
--dry-run | In kế hoạch và không thay đổi gì. Đó là cùng một kế hoạch mà lần chạy thật thực thi - không có đường mã thứ hai cho việc thực thi thật. | stop, start, restart, start-type, kill, tool fix NAME |
--dependents | Đưa các dịch vụ sẽ hỏng vào kế hoạch dưới dạng những bước riêng. | stop, restart, kill |
--timeout | Một bước được phép trôi qua bao lâu không có tiến triển trước khi bị bỏ, đếm lại mỗi khi dịch vụ báo tiến triển. Sáu mươi giây trừ khi bạn nói khác. Một dịch vụ cứ báo tiến triển sẽ được theo dõi bao lâu cũng được. Hết thời gian là kết thúc việc theo dõi chứ không phải một thất bại, và báo cáo nói mục đã bị để lại ở đâu. | stop, start, restart, kill, tool fix NAME |
--components | Với license, biến thông báo thành mọi thành phần bên trong tệp thực thi này cùng phiên bản, giấy phép và nguồn gốc của nó. Cùng tập hợp mà bảng kê vật liệu phát hành bên cạnh bản tải xuống mang, vì cả hai được dựng từ một sổ đăng ký. | license |
Mã thoát
6 kết cục, và mỗi kết cục là một việc khác nhau để script làm. 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.
Mọi tài liệu JSON là ASCII thuần: một chữ cái ngoài ASCII được viết thành một chuỗi thoát sáu ký tự mà mọi trình đọc JSON biến trở lại thành chữ cái, nên bws list --json > file.json là UTF-8 hợp lệ và | ConvertFrom-Json đọc đúng bất kể bảng mã của bảng điều khiển. Trong văn bản mà con người đọc, một ký tự sẽ di chuyển thiết bị đầu cuối thay vì in ra - một tab, một ngắt dòng, một chuỗi thoát, một ký tự ghi đè hướng - được hiển thị dưới dạng điểm mã của nó, <U+001B>.
-- kết thúc các tùy chọn, nên một dịch vụ có tên bắt đầu bằng dấu gạch ngang vẫn có thể được nêu tên: bws show -- -odd. Các dòng lệnh mà công cụ đưa cho bạn được viết cho PowerShell: một tên có dấu cách đặt trong nháy kép, cmd đọc giống vậy, và một tên mà PowerShell sẽ mở rộng bên trong chúng, như MSSQL$SQLEXPRESS, đặt trong nháy đơn.
| Mã | Ý nghĩa |
|---|---|
0 | Xong, và mọi thứ đã đến nơi cần đến. |
1 | Công cụ đã thất bại - nó không thể làm điều được yêu cầu, vì lý do thuộc về công cụ chứ không phải kế hoạch. |
2 | Dòng lệnh sai. Một lệnh gõ nhầm sẽ được đề nghị lệnh mà bạn có khả năng muốn dùng. |
3 | Kế hoạch tốt, đã chạy, và có thứ trong đó không đến được nơi cần đến - trình quản lý từ chối, hoặc phiên không có quyền đối với nó. |
4 | Ai đó đã dừng lần chạy bằng tay. Khác không ngay cả khi mọi bước vẫn đã đến nơi, để một lớp bao bọc không coi một lần chạy bị ngắt là sạch. |
5 | Một lần so sánh đã chạy và thấy cấu hình đã lệch - một mục được thêm hoặc bị xóa, hoặc một mục được thiết lập khác. Chỉ riêng trạng thái chạy không phải là sai lệch. Chỉ với --exit-code, vì sai lệch là điều công cụ này tồn tại để tìm, và tìm thấy nó không phải là một thất bại. |
Ctrl+C có ba mức, mỗi mức nói mức tiếp theo tốn gì. Mức đầu ngừng tiến tới và vẫn trả lại những gì đã lấy, mức hai để mọi thứ như hiện trạng và vẫn in báo cáo, mức ba kết thúc tiến trình. Một lần chạy bị dừng bằng tay kết thúc với 4 ngay cả khi mọi bước vẫn đã đến nơi.
Đóng cửa sổ console được tính là Ctrl+C đầu tiên. Windows cho một chương trình năm giây sau đó, và trong thời gian ấy nó ngừng tiến tới và trả lại những gì nó đã hạ gục. Đăng xuất và tắt máy kết thúc nó mà không có cảnh báo nào để nó hành động, và một phiên từ xa bị rớt có thể cũng vậy.
Trong một tác vụ theo lịch
Dạng mà công cụ này được xây dựng cho: đóng băng máy khi biết nó tốt, rồi mỗi đêm hỏi xem nó có còn như vậy không.
# ngày máy bắt đầu đưa vào hoạt động
bws snapshot create C:\baselines\web01.json --note "after the build"
# mỗi đêm, từ một tác vụ theo lịch
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
# 0 - không có sai lệch cấu hình
# 5 - cấu hình đã lệch, và drift.json nói là gì
# 3 - đã chạy và không đọc được hết, nên câu trả lời chỉ là một phần
Cửa sổ là nửa còn lại của cùng lõi: BetterWindowsServices-win-x64.zip chứa nó, và trang tải xuống nói mỗi bản nén là gì.
Đối số của cửa sổ
BetterWindowsServices.exe nhận một đối số dành cho con người: --catalogue mở một tờ dành cho nhà phát triển hiển thị mọi thành phần của cửa sổ ở mọi trạng thái, và không đọc gì từ máy của bạn. Đối số thứ hai, --carry, là cách một cửa sổ chuyển những gì nó đang hiển thị cho bản sao của chính nó mà nó khởi động lại với quyền quản trị. Không ai gõ nó, và bất cứ thứ gì trong đó mà cửa sổ đó không thể đã viết ra đều bị từ chối.