Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

VBScript Server Statusabfrage, Probleme bei der Ausgabe

Mitglied: DenebCH

DenebCH (Level 1) - Jetzt verbinden

20.04.2010, aktualisiert 20:54 Uhr, 5947 Aufrufe, 14 Kommentare

Hallo zusammen,

Ich habe folgendes Problem Ich habe hier ein VBScript das Server aus einer Liste per Ping abfragt ob sie erreichbar sind oder eben nicht,
und dann den Servernamen + Online oder eben Offline ausgibt.

Nun das funktioniert auch soweit, nur das Problem ist das für jede Anfrage eine neue Msgbox aufgeht und ich das aber in einer einzelnen
Messagebox brauche.

Hier erstmal das Script zur Abfrage des Serverstatuses
01.
Dim inhalt(50)
02.
Set MyShell = CreateObject("WScript.Shell")
03.
Set MyFiles = CreateObject("Scripting.FileSystemObject")
04.

05.

06.
Set InfoZeile = MyFiles.OpenTextFile("C:\ServerChecks\Logfile.txt",1)
07.
Do 
08.
	n=n+1
09.
       Inhalt(n) = InfoZeile.ReadLine
10.
	if Inhalt(n)="" then n=n-1
11.
Loop Until InfoZeile.AtEndOfStream = True 
12.
 
13.

14.
For x = 1 to n 
15.
	Proggi = "%comspec% /c ping.exe -n 1 -a" & " " & Inhalt(x) & " " & ">>c:\ServerChecks\temp.txt"
16.
	Return = MyShell.Run(Proggi,0,True) 
17.
	Set TempFile =MyFiles.OpenTextFile("C:\ServerChecks\temp.txt")       
18.
       Abfrage = Tempfile.Readall
19.
        If instr(Abfrage, "ytes=") > 0 Then
20.
		 Ausgabe = MsgBox("Host " + Inhalt(x) + " ist Online...", 1, "ServerCheck")
21.
	 Else
22.
		 Ausgabe = MsgBox("Host " + Inhalt(x) + " ist Offline...", 1, "ServerCheck")
23.
	End if
24.
	tempfile.close
25.
       If Ausgabe = 2 Then WScript.Quit
26.
Next    
Wie gesagt es funktioniert soweit nur bei über 40 Servern ist es echt nervend wenn jeder Server in einem eigener Msgbox auftaucht.
Mein Gedanke zur lösung ist das die Daten nicht gleich ausgegeben werden sondern erst in ein Array geschrieben werden und das Komplette
Array dann in einer einzelnen Msbbox dargestellt wird.

Ich denke der ansatz Stimmt ¦ lasse mich da aber gerne korrigieren ¦ nur das umsetzen da hackt es gewaltig

vielleicht kann mir ja hier jemand helfen wäre sehr froh darüber

Gruss
Deneb

----[Edit Biber] Codetags nachgetragen. [/Edit]
Mitglied: ChrFriedel
20.04.2010 um 11:50 Uhr
Also ich denk der Ansatz ist okay. Du solltest eben statt der Ausgabe mit MsgBoxen einen String zusammenbauen und den am Ende in einer Msgbox ausgeben. Hier ganz kurz das Prinzip dazu
01.
dim string
02.

03.
string="test"
04.
string=string & vbLf & "test2"
05.

06.
msgbox(string)
vbLF steht dabei für einen LineFeed, also eine neue Zeile der Übersicht halber...

grüße
Bitte warten ..
Mitglied: LotPings
20.04.2010 um 11:58 Uhr
Oder du gibst in ein Consolenfenster aus
Oder du verpackst das Script in eine hta mit eigener Gui
oder du schickst die Ausgabe an den Internet-Explorer.

Viele Wege führen nach Rom, die obigen 3 erzeugen eine kontinuierliche Ausgabe

Gruß
LotPings
Bitte warten ..
Mitglied: DenebCH
20.04.2010 um 13:57 Uhr
Hallo und danke erstmal für die schnellen Antworten.

@ChrFriedel, ja das mit den Strings hört sich auch gut an habs auch mal versucht einzubauen aber ich bekomme nicht das geünschte ergebniss
ich habe nur noch 4 Server in der Liste die ich im Eingangs Post erwähnt habe damit das ganze übersichtlicher bleibt. nun nach dem ich das mit den
Strings versuchte kam ich zwar ein Resultat aber nicht wie gewünscht sondern es zeigt mir den ersten und den letzten Server an aber die 2 dazwischen
leider nicht.

Das Problem wird sein das ich einfach nocht kein gefühl für die abläufe habe da ich mit VBScript erst paar Tage arbeite.


