Mit Powershell Dienste abfragen, also ob sie laufen oder gestoppt sind
Hallo zusammen,
ich habe hier ein kleines Problem bei dem ich nicht weiterkomme.
Ich möchte via Script (Powershell) überprüfen ob bestimmte Dienste (Antivirus) laufen und wenn diese gestoppt sind
oder gar nicht vorhanden sind dass dieses in eine Log Datei geschrieben wird.
Inhalt sollte Rechnername und angemeldet Benutzer sein und der/die Dienst/e.
Was ich mir bisher zusammengeschustert habe ist folgendes:
Mein Problem an der Sache ist folgendes, es wird auch in die Datei geschrieben obwohl die Dienste vorhanden sind und laufen, das
soll nach Möglichkeit eben nicht sein.
Des weiteren sind sehr viele unnötige Leerzeilen in der Datei, wie bekommt man die denn da raus bzw. wie werden die erst gar nicht kreiert,
das könnte eigentlich ein 4-Zeiler sein :
Tja, und nun die Frage an die die sich damit auskennen, wie würdet ihr das machen damit es klappt?
Ich habe hier (und bei Google) leider nichts weiter gefunden das mir weiterhelfen würde und ich bin in diesem Thema recht "unbedarft".
Also wenn mir hier einer helfen könnte wäre das echt toll.
In diesem Sinne schon mal ein schönes Wochenende
Gruß
Vile-Gangster
ich habe hier ein kleines Problem bei dem ich nicht weiterkomme.
Ich möchte via Script (Powershell) überprüfen ob bestimmte Dienste (Antivirus) laufen und wenn diese gestoppt sind
oder gar nicht vorhanden sind dass dieses in eine Log Datei geschrieben wird.
Inhalt sollte Rechnername und angemeldet Benutzer sein und der/die Dienst/e.
Was ich mir bisher zusammengeschustert habe ist folgendes:
$ServiceName = "Trend Micro*"
$TMServiceNoEx = Get-Service -DisplayName $ServiceName -ErrorAction SilentlyContinue
$TMServiceStopped = Get-Service -DisplayName $ServiceName -ErrorAction SilentlyContinue | Where-Object {$_.Status -eq "Stopped"}
$Date = Get-Date -format yyyyMMdd
$Computer = Get-Childitem env:computername | Format-List -Property Value
$User = Get-WMIObject -class Win32_ComputerSystem | Format-List -Property username
$path = „C:\Test“
$logfile = "C:\test\CheckAV_$Date.log"
$SrvcNoEx = " Dienste sind nicht installiert"
$SrvcStopped = " Dienste sind gestoppt"
$SrvcStarted = " OK"
If(!(test-path $path))
{New-Item -type Directory -Force -Path $path}
"******************************************************" | out-file -Encoding Ascii -append -filepath $logfile
$Computer | out-file -Encoding Ascii -append -filepath $logfile
$User | out-file -Encoding Ascii -append -filepath $logfile
if (-Not $TMServiceNoEx) {$ServiceName + $SrvcNoEx | out-file -Encoding Ascii -append -filepath $logfile}
elseif ($TMServiceStopped) {$ServiceName + $SrvcStopped | out-file -Encoding Ascii -append -filepath $logfile}
else {$ServiceName + $SrvcStarted | out-file -Encoding Ascii -append -filepath $logfile}
Mein Problem an der Sache ist folgendes, es wird auch in die Datei geschrieben obwohl die Dienste vorhanden sind und laufen, das
soll nach Möglichkeit eben nicht sein.
Des weiteren sind sehr viele unnötige Leerzeilen in der Datei, wie bekommt man die denn da raus bzw. wie werden die erst gar nicht kreiert,
das könnte eigentlich ein 4-Zeiler sein :
******************************************************
Value : PC1
username : Domain\User1
Trend Micro* OK
Tja, und nun die Frage an die die sich damit auskennen, wie würdet ihr das machen damit es klappt?
Ich habe hier (und bei Google) leider nichts weiter gefunden das mir weiterhelfen würde und ich bin in diesem Thema recht "unbedarft".
Also wenn mir hier einer helfen könnte wäre das echt toll.
In diesem Sinne schon mal ein schönes Wochenende
Gruß
Vile-Gangster
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 362560
Url: https://administrator.de/contentid/362560
Ausgedruckt am: 21.11.2024 um 19:11 Uhr
5 Kommentare
Neuester Kommentar
Hi.
Lässt sich abkürzen
Zu deiner komischen Formatierung:
Das kommt daher das Format CMDLets in Wirklichkeit keine Strings sondern Objekte sind und die musst du vorher in Strings wandeln also an out-string pipen.
Gruß snap
Lässt sich abkürzen
$services = "Trend Micro*"
$path = "C:\Test"
$logfile = "$path\CheckAV_$(get-date -f yyyyMMdd).csv"
If(!(test-path $path)){md $Path -Force | out-null}
Get-Service -DisplayName $services -ErrorAction Ignore | ?{$_.Status -ne "Running"} | select @{n='Computername';e={$env:Computername}},Name,Status | export-csv $logfile -NoType -Delimiter ";" -Encoding UTF8 -Append
Das kommt daher das Format CMDLets in Wirklichkeit keine Strings sondern Objekte sind und die musst du vorher in Strings wandeln also an out-string pipen.
Gruß snap
Hatte nur die falsche Variable verwendet, ist oben korrigiert, läuft hier problemlos und wurde natürlich auch getestet!