vile-gangster
Goto Top

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:

$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 face-smile :

******************************************************



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". face-wink

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

Content-ID: 362560

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

Ausgedruckt am: 21.11.2024 um 19:11 Uhr

135333
135333 27.01.2018, aktualisiert am 29.01.2018 um 07:48:28 Uhr
Goto Top
Hi.
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  
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
Vile-Gangster
Vile-Gangster 29.01.2018 um 07:23:51 Uhr
Goto Top
Guten Morgen snapdragon,

Danke für Deine Antwort.

Aber wenn ich das ausführe wird zwar eine .csv erstellt aber der Inhalt ist irgendwie nichtssagend.
Folgendes wird in die .csv geschrieben.



Ne Idee warum hier so kryptisches ausgegeben wird?


Gruß
Vile-Gangster
135333
135333 29.01.2018 aktualisiert um 07:49:59 Uhr
Goto Top
Hatte nur die falsche Variable verwendet, ist oben korrigiert, läuft hier problemlos und wurde natürlich auch getestet!
Vile-Gangster
Vile-Gangster 02.02.2018 um 08:05:30 Uhr
Goto Top
Hi snapdragon,

noch mals Danke für Deine Antwort aber ich bekomme nach wie vor das gleiche Ergebnis bei Deinem Script.
Sowhl auf meinem Test Rechner, 2 VMs (mit und ohne Domäne), priv. Rechner und 3 Kundensystemen.
Wo da auch immer da der Wurm drin stecken mag...

Aber ich konnte meine Version jetzt so umbauen das es zu einem Ergebnis kommt das so passt wie ich es benötige.
Hier gibt es bestimmt einigen die die Hände überm Kopf zusammenschlagen und den Code optimieren würden,
aber hey ich bin froh das es klappt. face-big-smile

$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
$User = Get-WMIObject -class Win32_ComputerSystem
$path = „C:\Test“
$logfile = "C:\test\CheckAV_$Date.log"  
$SrvcNoEx = " Dienste sind nicht installiert"  
$SrvcStopped = " Dienste sind gestoppt"  
$SrvcStarted = " OK"  
$Spacer = "******************************************************"  

If(!(test-path $path)) 
{New-Item -type Directory -Force -Path $path} 


if (-Not $TMServiceNoEx)
{
$Spacer + "`r`n" + $ServiceName + $SrvcNoEx + "`r`n" + $Computer.Value.ToString() + "`r`n" + $User.UserName.ToString() `  
| out-file -Encoding Ascii -append -filepath $logfile
}
elseif ($TMServiceStopped)
{
$Spacer + "`r`n" + $ServiceName + $SrvcStopped + "`r`n" + $Computer.Value.ToString() + "`r`n" + $User.UserName.ToString() `  
| out-file -Encoding Ascii -append -filepath $logfile
}


Und das Ergebnis so wie ich es haben wollte:

******************************************************
Trend Micro* Dienste sind gestoppt
PC1
Domain\User1


Gruß
Vile-Gangster
135333
135333 02.02.2018 aktualisiert um 11:48:15 Uhr
Goto Top
Papperlapapp, klar geht das überall!
Mach ich doch tagtäglich:

screenshot

Dir fehlt vermutlich einfach noch die Erfahrung, oder du nutzt einen Editor ohne UTF-8 Fähigkeiten, wenn nicht benötigt einfach das Encoding im Skript ändern.
Wenn es keine gestoppten Dienste gibt gibt's natürlich auch keinen Inhalt.