VBScript Server Statusabfrage, Probleme bei der Ausgabe
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
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]
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
Dim inhalt(50)
Set MyShell = CreateObject("WScript.Shell")
Set MyFiles = CreateObject("Scripting.FileSystemObject")
Set InfoZeile = MyFiles.OpenTextFile("C:\ServerChecks\Logfile.txt",1)
Do
n=n+1
Inhalt(n) = InfoZeile.ReadLine
if Inhalt(n)="" then n=n-1
Loop Until InfoZeile.AtEndOfStream = True
For x = 1 to n
Proggi = "%comspec% /c ping.exe -n 1 -a" & " " & Inhalt(x) & " " & ">>c:\ServerChecks\temp.txt"
Return = MyShell.Run(Proggi,0,True)
Set TempFile =MyFiles.OpenTextFile("C:\ServerChecks\temp.txt")
Abfrage = Tempfile.Readall
If instr(Abfrage, "ytes=") > 0 Then
Ausgabe = MsgBox("Host " + Inhalt(x) + " ist Online...", 1, "ServerCheck")
Else
Ausgabe = MsgBox("Host " + Inhalt(x) + " ist Offline...", 1, "ServerCheck")
End if
tempfile.close
If Ausgabe = 2 Then WScript.Quit
Next
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]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 141028
Url: https://administrator.de/contentid/141028
Ausgedruckt am: 25.11.2024 um 20:11 Uhr
14 Kommentare
Neuester Kommentar
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
vbLF steht dabei für einen LineFeed, also eine neue Zeile der Übersicht halber...
grüße
dim string
string="test"
string=string & vbLf & "test2"
msgbox(string)
vbLF steht dabei für einen LineFeed, also eine neue Zeile der Übersicht halber...
grüße
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
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
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.
Edit: Zeile 06 musst du natürlich anpassen
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.
' PingList.vbs
Option explicit
Dim Fso, PingList, WshShell, Ausgabe
Set Fso = CreateObject("Scripting.FileSystemObject")
Set PingList = fso.OpenTextFile("PingList.Txt")
Set WshShell = WScript.CreateObject("WScript.Shell")
Ausgabe = ""
Do While Not (PingList.atEndOfStream)
Ausgabe=Ausgabe & PingHost(PingList.ReadLine) & vbCRLF
Loop
MsgBox Ausgabe, 0, "Ping Ergebnisse"
Function PingHost(HostName)
Dim Ping
Ping = WshShell.Run("ping -n 1 -a " & HostName, 0, True)
Select Case Ping
Case 0 PingHost = "On Line: " & HostName
Case 1 PingHost = "Off Line: " & HostName
End Select
End Function
Edit: Zeile 06 musst du natürlich anpassen
Hi Deneb,
also die Lösung haste ja schon erhalten. Aber vielleicht nochmal zum Verständnis warum dein Code nicht funktioniert hat.
Der Teil
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
also die Lösung haste ja schon erhalten. Aber vielleicht nochmal zum Verständnis warum dein Code nicht funktioniert hat.
Der Teil
string=Inhalt(x)
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
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
Hallo Deneb,
Um Anführungszeichen innerhalb eines Vbstrings zu erhalten kannst du :
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 einbetten!
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 einbetten!
BTW, DenebCH,
Grüße
Biber aka der Sanftmütige
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*Oder, anders formuliert, manchmal werden schlecht lesbare Beiträge in andere Bereiche umgebettet. Speziell Montag morgens.
Grüße
Biber aka der Sanftmütige