web-dev-qa-db-fra.com

Comment puis-je extraire une liste de services et sur quel compte ont-ils été?

L'accent de cette question est sur la seconde moitié.

Je sais comment extraire une liste de tous les services et comment filtrer leur état. Cependant, ce que je ne sais pas comment faire est d'extraire le compte d'utilisateur pour lequel le service est défini sur "exécuter en tant que".

Malheureusement, je n'ai pas la possibilité d'utiliser PowerShell. Je recherche donc une méthode CMD native. J'ai supposé qu'il y aurait un moyen d'utiliser la commande sc query mais tout ce qui est répertorié est:

SERVICE_NAME
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT

FYI - Le système d’exploitation est Windows 2003 SP2 et j’ai besoin de ces informations pour tous les services. La procédure est donc longue si je dois le faire manuellement pour chacun d’eux.

12
Petay87

wmic:
Nom et compte pour tous les services:
wmic service get name,startname

services démarrés uniquement:
wmic service where started=true get name, startname

services avec un motif spécifique dans le nom:
wmic service where 'name like "%sql%"' get name, startname

joliment formaté comme tableau html (puis ouvert dans votre navigateur):
(wmic service where 'name like "%sql%"' get name, startname /format:htable >out.html) && out.html

Syntaxe complète ici: https://msdn.Microsoft.com/en-us/library/aa394531%28v=vs.85%29.aspx

17
wmz

Vous pouvez accomplir cela en deux étapes:

  1. Obtenez la liste des services: sc \\localhost query | findstr SERVICE_NAME
  2. Votre pièce manquante: sc \\localhost qc + SERVICE_NAME + | findstr SERVICE_START_NAME

Je recommanderais un script batch comme ceci:

@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

Cela vous donne une sortie comme celle-ci: enter image description here

Bien sûr, vous pouvez nettoyer davantage cette sortie ou écrire dans un fichier CSV de la manière que vous souhaitez.

5
armani

CMD n'a aucun moyen natif de le faire. SC et NET sont des applications intégrées fournies avec Windows, mais cela ne signifie pas qu'elles sont natives. À tout moment, un administrateur peut les supprimer et même CMD reste dans le noir.

sc sdshow est ce qui vous donnera les descripteurs de sécurité, mais cela compliquera les choses si vous ne savez pas lire les chaînes SDDL.

Le moyen le plus simple est d’obtenir Sysinternals PsService.exe à partir du package Tools et de l’utiliser en tant que sécurité psservice [service]. Il listera le SDDL dans un format lisible, y compris les noms de compte.

2
JasonXA

Bien que vous ne puissiez pas utiliser PowerShell, vous devriez quand même pouvoir utiliser VBScript pour extraire les informations de WMI:

Voici un script VBS qui listera tous les services et le compte sous lequel ils commencent:

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

Enregistrez-le puis exécutez-le avec cscript ScriptName.vbs.

objService.State vous donnerait l'état actuel du service (puisque vous avez dit que vous cherchiez à filtrer par celui-ci).

Plus d'informations sur la classe Win32_Service .

2
Ƭᴇcʜιᴇ007