@LotPings das sind natürlich alles schöne Macharten und in zukunft sicher auch Sachen die von mir angestrebt werden aber zur Zeit bekomme
ich nicht mal dieses verhältnissmässig einfache Script hin.
Bitte warten ..
Mitglied: ChrFriedel
20.04.2010 um 14:45 Uhr
Dann poste mal bitte den Teil in dem du die Strings zusammenbaust.

ohne kann man leider keine Tipps geben warum nur der erste und der letzte berücksichtigt werden ;)
Bitte warten ..
Mitglied: DenebCH
20.04.2010 um 15:00 Uhr
01.
For x = 1 to n 
02.
	Proggi = "%comspec% /c ping.exe -n 1 -a" & " " & Inhalt(x) & " " & ">>c:\ServerChecks\temp.txt"
03.
	Return = MyShell.Run(Proggi,0,True) 
04.
	Set TempFile =MyFiles.OpenTextFile("C:\ServerChecks\temp.txt")       
05.
       Abfrage = Tempfile.Readall
06.
        If instr(Abfrage, "ytes=") > 0 Then
07.
		dim string
08.

09.
			string=Inhalt(x)
10.
			string=string & vbLf & inhalt(n) ##red| Hier bin ich mir einfach nicht sicher wie weiter, oder eher bin ich mir sicher das ich das noch nicht 
11.
                                                                                                                                     begriffen habe## 
12.
			
13.
			
14.
	 Else
15.
		 'noch offen
16.
	End if
17.

18.

19.
	tempfile.close
20.

21.
        If Ausgabe = 2 Then WScript.Quit
22.
msgbox(string)
23.

24.
Next  
25.
  
Bitte warten ..
Mitglied: LotPings
20.04.2010 um 16:11 Uhr
Hallo DenebCH,

dein Ansatz ist eigentlich unnötig komplex.
Du kannst die gelesenen Zeilen direkt verarbeiten ohne Array.
Der Rückgabewert des Ping sollte ausreichen (Wenn nicht, ist die direkte Verarbeitung der Ausgabe von oExec günstiger als eine Temp-Datei)
Die Formatierung mit Code Tags in der Forumsoftware macht das Script lesbarer.
Das Kapseln in Funktionen vereinfacht den Aufbau.

01.
' PingList.vbs
02.
Option explicit
03.
Dim Fso, PingList, WshShell, Ausgabe
04.

05.
Set Fso = CreateObject("Scripting.FileSystemObject")
06.
Set PingList = fso.OpenTextFile("PingList.Txt")
07.
Set WshShell = WScript.CreateObject("WScript.Shell")
08.
Ausgabe = ""
09.

10.
Do While Not (PingList.atEndOfStream)
11.
  Ausgabe=Ausgabe & PingHost(PingList.ReadLine) & vbCRLF 
12.
Loop
13.

14.
MsgBox Ausgabe, 0, "Ping Ergebnisse"
15.

16.
Function PingHost(HostName)
17.
	Dim Ping
18.
	Ping = WshShell.Run("ping -n 1 -a " & HostName, 0, True)
19.
	Select Case Ping
20.
		Case 0 PingHost = "On  Line: " & HostName
21.
		Case 1 PingHost = "Off Line: " & HostName
22.
	End Select
23.
End Function
Edit: Zeile 06 musst du natürlich anpassen
Bitte warten ..
Mitglied: DenebCH
21.04.2010 um 09:38 Uhr
Hallo LotPings

Danke dir ja so funktioniert es einwandfrei.

Warum es so kompliziert aussah, ich wollte hier erst mal mein Wissen schritt für schritt aufbauen und das Script dann als Hilfe für ein anderes Script verwenden... Ich wollte erst mal eine saubere Ausgabe erreichen damit ich dann das Script so anpassen kann das es
dem Ping auch die uptime abfragt.

Da für uns die Uptime auch sehr wichtig ist.

Der nächste Schritt wäre ein zweites Script das anstelle des Servers die Services überprüft da wir ein Paar wichtige services haben und diese gerne durch ein kleines Script checken wollen ob gestartet oder gestoppt.
Bitte warten ..
Mitglied: ChrFriedel
21.04.2010 um 10:57 Uhr
Hi Deneb,

also die Lösung haste ja schon erhalten. Aber vielleicht nochmal zum Verständnis warum dein Code nicht funktioniert hat.

Der Teil

01.
string=Inhalt(x)
02.
string=string & vbLf & inhalt(n) Hier bin ich mir einfach nicht sicher wie weiter, oder eher bin ich mir sicher das ich das noch nicht
03.
begriffen habe 
kann so nicht funktionieren. Du weist quasi im ersten schritt den inhalt an den String zu. Soweit okay. Dann hängst du an den String mittels der & symbole einen Zeilenumbruch und nochetwas an. Auch okay. Allerdings musst du bedenken das du in einer Schleife bist. Das heißt beim 2ten Durchlauf überschreibst du den Inhalt des Strings mit dem ersten Statement wieder. Das heißt alles was bisher im String stand ist nun wieder weg. Außerdem ist deine msgbox ebenfalls in der Schleife und wird somit solange die Variable Ausgabe auf 2 steht auch in jedem Durchlauf aufgerufen. Das war ja das was du nicht wolltest ;)

