Hi, ich übergebe an mein Sevice Prüfskript die Dienste die ich prüfen möchte.
Nun gibt es leider Dienste, die lustigste Sachen in ihren Servicenamen packen.
Bsp.: MSSQL$DATEV_DBENGINE,SQLAgent$DATEV_DBENGINE
Wenn ich diese nun übergebe, erkennt PS hierrin Variablen.
Habe einmal den Teil des Skriptes mit angehongen:
$logfile="C:\service_start.log" $server=$args[0] $services=$args[1].split(",") $result="OK - Service Checks" $error="0" $runningservices="" $runningservices=Get-Service -ComputerName $server foreach ($i in $services) { if ($runningservices.Name.ToLower() -match $i.ToLower()) { $position=[array]::indexof($runningservices.Name.ToLower(),$i.ToLower()) $chanelname=$runningservices[$position].Name $chaneldispname=$runningservices[$position].DisplayName if ($chanelname) {} else {$chanelname=$i} if ($runningservices[$position].Status -like "Running") { echo "<value>1</value>" } else { echo $i echo "<value>0</value>" $error="1" try { # $unixtime=(Get-Date -UFormat %s) -Replace("[,\.]\d*", "") echo "" >>$logfile $unixtime24hago=$unixtime-86400 $servicestartlog=Get-Content $logfile foreach ($i in $servicestartlog) { $logvalues=$i.split(":") #$logvalues #echo $logvalues[0] $logvalues[2] if (($logvalues[0] -eq $server) -and ($logvalues[1] -eq $chanelname) -or ($logvalues[0] -eq "" ) ) { #echo $logvalues[2] if ($logvalues[2] -gt $unixtime24hago) { $mail=$mail+"||"+$i $sendmail=$sendmail+1 } else{ $return=Get-Service $chanelname -ComputerName $server | start-service echo $server":"$chanelname":"$unixtime >>$logfile } } } if ($sendmail -eq 1) { Send-MailMessage -To $emailTo -Subject $subject -Body $mail -SmtpServer $smtpServer -From $emailFrom -Priority $priority } } catch { #echo "fehler" #echo "returncode:" $return } $problem="$chanelname,$problem" $result="Problem with Service: $problem" } } } if ($error -eq "0") { #write-host 0 #write-host "End: ExitCode 0" exit 0 } else { #write-host "End: ExitCode 1" echo "<error>1</error>" exit 1}
Mfg. Chris