Como eu extraio uma lista de serviços E em que conta eles são executados?

7

A ênfase desta questão está no segundo semestre.

Eu sei como extrair uma lista de todos os serviços e como filtrar seu estado. No entanto, o que eu não sei como fazer é extrair a conta de usuário em que o serviço está configurado para "executar como".

Eu não tenho a opção de usar o PowerShell (infelizmente), então estou procurando uma maneira nativa de CMD. Eu presumi que haveria uma maneira de usar o comando sc query, mas todas as listas são:

SERVICE_NAME
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT

FYI - O SO é o Windows 2003 SP2 e eu preciso dessas informações para todos os serviços, então é um processo longo, se eu tiver que fazer isso manualmente para cada um deles.

    
por Petay87 17.04.2015 / 16:56

4 respostas

13

wmic:
Nome e conta para todos os serviços:
wmic service get name,startname

apenas serviços iniciados:
wmic service where started=true get name, startname

serviços com padrão específico no nome:
wmic service where 'name like "%sql%"' get name, startname

bem formatada como tabela html (e aberta no seu navegador): (wmic service where 'name like "%sql%"' get name, startname /format:htable >out.html) && out.html

Sintaxe completa aqui: link

    
por 17.04.2015 / 17:54
4

Você pode realizar isso em duas etapas:

  1. Obtenha a lista de serviços: sc \localhost query | findstr SERVICE_NAME
  2. Sua peça que faltava: sc \localhost qc + SERVICE_NAME + | findstr SERVICE_START_NAME

Eu recomendaria um script em lote como este:

@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

Isso lhe dá uma saída assim:

Claro, você pode limpar ainda mais essa saída ou gravar em um arquivo CSV da maneira que desejar.

    
por 17.04.2015 / 17:21
2

O CMD não possui uma maneira nativa de fazer isso. SC e NET são aplicativos internos que vêm com o Windows, mas isso não significa que sejam nativos. A qualquer momento, um administrador pode removê-los e até mesmo o CMD é deixado no escuro.

sc sdshow é o que você obterá descritores de segurança, mas isso vai complicar as coisas se você não sabe ler strings SDDL.

A maneira mais simples é obter o Sysinternals PsService.exe do pacote Tools e usá-lo como segurança psservice [service]. Ele listará o SDDL em formato legível, incluindo nomes de conta.

    
por 17.04.2015 / 17:21
1

Embora não seja possível usar o PowerShell, você ainda deve poder usar o VBScript para extrair as informações do WMI:

Aqui está um script do VBS que listará todos os serviços e a conta que eles iniciarem como:

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

Salve e, em seguida, execute-o com cscript ScriptName.vbs .

objService.State lhe daria o estado atual do serviço (desde que você mencionou que deseja filtrar por ele).

Mais informações sobre a classe Win32_Service .

    
por 17.04.2015 / 17:40