Aber wie gesagt das nur alles um dir vielleicht ein wenig beim Verständnis für Schleifen zu helfen.

grüße
Bitte warten ..
Mitglied: DenebCH
23.04.2010 um 07:23 Uhr
Hallo LotPings,
habe da noch ne kleine frage.

Habe nun das script einwenig für die zweite aufgabe verändert, Genau wie oben soll es aus einer Liste auslesen aber anstelle von Servernamen stehen da die namen von gewissen Servicen die laufen und geprüft werden sollen. Und dann auch wieder die Ausbe in einer MSGbox.

01.
 
02.
Option explicit 
03.
Dim Fso, Servicelist, WshShell, Ausgabe, WL, text 
04.

05.
Set Fso = CreateObject("Scripting.FileSystemObject") 
06.
Set Servicelist = fso.OpenTextFile("serviceliste2.txt") 
07.
Set WshShell = WScript.CreateObject("WScript.Shell") 
08.
Set WL = fso.OpenTextFile("text.txt") 
09.
text = wl.ReadLine
10.
Ausgabe = "" 
11.

12.

13.
Do While Not (serviceList.atEndOfStream) 
14.
	Ausgabe=Ausgabe & ServiceCheck(serviceList.ReadLine) & vbCRLF  
15.
Loop 
16.

17.
MsgBox Ausgabe, 0, "Service Status Check " 
18.

19.
Function ServiceCheck(ServiceName)
20.
	Dim Service
21.
	##red|Service = WshShell.Run("sc query " & ServiceName & "| FIND /I "STATE              : 4  RUNNING"", 0, True)rot,## 
22.
	Select Case Service
23.
		Case 0 ServiceCheck = " Gestartet: " & ServiceName 
24.
		Case 1 ServiceCheck = " Gestoppt: " & ServiceName 
25.
	End Select
26.
End Function
27.
Die Zeile die rot ist macht das Problem ich muss ja mit "" das einführen des Codes anzeigen habe aber in meinem code beim FIND schon "" und das scheint Probleme zu machen ich habe es schon versucht mit den einzelnen ' aber das klappt nicht.

Der Code sc query %Servicename% | FIND /I "STATE : 4 RUNNING habe ich getestet mit einer Batch datei und er funktioniert wie gewünscht nur êben das einfügen in dieses Script macht noch schwierigkeiten. siehst du vll denn Fehler den ich mache?

So habe ich den Cde in einer Batchdatei geprüft
01.
@echo off
02.
sc query AVP| find /I "STATE              : 4  RUNNING"
03.
IF "%ERRORLEVEL%"=="0" GOTO RUNNING
04.

05.
:STOPPED
06.
ECHO NOT RUNNING
07.
GOTO END
08.

09.
:RUNNING
10.
ECHO RUNNING
11.

12.
:END 
13.
pause
14.
Bitte warten ..
Mitglied: ChrFriedel
23.04.2010 um 10:11 Uhr
Moin,

Könnte das helfen?

01.
Service = WshShell.Run("sc query " & ServiceName & "| FIND /I" & "STATE : 4 RUNNING", 0, True)
Sicher bin ich mir aber nicht.

grüße
Bitte warten ..
Mitglied: DenebCH
23.04.2010 um 10:28 Uhr
Hallo ChrFriedel,

habs ausprobiert aber das Script macht keinen Wank, kein Fehlercode kein Fenster das auf geht, einfach nada....

Ich bin mir nicht mehr sicher ob es an dem "" liegt.... ich habe das folgende script das ich als test für den sc query befehl geschrieben habe abgeändert und bei STATE : 4 Running die " durch ' ersetzt und es hat immer noch funktioniert.

mache ich das aber hier Service = WshShell.Run("sc query " & ServiceName & "| FIND /I 'STATE : 4 RUNNING'", 0, True)
hat es keine wirkung
Bitte warten ..
Mitglied: LotPings
23.04.2010 um 13:13 Uhr
Hallo Deneb,

Um Anführungszeichen innerhalb eines Vbstrings zu erhalten kannst du :
  • den Ascii Code nutzen:
set text = "Das " &  chr(34) & "-Zeichen"
  • Innerhalb des Textes ein 3-faches Anführungszeichen setzen
set text = "Das """-Zeichen"
Wobei mir im moment nicht klar ist ob du den Errorlevel des find überhaupt durchgereicht bekommst, oder das nur den Errorlevel des Wshrun zurückgibt.

