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, тож він приєднується до конвеєра, а не замінює його.
Разом, а не замість
Інструмент, що відповідає на що не так із цією машиною, й інструменти, що змінюють одне налаштування, - не один і той самий інструмент. Поставте запитання тут, прочитайте план тут і скористайтеся чим завгодно, щоб його виконати - план друкує командний рядок, що просить те саме, і цей рядок призначений для копіювання.