Руководство

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, поэтому он присоединяется к конвейеру, а не заменяет его.

Вместе, а не вместо

Инструмент, отвечающий на вопрос что не так с этой машиной, и инструменты, меняющие одну настройку, - не один и тот же инструмент. Задайте вопрос здесь, прочитайте план здесь и используйте что хотите, чтобы его выполнить - план печатает командную строку, которая просит то же самое, и эта строка предназначена для копирования.