nutzer2013
Goto Top

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)

Content-Key: 220768

Url: https://administrator.de/contentid/220768

Printed on: April 19, 2024 at 22:04 o'clock

Member: colinardo
colinardo Oct 30, 2013 updated at 09:08:25 (UTC)
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
Member: Nutzer2013
Nutzer2013 Oct 30, 2013 at 09:36:21 (UTC)
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.
Member: colinardo
colinardo Oct 30, 2013 at 10:14:20 (UTC)
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
Member: Nutzer2013
Nutzer2013 Oct 30, 2013 at 10:27:27 (UTC)
Goto Top
Super Danke face-smile