Wie extrahiere ich eine Liste der Dienste UND welches Konto wird dafür verwendet?

Wie extrahiere ich eine Liste der Dienste UND welches Konto wird dafür verwendet?

Der Schwerpunkt dieser Frage liegt auf der zweiten Hälfte.

Ich weiß, wie man eine Liste aller Dienste extrahiert und nach ihrem Status filtert. Ich bin mir jedoch nicht sicher, wie ich das Benutzerkonto extrahiere, unter dem der Dienst ausgeführt werden soll.

Ich habe (leider) nicht die Möglichkeit, PowerShell zu verwenden, daher suche ich nach einer nativen CMD-Methode. Ich ging davon aus, dass es eine Möglichkeit gibt, den Befehl sc query zu verwenden, aber dort wird nur Folgendes aufgelistet:

SERVICE_NAME
TYPE
STATE
WIN32_EXIT_CODE
SERVICE_EXIT_CODE
CHECKPOINT
WAIT_HINT

Zu Ihrer Information: Das Betriebssystem ist Windows 2003 SP2 und ich brauche diese Informationen für alle Dienste. Daher ist es ein langwieriger Prozess, wenn ich es für jeden einzelnen Dienst manuell tun muss.

Antwort1

wmic:
Name und Konto für alle Dienste:
wmic service get name,startname

nur gestartete Dienste:
wmic service where started=true get name, startname

Dienste mit bestimmtem Muster im Namen:
wmic service where 'name like "%sql%"' get name, startname

schön formatiert als HTML-Tabelle (und dann in Ihrem Browser geöffnet):
(wmic service where 'name like "%sql%"' get name, startname /format:htable >out.html) && out.html

Vollständige Syntax hier:https://msdn.microsoft.com/en-us/library/aa394531%28v=vs.85%29.aspx

Antwort2

Dies können Sie in zwei Schritten erreichen:

  1. Holen Sie sich die Liste der Dienste:sc \\localhost query | findstr SERVICE_NAME
  2. Ihr fehlendes Teil: sc \\localhost qc+ SERVICE_NAME +| findstr SERVICE_START_NAME

Ich würde ein Batch-Skript wie dieses empfehlen:

@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

Das Ergebnis ist etwa wie folgt: Bildbeschreibung hier eingeben

Natürlich können Sie die Ausgabe weiter bereinigen oder auf jede gewünschte Weise in eine CSV-Datei schreiben.

Antwort3

CMD hat keine native Möglichkeit, dies zu tun. SC und NET sind integrierte Anwendungen, die mit Windows geliefert werden, aber das bedeutet nicht, dass sie nativ sind. Ein Administrator kann sie jederzeit entfernen und dann bleibt sogar CMD im Dunkeln.

Mit sc sdshow erhalten Sie Sicherheitsdeskriptoren, aber das wird die Sache komplizierter, wenn Sie nicht wissen, wie man SDDL-Zeichenfolgen liest.

Am einfachsten ist es, Sysinternals PsService.exe aus dem Tools-Paket zu holen und es als PSService-Sicherheitsdienst zu verwenden. Es listet die SDDL in lesbarem Format auf, einschließlich der Kontonamen.

Antwort4

Obwohl Sie PowerShell nicht verwenden können, sollten Sie dennoch in der Lage sein, die Informationen mithilfe von VBScript aus WMI abzurufen:

Hier ist ein VBS-Skript, das alle Dienste und die Konten auflistet, mit denen sie gestartet werden:

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

Speichern Sie es und führen Sie es dann mit aus cscript ScriptName.vbs.

objService.Statewürde Ihnen den aktuellen Status des Dienstes mitteilen (da Sie erwähnt haben, dass Sie danach filtern möchten).

Mehr Infos zumWin32_Service-Klasse.

verwandte Informationen