Du brauchst aber das Rad auch nicht neu erfinden, mit WMI kannst du innerhalb von Vbscript die Services direkt abfragen dazu gibt es reichlich Beispiele im Internet

Gruß
Lotpings

Du solltest zur besseren Lesbarkeit unbedingt deinen Code in entsprechende Code Tags einbetten!
Bitte warten ..
Mitglied: Biber
23.04.2010 um 17:15 Uhr
[OT]
Zitat von LotPings:
Du solltest zur besseren Lesbarkeit unbedingt deinen Code in entsprechende Code Tags einbetten!

Oder, anders formuliert, manchmal werden schlecht lesbare Beiträge in andere Bereiche umgebettet. Speziell Montag morgens.

Grüße
Biber
[/OT]
Bitte warten ..
Mitglied: Biber
26.04.2010 um 07:57 Uhr
BTW, DenebCH,

Zitat von Biber:
Oder, anders formuliert, manchmal werden schlecht lesbare Beiträge in andere Bereiche umgebettet. Speziell Montag morgens.
....übrigens ist gerade JETZT Montag morgens.... *sensibilisier*

Grüße
Biber aka der Sanftmütige
Bitte warten ..
Ähnliche Inhalte
Microsoft Office
Outlook VBScript
gelöst Frage von NebellichtMicrosoft Office5 Kommentare

Hallo, seit ein paar Wochen werden keine VBScripte hinter den (Benutzerspezifschen) Outlook Formularen ausgeführt. Hat jemand eine Lösung parat ...

VB for Applications
VBScript und OR
gelöst Frage von InvisanVB for Applications5 Kommentare

Hi zusammen, derzeit bastel ich ein bisschen in VBScript rum. Leider habe ich mit dem OR Operator einige Probleme. ...

Basic
VBScript hilfe benötigt
Frage von Nico223311Basic1 Kommentar

Guten Tag allerseits. Ich versuche derzeitig ein kleines Programm zu basteln komme aber nicht zu dem Egebniss, welches ich ...

VB for Applications
Outlook Email VBScript Signatur
gelöst Frage von TheFalconVB for Applications3 Kommentare

Hallo zusammen, in meinem Script würde ich gerne die Standard Signatur von Outlook 2013 einbinden, habe schon mehrere Dinge ...

Neue Wissensbeiträge
Windows 7
Updategängelung auf Windows 10, die zweite
Information von Penny.Cilin vor 4 TagenWindows 72 Kommentare

Hallo, da Windows 7 im kommenden Jahr nicht mehr supportet wird, werden Nutzer von Window 7 home premium wieder ...

Internet
EU-Urheberrechtsreform: Zusammenfassung
Information von Frank vor 6 TagenInternet1 Kommentar

Auf golem.de gibt es eine Analyse von Friedhelm Greis, der das Thema EU-Urheberrechtsreform gut und strukturiert zusammenfasst. Zwar haben ...

Microsoft Office

Office365 Schwachstellen bei Sicherheit und Datenschutz

Information von Penny.Cilin vor 7 TagenMicrosoft Office9 Kommentare

Auf Heise+ gibt es einen Artikel bzgl. Office365 Schwachstellen. Das ist noch ein Grund mehr seine Daten nicht in ...

Sicherheit
Schwachstellen in VPN Clients
Tipp von transocean vor 9 TagenSicherheit2 Kommentare

Moin, es gibt Sicherheitslücken bei VPN Clients namhafter Hersteller, wie man hier lesen kann. Gruß Uwe

Heiß diskutierte Inhalte
LAN, WAN, Wireless
Notebooks in Firmenwlan authentifizieren
gelöst Frage von EarthShakerLAN, WAN, Wireless17 Kommentare

Guten Tag, unsere Firma möchte gerne flächendeckend WLAN einführen und hat zu diesem Zweck einen Dienstleister beauftragt. Wir benötigen ...

Peripheriegeräte
PS2 Y-Kabel für Maus+Tastatur an PS2 Combo-Anschluss ASUS Prime X370-A
gelöst Frage von Windows10GegnerPeripheriegeräte13 Kommentare

Hallo, ich bin am Überlegen das o.g. Motherboard anzuschaffen. Da ich aber noch PS/2 für Maus+Tastatur benötige (bei optischen ...

Windows 10
Netzlaufwerk verschwindet (aber nur bestimmter Laufwerksbuchstabe)
gelöst Frage von survial555Windows 1010 Kommentare

Hallo, ich habe ein ganz seltsames Problem. Systemumgebung: Server 2012 R2 als DC und Windows 10 Pro als Clients ...

Internet
Surf PC für Verein
gelöst Frage von schicksalInternet10 Kommentare

Hallo zusammen, diese Frage stelle ich für einen Arbeitskollegen. Er betreut einen Verein und haben einen EintragungsPC (Workgroup). Mitglieder ...