Як витягнути перелік послуг І для якого облікового запису вони працюють?


13

Акцент цього питання робиться на другій половині.

Я знаю, як витягнути список усіх сервісів і як відфільтрувати їх стан. Однак я не впевнений, як це зробити - це витягнути обліковий запис користувача, який сервіс встановлений на "запускати як".

У мене немає можливості використовувати PowerShell (на жаль), тому я шукаю рідний CMD спосіб. Я припускав, що існує спосіб використовувати команду sc запит, але все, що перераховано, це:

SERVICE_NAME
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT

FYI - ОС - це WIndows 2003 SP2, і мені потрібна ця інформація для всіх служб, тому це тривалий процес, якщо мені доведеться робити це вручну для кожного з них.

Відповіді:


20

wmic:
Ім'я та рахунок для всіх послуг:
wmic service get name,startname

тільки розпочаті послуги:
wmic service where started=true get name, startname

послуги з певним шаблоном назви:
wmic service where 'name like "%sql%"' get name, startname

добре відформатований як HTML-таблицю (а потім відкритий у вашому браузері):
(wmic service where 'name like "%sql%"' get name, startname /format:htable >out.html) && out.html

Повний синтаксис тут: https://msdn.microsoft.com/en-us/library/aa394531%28v=vs.85%29.aspx


Яка різниця між sc queryі wmic?
Pacerier

1
@Pacerier Різниця стосовно чого? Вони є просто різними інструментами (cmd line), що дозволяють здійснювати запит / взаємодію з послугами; sc призначений лише для цієї мети, тоді як wmic є більш загальним (оскільки він дозволяє запитувати різні частини системи). wmic також простіше використовувати для цієї конкретної проблеми (лише один запит)
wmz

5

Ви можете виконати це в два етапи:

  1. Отримайте перелік послуг:sc \\localhost query | findstr SERVICE_NAME
  2. Ваш недолік: sc \\localhost qc+ SERVICE_NAME +| findstr SERVICE_START_NAME

Я рекомендую такий пакетний сценарій:

@echo off
setlocal EnableDelayedExpansion
sc \\localhost query | findstr SERVICE_NAME > services.lst
for /f "tokens=1,2" %%A in (services.lst) do (
    echo %%B
    sc \\localhost qc %%B | findstr SERVICE_START_NAME
)
del services.lst

Це дає такий вихід: введіть тут опис зображення

Звичайно, ви можете додатково очистити цей вихід або записати у файл CSV будь-яким способом, який вам захочеться.


1

У CMD немає рідного способу це зробити. SC і NET - це вбудовані програми, які постачаються разом із Windows, але це не означає, що вони рідні. У будь-який час адміністратор може їх видалити, і тоді навіть CMD залишається в темряві.

sc sdshow - це те, що отримає у вас дескриптори безпеки, але це ускладнить речі, якщо ви не знаєте, як читати рядки SDDL.

Найпростіший спосіб - отримати Sysinternals PsService.exe з пакету «Інструменти» і використовувати його як безпеку psservice [сервіс]. Він перелічить SDDL у читаному форматі, включаючи назви акаунтів.


Що ви маєте на увазі під "не рідним способом зробити це"? Це не C:\Windows\System32\sc.exeдля всіх версій Windows?
Pacerier

Прочитайте ще раз. Вбудований означає незнімний, як CMD. Якщо адміністратор відключить PowerShell, він також може відключити sc і net. Найпростіший спосіб - використовувати портативний додаток, який робить все за замовчуванням і не прив’язаний до ОС.
JasonXA

1

Хоча ви не можете використовувати PowerShell, ви все одно можете використовувати VBScript для отримання інформації з WMI:

Ось сценарій VBS, у якому будуть перераховані всі служби та обліковий запис, який вони починають як:

strComputer = "."

Set objWMIService = GetObject("winmgmts:" & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colServices = objWMIService.ExecQuery ("Select * from Win32_Service")

For Each objService in colServices 
    wscript.echo objService.Name & ": " & objService.StartName
Next

Збережіть його, а потім запустіть його cscript ScriptName.vbs.

objService.State дасть вам поточний стан служби (оскільки ви згадали, що хочете відфільтрувати її).

Детальніше про клас Win32_Service .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.