sc.exe, Get-Service и это
Оба уже есть на машине, и оба останутся полезными. Эта страница о том, где они заканчиваются, - и она прямо говорит, где они всё ещё лучший ответ.
Где заканчивается каждый
sc.exe
Он может дотянуться почти до всего, что знает диспетчер управления службами, и ничего не говорит о том, как спрашивать. Синтаксис из девяностых - sc config X start= auto, где пробел после знака равенства обязателен, а его отсутствие - молчаливый отказ сделать то, что вы имели в виду.
Он отвечает об одной записи за раз. Нет фильтрации, нет вывода, который скрипт мог бы разобрать, не написав разборщик, и нет предпросмотра: sc stop либо срабатывает, либо возвращает число.
Get-Service и командлеты *-Service
Настоящие объекты, конвейер и поверхностный взгляд. В Windows PowerShell 5.1, которая поставляется с Windows, Get-Service не показывает учётную запись, под которой работает служба, и её описание. PowerShell 7 показывает и то и другое, и ещё путь запуска, и ставится отдельно.
Stop-Service -Force означает «даже если что-то от неё зависит» - он останавливает зависимые службы и сообщает вам об этом после, а не до.
Те же вопросы тремя способами
| Вопрос | С тем, что есть на машине | Здесь |
|---|---|---|
| Что должно работать и не работает | Get-Service | Where-Object { $_.StartType -eq 'Automatic' -and $_.Status -ne 'Running' } |
bws list --query "start:auto !status:running" |
| У каких служб неподписанный исполняемый файл | Прочитать каждый путь запуска, разрешить его, вызвать Get-AuthenticodeSignature для каждого - скрипт, а не команда |
bws list --query "signed:no" |
| Что унесёт с собой остановка этой | sc enumdepend X, затем прочитать список и решить самому |
bws stop X --dry-run --dependents, то есть план, который бы выполнился |
| Что изменилось с прошлой недели | Ничего, если вы не написали сборщик сами | bws snapshot diff before.json --live |
| Кто изменил тип запуска и когда | Get-WinEvent -FilterHashtable @{ LogName = 'System'; Id = 7040 }, затем прочитать сообщение каждого события |
bws history Spooler, чья первая строка говорит, насколько далеко назад уходит журнал |
| Машиночитаемый вывод | Объекты из PowerShell, текст из sc.exe |
--json у каждой команды, в стандартном выводе, с предупреждениями в стандартном потоке ошибок |
Где этот инструмент расходится с sc.exe в отношении службы, это здесь ошибка. Часть набора тестов запускает оба на машине, на которой работает, и сравнивает их запись за записью, а разница между ними - самое полезное, что можно положить в сообщение о проблеме.
Когда продолжать пользоваться тем, что у вас есть
- Вы на машине, которой коснётесь один раз. Оба уже там, и ничего не нужно проводить через политику.
- Вам нужно изменить учётную запись, путь запуска или действия восстановления.
sc.exeделает все три. Этот инструмент показывает учётную запись и путь запуска и не меняет ни то ни другое, а действия восстановления читает лишь для того, чтобы предупредить перед завершением процесса. - Вам нужно создать или удалить службу.
sc createиsc delete. Не здесь, намеренно. - Вы уже глубоко в конвейере PowerShell.
bws list --jsonвозвращается как объекты черезConvertFrom-Json, поэтому он присоединяется к конвейеру, а не заменяет его.
Вместе, а не вместо
Инструмент, отвечающий на вопрос что не так с этой машиной, и инструменты, меняющие одну настройку, - не один и тот же инструмент. Задайте вопрос здесь, прочитайте план здесь и используйте что хотите, чтобы его выполнить - план печатает командную строку, которая просит то же самое, и эта строка предназначена для копирования.