Поставте машині запитання
Одна мова, у полі пошуку вікна й у bws list --query. Просте слово шукає в імені, відображуваному імені, обліковому записі та шляху запуску. Поле звужує пошук. Полів: 21, і той самий текст означає те саме в обох половинах інструмента.
Шість, що відповідають на справжнє запитання
Що має працювати й не працює
start:auto !status:running
Перший запит, який пише більшість людей, і той, на який services.msc не відповідає взагалі.
Служби, чий файл зник
file:missing
Запис, що вказує на виконуваний файл, якого немає на диску. Зазвичай це видалення, що залишило реєстрацію.
Непідписані, без шуму сеансів
signed:no peruser:no
Сімейства для кожного користувача створюють копію на сеанс і заповнюють список майже однаковими записами. Цей запит питає про решту.
Працює, хоча вимкнено
mismatch:running
Конфігурація й стан, що розходяться: запис, який диспетчер налаштовано ніколи не запускати, а він усе одно працює.
Усе, що просить права налагодження
privilege:SeDebugPrivilege
Привілей, що дозволяє процесу відкрити будь-який інший. Варто знати, які служби його просять.
Що інструмент не зміг прочитати
account:?
Записи, де цей сеанс не зміг прочитати обліковий запис. Запитання, якого services.msc навіть не вміє поставити.
Як пишеться запит
Терміни
- Терміни розділяються пробілами, і всі вони мають збігатися - ключового слова
andнемає, бо нічого іншого воно не могло б означати. - Те саме поле, написане двічі, - єдиний виняток:
status:running status:stoppedозначає будь-яке з двох, бо саме це записує позначення двох фільтрів. Дві межі числа все одно звужують -pid:>1000 pid:<2000це діапазон між ними. !перед терміном заперечує його:!status:running. У пакетному файлі зsetlocal EnableDelayedExpansioncmd без жодного слова з'їдає цей!, і запит мовчки означає щось інше - пишіть там^!усередині лапок.- Кома всередині поля означає або:
start:manual,disabled. - Лапки захищають усе з пробілами чи двокрапками:
account:"NT SERVICE\McmSvc". - Шлях, вставлений як є, -
C:\Windows\System32\svchost.exe- шукається, а не читається як поле з назвою C.
Як зіставляється текст
name:spoolзбігається з усім, що це містить - це типова поведінка, бо саме цього люди чекають від поля пошуку.name:=spooler- точний збіг.name:spool*приймає шаблони,*і?.name:/^Sql.*/- регулярний вираз, і всередині скісних рисок він пишеться так, як пишуться регулярні вирази:\?,\\і кома означають те, що означають там. Скісна риска, що ніколи не закривається, - помилка: щоб шукати саму скісну риску, пишіть\/або беріть лапки.- Регістр ігнорується, зокрема й поза ASCII - відображуване ім'я польською чи грецькою збігається, як би його не набрали.
Три слова, які приймає кожне поле
any- значення є, яким би воно не булоnone- значення справді немає - у запису його немає?- інструмент не зміг прочитати це поле або не читав його, а це запитання, якеservices.mscнавіть не може поставити
Помилково набране значення - це помилка, а не порожній результат. status:runing відповідає Did you mean running? і завершується кодом 2. Порожній список виглядав би як відповідь, а різниця між «нічого не збігається» й «ви набрали неправильно» - це різниця між чистою машиною та аудитом, що нічого не довів. Запит, який нічого б не звузив, відхиляється і в командному рядку, тож скрипт не діє на всю машину через одруківку.
Більше прикладів
Кожен працює однаково в полі пошуку вікна й після bws list --query, і кожен був запущений на справжній Windows, перш ніж його тут записали. Що він знаходить, залежить від машини - а для запитання про неприємності порожня відповідь якраз та, якої ви хочете.
Стан і тип запуску
| Запит | Що він знаходить |
|---|---|
status:stopPending, | Застрягли на зупинці чи запуску - очікування, яке показує оснастка й яке ніколи не закінчується. |
start:auto status:stopped trigger:none | Налаштовано на автозапуск, зупинено й не чекає тригера - короткий список, який варто прочитати після перезавантаження. |
start:delayed | Автоматичний, запускається трохи пізніше за інші автоматичні записи. |
start:manual, | Працює, хоча його ніщо не запускає під час завантаження - його попросило щось, запустив тригер або хтось. |
Облікові записи
| Запит | Що він знаходить |
|---|---|
account:localsystem !publisher:microsoft | Працює від LocalSystem, найпотужнішого облікового запису, з файлу, який Microsoft не підписала. Запит про видавця сам читає підписи, тож це займає кілька секунд. |
!account:localsystem, | Служби, що працюють від будь-якого іншого облікового запису - віртуального, керованого або власного облікового запису людини. |
account:"NT SERVICE" | Власний віртуальний обліковий запис служби. Лапки тримають слова разом через пробіл. |
Файли й підписи
| Запит | Що він знаходить |
|---|---|
signed:notSigned, | Без підпису, ланцюжок, якому Windows не довіряє, або файл, змінений після підписання. |
signed:trusted !publisher:microsoft | Підписано, довірено й не Microsoft - програмне забезпечення, яке на цю машину поставили інші компанії. |
type:driver start:boot, | Драйвери, що завантажуються під час запуску Windows, підпису яких Windows не довіряє. На здоровій машині - жодного. |
!path:C:\Windows type:ownProcess | Служба з власним процесом, чий файл лежить поза текою Windows. |
path:\AppData\ | Запущено зсередини чийогось профілю - останнє місце, де чекаєш службу. |
path:\System32\\ type:ownProcess | Зворотна скісна риска перед пробілом робить пробіл частиною слова, тому шлях, що закінчується зворотною скісною рискою, пишеться з двома, коли після нього йде інший термін. У кінці запиту досить однієї. |
Тригери й залежності
| Запит | Що він знаходить |
|---|---|
trigger:device status:stopped | Чекає на появу пристрою, тож зупинена не без причини. |
trigger:network | Запускається, коли запит надходить до мережевої кінцевої точки - порту, іменованого каналу чи інтерфейсу RPC. |
trigger:stop | Записи, які тригер може й зупинити, не лише запустити. |
dependson:Winmgmt | Записи, яким для роботи потрібен WMI. |
requiredby:Spooler | Усе, що потрібне Print Spooler для роботи, і те, що потрібне цим у свою чергу. |
Привілеї й процеси
| Запит | Що він знаходить |
|---|---|
privilege:SeTcbPrivilege | Просить права діяти як частина операційної системи. |
privilege:SeImpersonatePrivilege !account:localsystem | Може діяти від імені клієнта, працюючи від облікового запису, відмінного від LocalSystem. |
sidtype:unrestricted | Несе власний SID служби у своєму процесі, тож дозволи можуть називати саме її. sidtype:restricted питає про ті, чий процес ще й обмежений на запис. |
type:sharedProcess status:running | Працює всередині спільного svchost разом з іншими. |
memory:>200MB | Процес, що використовує понад 200 МБ. Пам'ять читається сама, коли запит про неї питає. |
pid:1000-2000 | У процесі, чий ідентифікатор між 1000 і 2000. |
Імена й текст
| Запит | Що він знаходить |
|---|---|
spool | Просте слово, що шукається в імені, відображуваному імені, обліковому записі та шляху запуску. |
name:=wuauserv | Рівно це ім'я, і нічого, що лише його містить. |
name:win* | Імена, що починаються на win, записані із шаблоном. |
name:/svc$/ | Імена, що закінчуються на svc, записані як регулярний вираз. |
description:none | Зовсім без опису, а це більшість драйверів. |
description:? | Опис, який Windows не зміг передати, зазвичай тому, що він вказує на файл мови, якого немає. |
peruser:template | Шаблони для кожного користувача, які Windows копіює для кожного сеансу ввійшовшого користувача. |
Кожне поле
Побудовано з самої програми, тож ця таблиця не може розійтися з тим, що приймає інструмент. Поле без списку значень приймає текст, число або розмір - третій стовпець каже, що саме.
| Поле | Про що питає | Значення |
|---|---|---|
name | ім'я служби, за яким її розпізнає Windows | текст |
display | відображуване ім'я, як його пише ця Windows | текст |
description | що запис каже про себе | текст |
type | що це за запис | driver, kernelDriver, fileSystemDriver, ownProcess, sharedProcess, unknown |
peruser | чи входить вона до одного з сімейств для кожного користувача, копію яких Windows створює на кожен сеанс | yes, no, template, instance |
status | що вона робить просто зараз | running, stopped, paused, pending, startPending, stopPending, pausePending, continuePending, unknown |
start | що диспетчер робить із нею під час наступного завантаження | automatic, auto, delayed, manual, disabled, boot, system, unknown |
account | обліковий запис, від якого вона працює, як його пише диспетчер | текст, напр. localsystem |
pid | процес, у якому вона працює | число: 1234, >1000, 100-200 |
trigger | умова, що запускає або зупиняє її | device, ip, domain, firewall, policy, network, custom, state, aggregate, unknown, start, stop |
path | командний рядок, який запускає диспетчер | текст |
file | чи є файл, який вона запускає, на диску | present, missing |
signed | що Windows думає про підпис файлу, без перевірки відкликання | yes, no, trusted, notSigned, untrustedRoot, expired, revoked, tampered, unknown |
publisher | хто підписав файл - підтверджено лише довіреним підписом | текст |
privilege | привілей, який просить запис | текст, напр. SeDebugPrivilege |
dependson | що потрібно цьому запису | ім'я служби |
requiredby | що зламається, якщо цей зупиниться | ім'я служби |
sidtype | тип SID служби | unrestricted, restricted, unknown |
sddl | дескриптор безпеки у вигляді тексту | текст |
memory | що використовує її процес | розмір з одиницею виміру: 500MB, >1GB, 100MB-1GB |
mismatch | конфігурація і стан, що розходяться | stopped, running |
Дві речі, які варто знати
Деякі поля дорогі, і запит про них вмикає читання
Підписи на всій машині займають кілька секунд, а пам'ять - це вимірювання, а не налаштування, тож жодне з них не читається для списку, поки не попросять. Запит, що згадує одне з них, сам вмикає це читання - вам не треба пам'ятати --signatures на додачу до signed:no. У вікні запит про підписи каже, що відповідь неповна, доки вони не надійдуть, а не показує коротший список, ніби це і є відповідь.
Результат, оцінений за нечитабельним, каже про це
Якщо записи оцінювалися за полем, яке цей сеанс не зміг прочитати, результат несе рядок із кількістю таких - бо в такому результаті можуть бракувати записів або бути зайві. Це те саме правило, якого дотримується весь інструмент: невдале читання видно у відповіді, воно ніколи не проковтується. Видавець отримує те саме поводження, коли його заявляє лише сертифікат: поруч із будь-яким вердиктом, крім trusted, ім'я показується як not verified, а publisher: зараховує запис як непевний в окремому рядку - тож !publisher:microsoft зберігає файл Microsoft, який хтось змінив після підписання.