nutzer2013

Powershell Get-Service

Guten Morgen,

ich bin etwas unbeholfen bei dieser Aufgabe.

Es soll ueberprueft werden, ob alle Dienste die vom Start-Typ „Automatisch“ sind, auch laufen. Falls einer dieser Dienste derzeit nicht laeuft, ist im naechsten Schritt zu ueberpruefen,
wann dieser seit dem letzten Systemstart zuletzt ausgefuehrt wurde. Diese Informationen sind in einer Tabelle wie folgt auszugeben:

Dienstname Start-Typ Status Zuletzt ausgefuehrt


Mein Problem liegt bei dem "Zuletzt ausgefuehrt".

Das was ich bis jetzt schon für mein Skript habe ist:

$Service = get-wmiobject win32_service -Filter "Startmode='Auto' " | Select-object Name, Startmode,State
$Service |Convertto-html | Set-Content C:\Ausgabe\Dienste.html
& C:\Ausgabe\Dienste.html

Meine Überlegung ist es halt dort sowas hinzupacken:
if $service.state = stopped
then (zeige mir das Datum an, andem es zuletzt ausgefuehrt wurde)
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 220768

Url: https://administrator.de/forum/powershell-get-service-220768.html

Ausgedruckt am: 06.05.2025 um 17:05 Uhr

colinardo
colinardo 30.10.2013 aktualisiert um 10:08:25 Uhr
Goto Top
Hallo Nutzer2013,
eine solche Eigenschaft "Zuletzt ausgefuehrt" gibt es leider nicht, aber was du machen könntest wäre das System-EventLog zu überprüfen wann ein bestimmter Dienst beendet wurde - und zwar so:
(Achtung: Das Script ist für ein deutsches System ausgelegt, EventLogs in deutscher Ausgabe)
$stoppedServices = get-wmiobject win32_service -Filter "Startmode='Auto' and State='Stopped' and ExitCode <> 0 "  
$arrServices = @()
foreach ($service in $stoppedServices){
    $sName = $service.Name 
    $timeStopped = (Get-EventLog -LogName System | ?{$_.EventID -eq 7036 -and $_.Message -match "$sName.*?Beendet"}| Sort-Object -Descending -Property TimeWritten| select -First 1).TimeWritten  
    echo "Service: $sName stopped at $timeStopped"  
    $arrServices += $service| select Name,StartMode,State,@{Name="LastStopped";Expression={$timeStopped}},ExitCode  
}
$arrServices| Convertto-HTML | Set-Content "C:\Ausgabe\Dienste.html" -Force  
Zu beachten ist das das obige Script, je nachdem wie groß die EventLogs sind, einige Zeit benötigt um die EventLogs auszuwerten. Außerdem sind nur Dienste berücksichtigt welche nur mit einem anderen ExitCode als 0 beendet wurden (also Fehlerhaft), es ist nämlich normal das sich einige Dienste die automatisch starten nach einiger Zeit selber beenden.

Grüße Uwe
Nutzer2013
Nutzer2013 30.10.2013 um 10:36:21 Uhr
Goto Top
Danke, dass hilft mir schon etwas weiter.
Nur die Ausgabe soll halt alle services ausgeben die den startmode auf auto haben. Zusätzlich soll dann dieses "zuletzt ausgeführt" dann ausgeben werden bei den Deinsten die das state auf Stopp haben.

Hoffe ich konnte irgendwie das jetzt besser erklären.
colinardo
colinardo 30.10.2013 um 11:14:20 Uhr
Goto Top
schon verstanden, schreib einfach die erste Zeile des Scripts so
$stoppedServices = get-wmiobject win32_service -Filter "Startmode='Auto' and State='Stopped'"   
dann hast du's so wie du willst

Grüße Uwe
Nutzer2013
Nutzer2013 30.10.2013 um 11:27:27 Uhr
Goto Top
Super Danke face-smile