Naslag van de opdrachtregel
Elke opdracht, elke optie en elke afsluitcode van bws, versie 0.5.0. bws --help is de gezaghebbende en is langer - deze pagina is hetzelfde oppervlak, gerangschikt om te lezen.
De opdrachten
Elf opdrachten. snapshot is een zelfstandig naamwoord en neemt een woord erna. tool is ook een zelfstandig naamwoord, en op zichzelf toont het de tools.
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
Een verkeerd getypte opdracht krijgt degene aangeboden die u waarschijnlijk bedoelde, en de uitvoering eindigt met code 2 in plaats van iets te doen dat dicht bij uw vraag in de buurt komt.
$ bws lst
There is no command lst. Did you mean list?
Wat elke opdracht doet
list en show
list is de hele machine, beperkt door --query. show is één item met alles wat erover bekend is - de handtekening, de bevoegdheden, de beveiligingsdescriptor en het geheugen, alles elke keer gelezen, omdat dat over één item ongeveer zestig milliseconden kost waar het over de hele machine een seconde kost. Velden die echt leeg zijn blijven weg tenzij u --full meegeeft. Een veld dat niemand kon lezen wordt hoe dan ook afgedrukt, omdat het weglaten ervan op een antwoord zou lijken.
stop, start en restart
Elk bouwt een plan en voert het uit. --dry-run drukt het plan af en wijzigt niets, --dependents zet de services die zouden kapotgaan als aparte stappen erin, en --timeout zegt hoe lang één stap zonder voortgang mag gaan. Stuurprogramma's worden geweigerd in plaats van geprobeerd, omdat het stoppen van een kernelstuurprogramma vaak niet ongedaan te maken is zonder herstart.
kill - voor een service die niet wil stoppen
Het vraagt de service te stoppen en beëindigt het proces erachter alleen als dat niet werkt, dus een item dat uit zichzelf stopt wordt nooit beëindigd. Het beëindigen van een proces neemt elke andere service die in dat proces leeft mee, of ze nu eerst waren gestopt of niet, en de voorvertoning noemt ze en noemt het proces bij nummer. --force slaat de beleefde stap over en de voorvertoning toont dan één stap in plaats van twee. --restart brengt achteraf alles terug.
Windows spelt dit idee anders. --force bij Stop-Service betekent "ook als er iets van afhangt", wat --dependents hier doet. Daarom is dit een opdracht op zich en geen optie van stop.
start-type - een instelling, geen beweging
Het zegt wat de beheerder bij de volgende opstart met een item doet, en zonder --stop verplaatst het niets: een item dat draait blijft draaien, een gestopt item blijft gestopt, en het plan zegt dat. disabled is degene om even bij stil te staan, omdat het voorkomt dat de beheerder het item überhaupt start, ook op verzoek voor iets anders dat het nodig heeft. delayed is automatisch, een beetje na de andere automatische items gestart - het woord waarnaar start:delayed in een query vraagt - en Windows weigert het voor een item in een laadvolgordegroep, wat het plan zegt voordat er iets gebeurt. Elk van de vier schrijft of het item laat start, zoals sc.exe doet. --stop, alleen naast disabled, stopt het item in hetzelfde plan zodra de instelling is geschreven.
snapshot create en snapshot diff
create leest altijd handtekeningen en hashes, omdat een momentopname wordt bewaard en later vergeleken en een zonder die gegevens bij vergelijking met een met die gegevens zou doen alsof de machine was veranderd. diff zegt wat er veranderde van het eerste bestand naar het tweede, of van een bestand naar deze machine met --live. De pagina over momentopnamen heeft het formaat en de redenering.
history - wie het heeft gewijzigd, uit het systeemlogboek
Wijzigingen van het opstarttype en installaties uit het systeemlogboek, nieuwste eerst, met het account dat Windows heeft vastgelegd. De eerste regel zegt hoe ver het logboek teruggaat en of het is gewist, omdat een geschiedenis maar zo lang is als het logboek. Met een naam zijn het de wijzigingen van het opstarttype van die service - installaties worden alleen zonder naam getoond, omdat Windows een installatie onder de weergavenaam vastlegt en nooit onder de servicenaam. Een account wordt genoemd waar deze machine het zelf kan noemen en anders als zijn SID getoond, en opstarttypes komen in de woorden die Windows schreef.
tool - kant-en-klare antwoorden op veelvoorkomende problemen
Dezelfde tools die het venster op het tabblad Tools toont. bws tool toont ze en bws tool fix toont de snelle oplossingen: printer, sound, indexing en search, elk een herstart van één Windows-service samen met wat ervan afhangt, gekozen omdat de eigen probleemoplossingspagina's van Microsoft het voorstellen. bws tool fix printer is precies bws restart Spooler --dependents - hetzelfde plan, dezelfde uitvoer en dezelfde afsluitcodes - en zoals elke opdracht hier die iets wijzigt vraagt het niet eerst, dus --dry-run is de manier om te kijken voordat het draait.
license - wat er in het gedownloade bestand zit
Het leest helemaal niets - geen servicebeheerder, geen schijf, geen netwerk - en antwoordt uit een register dat in het uitvoerbare bestand is gecompileerd. --components verandert de mededeling in elk onderdeel met zijn versie, zijn licentie en waar het vandaan kwam. Dezelfde set die de materiaallijst naast de download bevat, omdat beide uit één register worden gemaakt, en de reden dat het de moeite waard is: het programma is één zelfstandig bestand, dus er is niets ernaast dat een scanner kan lezen.
Voorbeelden
De onderstaande plannen zijn met --dry-run gecontroleerd tegen het programma dat deze pagina beschrijft. Een opdracht die iets wijzigt vraagt niet eerst, dus --dry-run is de manier om te kijken voordat het draait. Spooler staat voor elke service - zet de naam van de uwe op zijn plaats.
Zoeken en lezen
bws list elke service en elk stuurprogramma op deze machine
bws list --query "start:auto !status:running" wat zou moeten draaien en niet draait
bws list --query "status:running" --memory wat het proces van elk draaiend item gebruikt
bws show Spooler alles wat over één item bekend is
bws show Spooler --full ook de velden die echt leeg zijn
Eerst kijken, dan wijzigen
bws restart Spooler --dry-run het plan, en verder niets
bws restart Spooler --dependents herstart het samen met wat ervan afhangt
bws stop Spooler --dependents --timeout 120 sta twee minuten per stap zonder voortgang toe
bws start-type WSearch delayed --dry-run start het een beetje na de andere automatische items
bws start-type Spooler disabled --stop schakel het uit en stop het in één plan
Een service die niet wil stoppen
bws kill Spooler --dry-run het proces, en elke service die erin leeft
bws kill Spooler --restart beëindig het proces alleen als een stop mislukt, breng dan alles terug
bws kill Spooler --force --dry-run één stap in plaats van twee: het proces meteen beëindigd
Momentopnamen en drift
bws snapshot create before.json --note "before the patch" leg de machine vast, met een notitie erin bewaard
bws snapshot diff before.json after.json twee bestanden - twee dagen, of twee machines
bws snapshot diff before.json --live het bestand tegen deze machine zoals ze nu is
bws snapshot diff before.json --live --exit-code hetzelfde, eindigend met 5 als de configuratie is afgedreven
Wie het heeft gewijzigd
bws history elke wijziging van het opstarttype en elke installatie die het systeemlogboek bevat
bws history Spooler de wijzigingen van het opstarttype van één service
bws history --json hetzelfde als document, met logboek en wijzigingen
Snelle oplossingen
bws tool de tools die er zijn
bws tool fix de snelle oplossingen, en de service achter elk
bws tool fix sound --dry-run het plan om de twee audioservices te herstarten
bws tool fix printer herstart de Print Spooler met wat ervan afhangt
Wat er in het bestand zit
bws license --components elk onderdeel, zijn versie, zijn licentie en waar het vandaan kwam
bws --version de versie van dit uitvoerbare bestand
In een PowerShell-script
# de items die zouden moeten draaien en niet draaien, als objecten
bws list --query "start:auto !status:running" --json | ConvertFrom-Json | Select-Object serviceName, displayName, status
# de niet-ondertekende bestanden, in een spreadsheet
bws list --query "signed:no" --json | ConvertFrom-Json | Select-Object serviceName, binaryPath | Export-Csv unsigned.csv -NoTypeInformation
# wat één service nodig heeft
(bws show Spooler --json | ConvertFrom-Json).dependsOn
# een nachtelijke controle die vertakt op de afsluitcode
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" }
}
In cmd en een batchbestand
rem een tweede opdracht alleen als de eerste niet schoon eindigde
bws restart Spooler || echo the restart did not end cleanly
rem in een batchbestand met vertraagde uitbreiding aan heeft de ! een dakje nodig
bws list --query "start:auto ^!status:running"
Opties
18 stuks. De derde kolom zijn de opdrachten waartoe elk behoort - een optie die aan een opdracht wordt meegegeven die er geen gebruik voor heeft is een fout met die lijst erin, in plaats van een vlag die stilletjes wordt genegeerd.
| Optie | Wat het doet | Waar het werkt |
|---|---|---|
--query | Beperk de lijst met de querytaal. | list |
--signatures | Lees wie elk uitvoerbaar bestand heeft ondertekend en of Windows het vertrouwt. Enkele seconden over een hele machine, dus uit tenzij erom gevraagd wordt - en een query over handtekeningen zet het zelf aan. | list |
--memory | Lees wat het proces van elk draaiend item gebruikt. Standaard uit omdat het een meting is en geen instelling: een seconde later is het anders. | list |
--required-by | Lees welke items kapotgaan als er een wordt gestopt, rechtstreeks aan Windows gevraagd en niet afgeleid uit wat alles zelf aangeeft. Een aanroep per item, dus uit tenzij erom gevraagd wordt. show en snapshot create lezen het elke keer. | list |
--follow-network | Laat het hulpmiddel zich überhaupt buiten deze machine begeven - een opstartpad op de share van iemand anders, en een certificaat dat deze machine nog niet heeft. Standaard uit voor de veiligheid: één onbereikbare share kost eenentwintig seconden en authenticeert als wie het ook uitvoerde, en het ophalen van een certificaat is een verbinding met een derde partij midden in een gewone lijst. Zonder deze optie wordt een handtekening gecontroleerd tegen wat hier is, en een resultaat dat door niet kijken veroorzaakt kan zijn, wordt gemeld als ongelezen en niet als oordeel. | list, show, snapshot create |
--force | Bij kill: beëindig het proces meteen zonder beleefd te vragen - de voorvertoning toont dan één stap in plaats van twee. Bij snapshot create: vervang een momentopname die er al is - een bestand dat geen momentopname is wordt nooit vervangen. | snapshot create, kill |
--restart | Bij kill: breng het item terug zodra het proces weg is, samen met alles wat het deelde. | kill |
--stop | Bij start-type, en alleen naast disabled: stop het item in hetzelfde plan zodra de instelling is geschreven. Een opstarttype verandert de volgende opstart en niets nu, dus zonder deze optie blijft een draaiend item dat op disabled is gezet gewoon draaien. | start-type |
--full | Bij show: druk ook de velden af die echt leeg zijn. Een veld dat niemand kon lezen wordt hoe dan ook afgedrukt. | show |
--json | Hetzelfde document, machineleesbaar, op de standaarduitvoer. | list, show, stop, start, restart, start-type, snapshot create, snapshot diff, kill, history, tool fix NAME |
--note | Waarvoor de momentopname is gemaakt, bewaard in het bestand. | snapshot create |
--exit-code | Eindig met code 5 wanneer de configuratie verschilt - een item toegevoegd of verwijderd, of een anders ingesteld item. Alleen de uitvoeringstoestand telt niet. Standaard uit, zodat een script dat alleen de verschillen afgedrukt wil hebben niet struikelt over het vinden ervan. | snapshot diff |
--live | Vergelijk het bestand met deze machine zoals ze nu is, in plaats van met een tweede bestand. | snapshot diff |
--timing | Hoe lang elk deel van het lezen duurde, op de standaardfout. | list, show, stop, start, restart, start-type, snapshot create, snapshot diff, kill, history, tool fix NAME |
--dry-run | Druk het plan af en wijzig niets. Het is hetzelfde plan dat een uitvoering draait - er is geen tweede codepad voor de echte uitvoering. | stop, start, restart, start-type, kill, tool fix NAME |
--dependents | Zet de services die zouden kapotgaan als aparte stappen in het plan. | stop, restart, kill |
--timeout | Hoe lang één stap zonder voortgang mag gaan voordat ze wordt opgegeven, opnieuw geteld telkens als de service voortgang meldt. Zestig seconden tenzij u iets anders zegt. Een service die voortgang blijft melden wordt zo lang bewaakt als nodig is. Opraken is het einde van het kijken en geen mislukking, en het rapport zegt waar het item is achtergelaten. | stop, start, restart, kill, tool fix NAME |
--components | Bij license: verander de mededeling in elk onderdeel in dit uitvoerbare bestand met zijn versie, zijn licentie en waar het vandaan kwam. Dezelfde set die de materiaallijst naast de download bevat, omdat beide uit één register worden gemaakt. | license |
Afsluitcodes
6 eindes, en elk daarvan is iets anders voor een script om te doen. Gegevens gaan naar de standaarduitvoer en al het andere naar de standaardfout, zodat bws list --json | jq werkt en een waarschuwing nooit in uw JSON belandt.
Elk JSON-document is platte ASCII: een letter daarbuiten wordt geschreven als een escape van zes tekens die elke JSON-lezer terugverandert in de letter, dus bws list --json > file.json is geldige UTF-8 en | ConvertFrom-Json leest het goed welke codepagina de console ook heeft. In de tekst die een mens leest wordt een teken dat de terminal zou verplaatsen in plaats van afdrukken - een tab, een regeleinde, een escapereeks, een richtingsoverschrijving - getoond als zijn codepunt, <U+001B>.
-- beëindigt de opties, zodat een service waarvan de naam met een streepje begint toch kan worden genoemd: bws show -- -odd. De opdrachtregels die het hulpmiddel u geeft zijn voor PowerShell geschreven: een naam met een spatie gaat tussen dubbele aanhalingstekens, wat cmd op dezelfde manier leest, en een naam die PowerShell daarbinnen zou uitbreiden, zoals MSSQL$SQLEXPRESS, gaat tussen enkele aanhalingstekens.
| Code | Betekenis |
|---|---|
0 | Klaar, en alles is aangekomen waar het heen moest. |
1 | Het hulpmiddel is mislukt - het kon niet doen wat werd gevraagd, om een reden die over het hulpmiddel gaat en niet over het plan. |
2 | De opdrachtregel was fout. Bij een verkeerd getypte opdracht wordt degene aangeboden die u waarschijnlijk bedoelde. |
3 | Het plan was goed, het is uitgevoerd, en iets erin is niet aangekomen waar het heen moest - de beheerder weigerde, of de sessie had er geen rechten op. |
4 | Iemand heeft de uitvoering met de hand gestopt. Niet nul, ook als elke stap nog was aangekomen, zodat een wrapper een onderbroken uitvoering niet als schoon behandelt. |
5 | Een vergelijking is uitgevoerd en vond dat de configuratie is afgedreven - een item toegevoegd of verwijderd, of een anders ingesteld item. Alleen de uitvoeringstoestand is geen drift. Alleen met --exit-code, omdat drift is wat dit hulpmiddel moet vinden, en het vinden ervan geen mislukking is. |
Ctrl+C heeft drie niveaus, elk zegt wat het volgende kost. Het eerste stopt met vooruitgaan en zet nog terug wat was weggenomen, het tweede laat dingen zoals ze zijn en drukt nog het rapport af, het derde beëindigt het proces. Een met de hand gestopte uitvoering eindigt met 4, ook als elke stap nog was aangekomen.
Het sluiten van het consolevenster telt als de eerste Ctrl+C. Windows geeft een programma daarna vijf seconden, en daarin stopt dit met vooruitgaan en zet het terug wat het had neergehaald. Afmelden en afsluiten beëindigen het zonder enige waarschuwing waarop het kon handelen, en een weggevallen sessie op afstand mogelijk ook.
In een geplande taak
De vorm waarvoor dit hulpmiddel is gebouwd: leg de machine vast wanneer ze bewezen goed is, en vraag dan elke nacht of ze dat nog is.
# de dag dat de machine in gebruik gaat
bws snapshot create C:\baselines\web01.json --note "after the build"
# elke nacht, vanuit een geplande taak
bws snapshot diff C:\baselines\web01.json --live --exit-code --json > C:\logs\drift.json
# 0 - geen configuratiedrift
# 5 - de configuratie is afgedreven, en drift.json zegt wat
# 3 - het draaide en kon niet alles lezen, dus het antwoord is gedeeltelijk
Het venster is de andere helft van dezelfde engine: BetterWindowsServices-win-x64.zip bevat het, en de downloadpagina zegt wat elk archief is.
Het argument van het venster
BetterWindowsServices.exe neemt één argument dat voor een mens is bedoeld: --catalogue opent een ontwikkelaarsblad met elk onderdeel van het venster in elke toestand, en leest niets van uw machine. Een tweede, --carry, is hoe een venster doorgeeft wat het toonde aan de kopie van zichzelf die het als beheerder herstart. Niemand typt het, en alles erin wat dat venster niet kon hebben geschreven wordt geweigerd.