realfairplayer
Goto Top

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

Content-Key: 45077

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

Printed on: April 24, 2024 at 17:04 o'clock

Member: bastla
bastla Nov 22, 2006 at 11:57:59 (UTC)
Goto Top
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
sStatusMsg = sStatusMsg & objService.DisplayName & VbTab & objService.State & vbCrLF
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
bReboot = False
in der Schleife
If objService.DisplayName = "WasAuchImmer" Then If objService.State = "RebootOderSo" Then bReboot = True  
und nach der Schleife kannst Du dann mit
If bReboot Then ...
eine entsprechende Aktion auslösen (zB nur in diesem Fall die Mail verschicken).

HTH
bastla
Member: RealFairPlayer
RealFairPlayer Nov 22, 2006 at 12:03:27 (UTC)
Goto Top
Hi!

Merci für die Schnelle Hilfe. Genau das war die Frage (Punkt 1)

Jedoch ist mir nicht klar was sStatusMsg nun ist (eine Variable?) Wenn dem so ist, wie kann ich sie im Body der Mail einbauen?

Danke im voraus,
Matthias

EDIT:

Ich ziehe die Frage zurück, habe es selbst rausgefunden. Nun noch eine Frage, könnte man die Abfrage der Services abändern in a la alles was mit service beginnt anzeigen?
Member: bastla
bastla Nov 22, 2006 at 12:09:47 (UTC)
Goto Top
Hallo RealFairPlayer!

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, einfach
objMessage.HTMLBody = "Der Check erbrachte folgendes Ergebnis:" & vbCrLF & sStatusMsg & vbCrLF &  "Viel Spaß damit."  

Grüße
bastla
Member: RealFairPlayer
RealFairPlayer Nov 22, 2006 at 12:12:25 (UTC)
Goto Top
Merci Bastla für die schnelle Antwort face-smile

Hier noch das letzte was mir fehlt face-smile

Nun noch eine Frage, könnte man die Abfrage der Services abändern in a la alles was mit service beginnt anzeigen?
Member: bastla
bastla Nov 22, 2006 at 12:16:44 (UTC)
Goto Top
Hallo RealFairPlayer!

Wenn Du das wirklich willst ...
Dazu die "where"-Klausel weglassen
Set colRunningServices = objWMIService.ExecQuery("Select * from Win32_Service")  

Grüße
bastla
Member: RealFairPlayer
RealFairPlayer Nov 22, 2006 at 12:20:17 (UTC)
Goto Top
Hmmm.... ich habe mich schlecht ausgedrückt.

Wenn ich mir alle Dateien mit dem Anfang aha unter Dos anzeigen lassen will gebe ich ja ein
dir aha*

Und sowas bräuchte ich für diese WHERE Abfrage .... nur hier geht Sternchen nicht, daher meine Frage ob die überhaupt geht und wenn ja, wie face-smile
Member: Biber
Biber Nov 22, 2006 at 12:28:09 (UTC)
Goto Top
@bastla
...ich glaube, er meint:
...("Select * from Win32_Service where Left(DisplayName,7)= 'Service'")   
und nicht alle Services.

Gruß
biber
Member: bastla
bastla Nov 22, 2006 at 12:29:38 (UTC)
Goto Top
Hallo RealFairPlayer!

Also etwa
Set colRunningServices = objWMIService.ExecQuery
("Select * from Win32_Service where Name Like 'service%'")  
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?
Member: RealFairPlayer
RealFairPlayer Nov 22, 2006 at 12:44:28 (UTC)
Goto Top
Hoi!

Merci erst mal für all eure Mühen, ehrlich! Nun tut alles was es soll face-smile

Nun habe ich alle Services und sie werden auch ausgegeben, könnte man evtl. nach jedem Status (also running or stop) noch einen Zeilenumbruch einfügen oder wäre des zuviel des guten? *neugierigschau*

EDIT:

Manchmal sollte ich einfach erst denken und dann schreiben face-smile Merci - erledigt.
Member: bastla
bastla Nov 22, 2006 at 12:50:07 (UTC)
Goto Top
Hallo RealFairPlayer!

Textzeilenumbruch hatte ich ohnehin (vbCrLF), ansonsten:
sStatusMsg = sStatusMsg & "<p>" & objService.DisplayName & VbTab & objService.State & "</p>" & vbCrLF  
Grüße
bastla
Member: RealFairPlayer
RealFairPlayer Nov 22, 2006 at 12:56:30 (UTC)
Goto Top
Einen hab ich noch face-smile

Wieso klappt das so nicht?

("Select * from Win32_Service where Name Like 'Um%' AND where state Like 'running'")


Matze face-smile
Member: bastla
bastla Nov 22, 2006 at 13:00:09 (UTC)
Goto Top
Hallo RealFairPlayer!

So vielleicht?
("Select * from Win32_Service where Name Like 'Um%' AND where 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]
Member: RealFairPlayer
RealFairPlayer Nov 22, 2006 at 13:02:54 (UTC)
Goto Top
Vielleicht bastla, vielleicht ... wer weiß .. wer weiß face-smile

MERCI und vielen lieben Dank an euch beide für die schnelle und geniale Hilfe. Hier fühl ich mich wohl ... hier wird geholfen face-smile

Euch noch nen schönen Tag

Matthias
Member: bastla
bastla Nov 22, 2006 at 13:05:26 (UTC)
Goto Top
Hier fühl ich mich wohl ...
So soll's sein ... face-smile

Dir auch einen schönen Tag
bastla
Member: Biber
Biber Nov 22, 2006 at 16:44:04 (UTC)
Goto Top
@bastla
Manchmal dauert's lang, dann wieder länger ...
Kann ich nur bestätigen... face-wink
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
... 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".