Как извлечь список сервисов И под каким аккаунтом они работают?

13

Акцент этого вопроса на второй половине.

Я знаю, как извлечь список всех сервисов и как отфильтровать их состояние. Однако я не уверен, как это сделать, - извлечь учетную запись пользователя, для которой служба настроена на «запуск от имени».

У меня нет возможности использовать PowerShell (к сожалению), поэтому я ищу собственный способ CMD. Я предполагал, что будет способ использовать команду запроса sc, но все, что перечисляет:

SERVICE_NAME
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT

К сведению: ОС - Windows WIndows 2003 SP2, и мне нужна эта информация для всех сервисов, так что это сложный процесс, если мне придется делать это вручную для каждой из них.

Petay87
источник

Ответы:

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

WMZ
источник
Какая разница между sc queryа wmic?
Pacerier
1
@Pacerier Разница в отношении чего? Это просто разные (линия cmd) инструменты, позволяющие запрашивать / взаимодействовать со службами; 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 из пакета Tools и использовать его в качестве psservice security [service]. Он перечислит SDDL в удобочитаемом формате, включая имена учетных записей.

JasonXA
источник
Что вы подразумеваете под "нет родного способа сделать это"? Разве это не 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 .

Ƭᴇcʜιᴇ007
источник