Komut satırı başvurusu
bws'nin her komutu, her seçeneği ve her çıkış kodu, sürüm 0.5.0. Yetkili olan bws --help'tir ve daha uzundur - bu sayfa aynı yüzeydir, okunmak üzere düzenlenmiş.
Komutlar
On bir komut. snapshot bir isimdir ve arkasından bir sözcük alır. tool da bir isimdir ve tek başına araçları listeler.
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
Yanlış yazılmış bir komuta büyük olasılıkla kastettiğiniz komut önerilir ve çalıştırma, istediğinize yakın bir şey yapmak yerine 2 koduyla biter.
$ bws lst
There is no command lst. Did you mean list?
Her komut ne yapar
list ve show
list tüm makinedir, --query ile daraltılmış. show, hakkında bilinen her şeyle tek bir öğedir - imza, ayrıcalıklar, güvenlik tanımlayıcısı ve bellek; hepsi her seferinde okunur, çünkü tek bir öğede bu yaklaşık altmış milisaniyeye mal olurken tüm makinede bir saniyeye mal olur. Gerçekten boş olan alanlar, --full vermedikçe bırakılır. Kimsenin okuyamadığı bir alan her durumda yazdırılır, çünkü bırakılması bir yanıt gibi görünürdü.
stop, start ve restart
Her biri bir plan kurar ve yürütür. --dry-run planı yazdırır ve hiçbir şeyi değiştirmez, --dependents bozulacak hizmetleri plana kendi başlarına birer adım olarak koyar, --timeout ise bir adımın ilerleme olmadan ne kadar gidebileceğini söyler. Sürücüler denenmez, reddedilir; çünkü bir çekirdek sürücüsünü durdurmak çoğu zaman yeniden başlatma olmadan geri alınamaz.
kill - durmayan bir hizmet için
Hizmetten durmasını ister ve arkasındaki süreci yalnızca bu işe yaramazsa sonlandırır; yani kendiliğinden duran bir öğe asla sonlandırılmaz. Bir süreci sonlandırmak, o süreçte yaşayan diğer her hizmeti, önce durmuş olsun olmasın, beraberinde götürür ve önizleme bunları ve süreci numarasıyla adlandırır. --force kibar adımı atlar ve önizleme o zaman iki yerine bir adım gösterir. --restart sonrasında her şeyi geri getirir.
Windows bu fikri farklı yazar. Stop-Service üzerinde --force "ona bağlı bir şey olsa bile" demektir; burada --dependents'in yaptığı budur. Bu yüzden bu, stop üzerinde bir seçenek değil, kendi başına bir komuttur.
start-type - bir ayar, bir hareket değil
Yöneticinin bir öğeyle bir sonraki açılışta ne yapacağını söyler ve --stop olmadan hiçbir şeyi taşımaz: çalışan bir öğe çalışmaya devam eder, durmuş olan durmuş kalır ve plan bunu söyler. disabled, üzerinde durulmaya değer olandır; çünkü yöneticinin öğeyi hiç başlatmasını, ona ihtiyaç duyan başka bir şey için isteğe bağlı olarak başlatmasını da dahil, engeller. delayed otomatiktir, diğer otomatik öğelerden biraz sonra başlatılır - bir sorguda start:delayed'in sorduğu sözcük - ve Windows bunu yükleme sırası grubundaki bir öğe için reddeder; bunu plan, bir şey olmadan önce söyler. Dördünün her biri, sc.exe'nin yaptığı gibi, öğenin geç başlayıp başlamadığını yazar. --stop, yalnızca disabled ile birlikte, ayar yazıldıktan sonra öğeyi aynı planda durdurur.
snapshot create ve snapshot diff
create imzaları ve karmaları her zaman okur; çünkü bir anlık görüntü saklanır ve sonra karşılaştırılır, bunlar olmayan biri, bunlarla birlikte olan biriyle karşılaştırıldığında makine değişmiş gibi görünürdü. diff, ilk dosyadan ikinciye giderken ya da --live ile bir dosyadan bu makineye giderken neyin değiştiğini söyler. Anlık görüntü sayfası biçimi ve gerekçeyi içerir.
history - kimin değiştirdiği, System günlüğünden
System günlüğünden başlangıç türü değişiklikleri ve kurulumlar; en yeniler önce, Windows'un kaydettiği hesapla birlikte. İlk satır günlüğün ne kadar geriye gittiğini ve temizlenip temizlenmediğini söyler; çünkü bir geçmiş ancak günlük kadar uzundur. Bir adla, o hizmetin başlangıç türü değişiklikleridir - kurulumlar yalnızca adsız listelenir, çünkü Windows bir kurulumu görünen ad altında kaydeder ve asla hizmet adı altında değil. Bir hesap, bu makinenin onu kendi başına adlandırabildiği yerde adlandırılır, aksi halde SID'i olarak gösterilir ve başlangıç türleri Windows'un yazdığı sözcüklerle gelir.
tool - yaygın sorunlara hazır yanıtlar
Pencerenin Tools sekmesinde gösterdiği araçların aynısı. bws tool onları listeler, bws tool fix ise hızlı düzeltmeleri listeler: printer, sound, indexing ve search; her biri, Microsoft'un kendi sorun giderme sayfalarının önerdiği için seçilmiş, tek bir Windows hizmetinin ona bağlı olanlarla birlikte yeniden başlatılmasıdır. bws tool fix printer tam olarak bws restart Spooler --dependents'tir - aynı plan, aynı çıktı ve aynı çıkış kodları - ve buradaki bir şeyi değiştiren her komut gibi önce sormaz, bu yüzden çalışmadan önce bakmanın yolu --dry-run'dır.
license - indirdiğiniz dosyanın içinde ne var
Hiçbir şey okumaz - hizmet yöneticisi yok, disk yok, ağ yok - ve yürütülebilir dosyaya derlenmiş bir kayıttan yanıt verir. --components bildirimi her bileşene, sürümü, lisansı ve nereden geldiğiyle açar. İndirmenin yanında yayımlanan malzeme listesinin taşıdığı aynı küme, çünkü ikisi de tek bir kayıttan üretilir ve buna değmesinin nedeni de budur: program tek bir bağımsız dosyadır, yani yanında bir tarayıcının okuyabileceği hiçbir şey yoktur.
Örnekler
Aşağıdaki planlar, bu sayfanın anlattığı programa karşı --dry-run ile denetlendi. Bir şeyi değiştiren komut önce sormaz, bu yüzden çalışmadan önce bakmanın yolu --dry-run'dır. Spooler herhangi bir hizmeti temsil eder - yerine kendi hizmetinizin adını koyun.
Bul ve oku
bws list bu makinedeki her hizmet ve sürücü
bws list --query "start:auto !status:running" açık olması gereken ve olmayan
bws list --query "status:running" --memory çalışan her öğenin işleminin ne kullandığı
bws show Spooler bir öğe hakkında bilinen her şey
bws show Spooler --full gerçekten boş olan alanlar da
Önce bak, sonra değiştir
bws restart Spooler --dry-run plan ve başka hiçbir şey
bws restart Spooler --dependents onu, ona bağlı olanlarla birlikte yeniden başlat
bws stop Spooler --dependents --timeout 120 ilerleme olmadan adım başına iki dakikaya izin ver
bws start-type WSearch delayed --dry-run diğer otomatik öğelerden biraz sonra başlat
bws start-type Spooler disabled --stop devre dışı bırak ve tek planda durdur
Durmayan bir hizmet
bws kill Spooler --dry-run süreç ve içinde yaşayan her hizmet
bws kill Spooler --restart süreci yalnızca durdurma başarısız olursa sonlandır, sonra hepsini geri getir
bws kill Spooler --force --dry-run iki yerine bir adım: süreç hemen sonlandırıldı
Anlık görüntüler ve sapma
bws snapshot create before.json --note "before the patch" makineyi dondur, içinde saklanan bir notla
bws snapshot diff before.json after.json iki dosya - iki gün ya da iki makine
bws snapshot diff before.json --live dosya, bu makineyle şu anki haliyle
bws snapshot diff before.json --live --exit-code aynısı, yapılandırma saptıysa 5 ile biter
Kimin değiştirdiği
bws history System günlüğünün tuttuğu her başlangıç türü değişikliği ve kurulum
bws history Spooler tek bir hizmetin başlangıç türü değişiklikleri
bws history --json aynısı bir belge olarak, günlük ve değişikliklerle
Hızlı düzeltmeler
bws tool mevcut araçlar
bws tool fix hızlı düzeltmeler ve her birinin arkasındaki hizmet
bws tool fix sound --dry-run iki ses hizmetini yeniden başlatma planı
bws tool fix printer Print Spooler'ı ona bağlı olanlarla yeniden başlat
Dosyanın içinde ne var
bws license --components her bileşen, sürümü, lisansı ve nereden geldiği
bws --version bu yürütülebilir dosyanın sürümü
Bir PowerShell betiğinde
# açık olması gereken ve olmayan öğeler, nesne olarak
bws list --query "start:auto !status:running" --json | ConvertFrom-Json | Select-Object serviceName, displayName, status
# imzasız dosyalar, bir elektronik tabloya
bws list --query "signed:no" --json | ConvertFrom-Json | Select-Object serviceName, binaryPath | Export-Csv unsigned.csv -NoTypeInformation
# bir hizmetin neye ihtiyaç duyduğu
(bws show Spooler --json | ConvertFrom-Json).dependsOn
# çıkış koduna göre dallanan gecelik bir denetim
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" }
}
cmd'de ve bir toplu iş dosyasında
rem ikinci bir komut yalnızca ilki temiz bitmediğinde
bws restart Spooler || echo the restart did not end cleanly
rem gecikmeli genişletmenin açık olduğu bir toplu iş dosyasında ! için bir şapka işareti gerekir
bws list --query "start:auto ^!status:running"
Seçenekler
18 tane. Üçüncü sütun, her birinin ait olduğu komutlardır - işe yaramayacağı bir komuta verilen seçenek, sessizce yok sayılan bir bayrak değil, içinde o liste olan bir hatadır.
| Seçenek | Ne yapar | Nerede çalışır |
|---|---|---|
--query | Listeyi sorgu diliyle daraltır. | list |
--signatures | Her yürütülebilir dosyayı kimin imzaladığını ve Windows'un ona güvenip güvenmediğini okur. Tüm makinede birkaç saniye sürer, bu yüzden istenmedikçe kapalıdır - ve imzalarla ilgili bir sorgu onu kendiliğinden açar. | list |
--memory | Çalışan her öğenin işleminin ne kullandığını okur. Bir ayar değil bir ölçüm olduğu için varsayılan olarak kapalıdır: bir saniye sonra farklıdır. | list |
--required-by | Biri durdurulursa hangi öğelerin bozulacağını okur; her şeyin kendi bildirdiğinden çıkarılmaz, doğrudan Windows'a sorulur. Öğe başına bir çağrı olduğundan istenmedikçe kapalıdır. show ve snapshot create bunu her seferinde okur. | list |
--follow-network | Aracın bu makinenin dışına hiç uzanmasına izin verir - başkasının paylaşımında duran bir başlatma yolu ve bu makinede henüz olmayan bir sertifika. Güvenlik için varsayılan olarak kapalıdır: ulaşılamayan tek bir paylaşım yirmi bir saniyeye mal olur ve çalıştıran kişi olarak kimlik doğrular; sertifika getirmek de sıradan bir listenin ortasında üçüncü bir tarafa bağlantıdır. Bu olmadan bir imza burada olana göre denetlenir ve bakılmamasından kaynaklanmış olabilecek bir sonuç, hüküm olarak değil okunmadı olarak bildirilir. | list, show, snapshot create |
--force | kill üzerinde, nazikçe sormadan süreci hemen sonlandırır - önizleme o zaman iki yerine bir adım gösterir. snapshot create üzerinde, zaten var olan bir anlık görüntünün yerine yazar - anlık görüntü olmayan bir dosyanın yerine asla yazılmaz. | snapshot create, kill |
--restart | kill üzerinde, süreç gittikten sonra öğeyi, onunla paylaşılan her şeyle birlikte geri getirir. | kill |
--stop | start-type üzerinde ve yalnızca disabled ile birlikte, ayar yazıldıktan sonra öğeyi aynı planda durdurur. Başlangıç türü bir sonraki açılışı değiştirir, şimdiyi değil; bu yüzden onsuz, disabled yapılmış çalışan bir öğe çalışmaya devam eder. | start-type |
--full | show üzerinde, gerçekten boş olan alanları da yazdırır. Kimsenin okuyamadığı bir alan her durumda yazdırılır. | show |
--json | Aynı belge, makine tarafından okunabilir, standart çıktıda. | list, show, stop, start, restart, start-type, snapshot create, snapshot diff, kill, history, tool fix NAME |
--note | Anlık görüntünün ne için alındığı, dosyanın içinde saklanır. | snapshot create |
--exit-code | Yapılandırma farklı olduğunda 5 koduyla biter - eklenmiş ya da kaldırılmış bir öğe veya farklı kurulmuş biri. Yalnızca çalışma durumu sayılmaz. Varsayılan olarak kapalıdır; böylece yalnızca farklılıkların yazdırılmasını isteyen bir betik, bazılarını bulduğu için takılmaz. | snapshot diff |
--live | Dosyayı ikinci bir dosyayla değil, bu makineyle şu anki haliyle karşılaştırır. | snapshot diff |
--timing | Okumanın her bölümünün ne kadar sürdüğü, standart hatada. | list, show, stop, start, restart, start-type, snapshot create, snapshot diff, kill, history, tool fix NAME |
--dry-run | Planı yazdırır ve hiçbir şeyi değiştirmez. Bir çalıştırmanın yürüttüğü aynı plandır - gerçek çalıştırma için ikinci bir kod yolu yoktur. | stop, start, restart, start-type, kill, tool fix NAME |
--dependents | Bozulacak hizmetleri plana kendi başlarına birer adım olarak koyar. | stop, restart, kill |
--timeout | Bir adımın ilerleme olmadan vazgeçilmeden önce ne kadar gidebileceği; hizmet her ilerleme bildirdiğinde yeniden sayılır. Aksini söylemezseniz altmış saniye. İlerleme bildirmeye devam eden bir hizmet gerektiği kadar izlenir. Süre dolması izlemenin sonudur, bir başarısızlık değil; rapor öğenin nerede bırakıldığını söyler. | stop, start, restart, kill, tool fix NAME |
--components | license üzerinde, bildirimi bu yürütülebilir dosyanın içindeki her bileşene, sürümüyle, lisansıyla ve nereden geldiğiyle açar. İndirmenin yanında yayımlanan malzeme listesinin taşıdığı aynı küme, çünkü ikisi de tek bir kayıttan üretilir. | license |
Çıkış kodları
6 son ve her biri bir betiğin yapacağı farklı bir şeydir. Veriler standart çıktıya, geri kalan her şey standart hataya gider; böylece bws list --json | jq çalışır ve bir uyarı asla JSON'unuza düşmez.
Her JSON belgesi düz ASCII'dir: onun dışındaki bir harf, her JSON okuyucusunun harfe geri çevirdiği altı karakterlik bir kaçış olarak yazılır; bu yüzden bws list --json > file.json geçerli UTF-8'dir ve konsolun hangi kod sayfasına ayarlı olduğundan bağımsız olarak | ConvertFrom-Json onu doğru okur. Bir insanın okuduğu metinde, yazdırılmak yerine terminali oynatacak bir karakter - bir sekme, bir satır sonu, bir kaçış dizisi, bir yön geçersiz kılma - kod noktası olarak gösterilir, <U+001B>.
-- seçenekleri sonlandırır; böylece adı tireyle başlayan bir hizmet yine de adlandırılabilir: bws show -- -odd. Aracın size verdiği komut satırları PowerShell için yazılmıştır: boşluklu bir ad çift tırnağa girer, cmd bunu aynı şekilde okur; PowerShell'in içlerinde genişleteceği bir ad ise, örneğin MSSQL$SQLEXPRESS, tek tırnağa girer.
| Kod | Anlamı |
|---|---|
0 | Bitti ve her şey gideceği yere ulaştı. |
1 | Araç başarısız oldu - istenen şeyi yapamadı; nedeni plan değil, aracın kendisiyle ilgili. |
2 | Komut satırı yanlıştı. Yanlış yazılmış bir komuta, büyük olasılıkla kastettiğiniz komut önerilir. |
3 | Plan iyiydi, çalıştı ve içindeki bir şey gideceği yere ulaşmadı - yönetici reddetti ya da oturumun ona hakkı yoktu. |
4 | Biri çalıştırmayı elle durdurdu. Her adım yine de ulaşmış olsa bile sıfır değildir; böylece bir sarmalayıcı yarıda kesilmiş bir çalıştırmayı temiz saymaz. |
5 | Bir karşılaştırma çalıştı ve yapılandırmanın saptığını buldu - eklenmiş ya da kaldırılmış bir öğe veya farklı kurulmuş biri. Çalışma durumu tek başına sapma değildir. Yalnızca --exit-code ile, çünkü sapma bu aracın bulmak için var olduğu şeydir ve onu bulmak bir başarısızlık değildir. |
Ctrl+C'nin üç düzeyi vardır; her biri bir sonrakinin neye mal olduğunu söyler. Birincisi ilerlemeyi bırakır ve alınanı yine geri koyar, ikincisi işleri olduğu gibi bırakır ve raporu yine yazdırır, üçüncüsü süreci sonlandırır. Elle durdurulan bir çalıştırma, her adım yine de ulaşmış olsa bile 4 ile biter.
Konsol penceresini kapatmak ilk Ctrl+C sayılır. Windows bundan sonra bir programa beş saniye verir ve bu sürede program ilerlemeyi bırakır ve indirdiğini geri koyar. Oturumu kapatmak ve bilgisayarı kapatmak, tepki verebileceği hiçbir uyarı olmadan onu sonlandırır; kopmuş bir uzak oturum da öyle olabilir.
Zamanlanmış bir görevde
Bu aracın üzerine kurulduğu biçim: makine iyi olduğu bilindiğinde dondurun, sonra her gece hâlâ öyle olup olmadığını sorun.
# makinenin hizmete girdiği gün
bws snapshot create C:\baselines\web01.json --note "after the build"
# her gece, zamanlanmış bir görevden
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
# 0 - yapılandırma sapması yok
# 5 - yapılandırma saptı ve drift.json neyin olduğunu söyler
# 3 - çalıştı ve her şeyi okuyamadı, yani yanıt kısmi
Pencere aynı motorun diğer yarısıdır: BetterWindowsServices-win-x64.zip onu içerir ve indirme sayfası her arşivin ne olduğunu söyler.
Pencerenin bağımsız değişkeni
BetterWindowsServices.exe bir insan için tasarlanmış tek bir bağımsız değişken alır: --catalogue, pencerenin her bileşenini her durumda gösteren bir geliştirici sayfası açar ve makinenizden hiçbir şey okumaz. İkincisi, --carry, bir pencerenin gösterdiği şeyi yönetici olarak yeniden başlattığı kendi kopyasına aktarma yoludur. Kimse onu yazmaz ve içindeki, o pencerenin yazamayacağı her şey reddedilir.