WMI - WSH Programmierung
Hi zusammen,
Ich bräuchte einen Tip, ich weiß das der unten aufgeführte Code nicht ganz richtig ist, aber ich wüsste auch nicht wie ich suchen soll.
Der erste Codeteil gibt mir den Status eines Services aus:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colRunningServices = objWMIService.ExecQuery _
("Select * from Win32_Service where Name=´HTTPFilter´")
For Each objService in colRunningServices
Wscript.Echo objService.DisplayName & VbTab & objService.State
Next
Der folgende Codeteil sendet mir eine Email, und darin soll das Eregebnis aus dem ersten Code (also ob der Service läuft oder nicht) enthalten sein.
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Reboot of Server"
objMessage.From = "reboot-master@anbieter.com"
objMessage.To = "matthias.orczak@anbieter.com"
objMessage.HTMLBody = "<p>This is a automatic generated email for the NOC to inform them
</p><p>that the second Umero Server (10.0.217.117) has rebooted
</p><p><strong>successfully</strong>.</p>"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.anbieter.com"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
objMessage.Send
Ich bräuchte einen Tip, ich weiß das der unten aufgeführte Code nicht ganz richtig ist, aber ich wüsste auch nicht wie ich suchen soll.
Der erste Codeteil gibt mir den Status eines Services aus:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colRunningServices = objWMIService.ExecQuery _
("Select * from Win32_Service where Name=´HTTPFilter´")
For Each objService in colRunningServices
Wscript.Echo objService.DisplayName & VbTab & objService.State
Next
Der folgende Codeteil sendet mir eine Email, und darin soll das Eregebnis aus dem ersten Code (also ob der Service läuft oder nicht) enthalten sein.
Set objMessage = CreateObject("CDO.Message")
objMessage.Subject = "Reboot of Server"
objMessage.From = "reboot-master@anbieter.com"
objMessage.To = "matthias.orczak@anbieter.com"
objMessage.HTMLBody = "<p>This is a automatic generated email for the NOC to inform them
</p><p>that the second Umero Server (10.0.217.117) has rebooted
</p><p><strong>successfully</strong>.</p>"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.anbieter.com"
objMessage.Configuration.Fields.Item _
("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
objMessage.Configuration.Fields.Update
objMessage.Send
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 45077
Url: https://administrator.de/forum/wmi-wsh-programmierung-45077.html
Ausgedruckt am: 19.04.2025 um 09:04 Uhr
15 Kommentare
Neuester Kommentar
Hallo RealFairPlayer und willkommen im Forum!
Der erste Programmteil gibt die Statusinformation (je nach Aufrufart) an der Konsole oder in einer Messagebox aus. Da Du aber die Statusinformation versenden willst, musst Du diese natürlich auch noch speichern, etwa
Wenn diese Zeile in der Schleife platziert wird (nach oder anstatt "WScript.Echo" und vor "Next"), hast Du am Ende des ersten Programmteiles die gesammelten Meldungen (wenn es denn mehrere sind) in sStatusMsg und kannst diese in den Body der Mail einbauen.
Willst Du auf einen Status besonders reagieren, dann verwende einen Schalter. Beispiel: Vor der Schleife
in der Schleife
und nach der Schleife kannst Du dann mit
eine entsprechende Aktion auslösen (zB nur in diesem Fall die Mail verschicken).
HTH
bastla
Der erste Programmteil gibt die Statusinformation (je nach Aufrufart) an der Konsole oder in einer Messagebox aus. Da Du aber die Statusinformation versenden willst, musst Du diese natürlich auch noch speichern, etwa
sStatusMsg = sStatusMsg & objService.DisplayName & VbTab & objService.State & vbCrLF
Willst Du auf einen Status besonders reagieren, dann verwende einen Schalter. Beispiel: Vor der Schleife
bReboot = False
If objService.DisplayName = "WasAuchImmer" Then If objService.State = "RebootOderSo" Then bReboot = True
If bReboot Then ...
HTH
bastla
Hallo RealFairPlayer!
Grüße
bastla
Jedoch ist mir nicht klar was sStatusMsg nun ist (eine Variable?)
Genau.Wenn dem so ist, wie kann ich sie im Body der Mail einbauen?
Ohne HTML-Formatierungen zu berücksichtigen, einfachobjMessage.HTMLBody = "Der Check erbrachte folgendes Ergebnis:" & vbCrLF & sStatusMsg & vbCrLF & "Viel Spaß damit."
Grüße
bastla
@bastla
...ich glaube, er meint:
und nicht alle Services.
Gruß
biber
...ich glaube, er meint:
...("Select * from Win32_Service where Left(DisplayName,7)= 'Service'")
Gruß
biber
Hallo RealFairPlayer!
Also etwa
siehe auch http://www.microsoft.com/technet/scriptcenter/topics/win2003/like.mspx
Grüße
bastla
@Biber
Manchmal dauert's lang, dann wieder länger ...
Gibst Du mir schnell Nachhilfe: Müsste ich die Bedingung case-sensitiv formulieren?
Also etwa
Set colRunningServices = objWMIService.ExecQuery
("Select * from Win32_Service where Name Like 'service%'")
Grüße
bastla
@Biber
Manchmal dauert's lang, dann wieder länger ...
Gibst Du mir schnell Nachhilfe: Müsste ich die Bedingung case-sensitiv formulieren?
Hallo RealFairPlayer!
So vielleicht?
("Select * from Win32_Service where Name Like 'Um%' ANDwhere state Like 'running'")
Grüße
bastla
[Edit] Obwohl: Bei "State" kannst Du auch auf Gleichheit überprüfen, die Ähnlichkeitssuche ("Like") benötigst Du nicht - außerdem sehe ich ohnehin kein Jokerzeichen ("%"). [/Edit]
So vielleicht?
("Select * from Win32_Service where Name Like 'Um%' AND
Grüße
bastla
[Edit] Obwohl: Bei "State" kannst Du auch auf Gleichheit überprüfen, die Ähnlichkeitssuche ("Like") benötigst Du nicht - außerdem sehe ich ohnehin kein Jokerzeichen ("%"). [/Edit]
@bastla

Diese Ausgabe hier..
... kam bei der Abfrage "Select * from Win32_Service where Name Like '%service%' "
Ebenfalls schönen Abend
Biber
P.S. @RealFairPlayer:
Du kannst (eigene) Beiträge auf "Gelöst" setzen, also diesen schönen grünen Haken anzeigen lassen, wenn Du auf der Frage selbst "Editieren" drückst.
Dann siehst Du im Menü ein Kontrollkästchen "Dieser Beitrag gilt als gelöst".
Manchmal dauert's lang, dann wieder länger ...
Kann ich nur bestätigen... Müsste ich die Bedingung case-sensitiv formulieren?
Nein.Diese Ausgabe hier..
>cscript //nologo f:\showservices.vbs
ImapiService IMAPI-CD-Brenn-COM-Dienste Stopped
srservice Systemwiederherstellungsdienst Stopped
TermService Terminaldienste Running
Ebenfalls schönen Abend
Biber
P.S. @RealFairPlayer:
Du kannst (eigene) Beiträge auf "Gelöst" setzen, also diesen schönen grünen Haken anzeigen lassen, wenn Du auf der Frage selbst "Editieren" drückst.
Dann siehst Du im Menü ein Kontrollkästchen "Dieser Beitrag gilt als gelöst".