itfreak
Goto Top

Mit VB Script Netzwerk Pingen

Salut Zusammen

Ich möchte in meinen netzwerk einen Hostanem Bereich pingen und dabei
alle Geräte die antworten in ein externes Dokument ausgeben.
Bis jetzt habe ich folgendes:
Kann mir jemand weiterhelfen?
Schon mal ein Dankeschön im voraus!


strMachines = "pr1;pr63"
aMachines = split(strMachines, ";")
Dim Fso ,f

For Each machine in aMachines
Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._
ExecQuery("select * from Win32_PingStatus where address = '"_
& machine & "'")
For Each objStatus in objPing
If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
WScript.Echo("Computer " & machine & " is not reachable")
Else
Set Fso = CreateObject("Scripting.FileSystemObject")
Set Fso =Fso.OpenTextFile("C:\hosts.txt")
f.WriteLine"Drucker ist Online"
Set f =fso.OpenTextFile("C:\hosts.txr")
End If
Next
Next

Content-ID: 111759

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

Ausgedruckt am: 19.11.2024 um 23:11 Uhr

bastla
bastla 18.03.2009 um 16:49:04 Uhr
Goto Top
Hallo itfreak!

Ungetestet würde ich das etwa so machen:
strMachines = "pr1;pr63"  

aMachines = split(strMachines, ";")  
Set Fso = CreateObject("Scripting.FileSystemObject")  

For Each machine in aMachines
    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._  
    ExecQuery("select * from Win32_PingStatus where address = '"_  
        & machine & "'")  
    For Each objStatus in objPing
        If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
            WScript.Echo machine & " is not reachable"  
        Else
            Fso.OpenTextFile("C:\hosts.txt",8,1).WriteLine machine & " ist Online"  
        End If
    Next
Next
Grüße
bastla
76109
76109 19.03.2009 um 10:19:16 Uhr
Goto Top
Zitat von @bastla:
> Ungetestet würde ich das etwa so machen:

Hallo bastla,

bis auf den unnötigen Split, würde ich es fast genauso machen.

aMachines = Array("pr1", "pr63")  

Gruß Dieter

PS. Bei Vasili-VBS-CSV-Konvertierung steht am Ende ein aktuelles VBS
bastla
bastla 19.03.2009 um 10:38:53 Uhr
Goto Top
@76109
bis auf den unnötigen Split ...
Je nach Anzahl der Geräte könntest Du die eine Zeile wieder hereinbringen, wenn Du nicht für jedes Gerät die Anführungszeichen eingeben musst ... face-wink
... würde ich es fast genauso machen.
Eigentlich würde ich ja auch nicht so (gemeint ist das Schreiben in der Schleife per "append") machen, sondern die Ausgabezeilen in einer Variable sammeln und dann in einem Rutsch in die Datei schreiben - die "append"-Version hat, dadurch dass sofort geschrieben wird, einen kleinen Sicherheitsvorteil.

Grüße
bastla

P.S.: Hab' momentan etwas wenig Zeit ...
76109
76109 19.03.2009 um 11:35:58 Uhr
Goto Top
Hallo bastla

Zitat von @bastla:
Je nach Anzahl Geräte

face-smile Könnte dann ja auch so gehen oder wie auch immer:

aMachines = Array(WScript.Arguments(0),WScript.Arguments(1)........)

Alle Wege führen nach Rom oder so ähnlich.

in der Schleife per "append") machen

Keine Ahnung, habs nach dem gleichen Prinzip wie im Gruppen/Dupletten-Teil gemacht.

Zumal die Import-Datei für Gruppen/Dupletten laut Vasili in 3-4 Jahren bis zu 10 MB groß werden kann
und die Import-Datei für Gebutrtstage nur Daten für 30 Tage beinhaltet.

Aber da ich ja noch kein ADO-Profi bin, nehme ich selbsverständlich jeden Hinweis dankbar an.

Gruß Dieter
bastla
bastla 19.03.2009 um 11:59:45 Uhr
Goto Top
Hallo didi1954!
face-smile Könnte dann ja auch so gehen oder wie auch immer:
aMachines = Array(WScript.Arguments(0),WScript.Arguments(1)........)
Dann schon eher unten
For i = 0 To WScript.Arguments.Count - 1
    machine = WScript.Arguments(i)
    ...
Gedacht hatte ich eher an eine größere Anzahl von Geräten, wo die Einsparung der Anführungszeichen (anstelle von 2 je Gerät nur 2 insgesamt) die zusätzliche "Split"-Zeile rechtfertigen könnte.
Die Frage des Rausschreibens hat übrigens mit ADO eigentlich nix zu tun ...

Grüße
bastla
Itfreak
Itfreak 19.03.2009 um 21:07:27 Uhr
Goto Top
Moin Moin


Danke für eure tollen Antworten!
Habe aber noch eine kleine Frage
wie würdet ihr das am besten lösen wenn man
einen grösseren Wertebereich ab pingen müsste?
pc2-pc60?


gruess Itfreak
bastla
bastla 19.03.2009 um 21:16:59 Uhr
Goto Top
Hallo itfreak!

Wenn es fortlaufend nummerierte "pc" sind, etwa so:
Set Fso = CreateObject("Scripting.FileSystemObject")  

For i = 2 to 60
    machine = "pc" & i  
    Set objPing = GetObject("winmgmts:{impersonationLevel=impersonate}")._  
    ExecQuery("select * from Win32_PingStatus where address = '"_  
        & machine & "'")  
    For Each objStatus in objPing
        If IsNull(objStatus.StatusCode) or objStatus.StatusCode<>0 Then
            WScript.Echo machine & " is not reachable"  
        Else
            Fso.OpenTextFile("C:\hosts.txt",8,1).WriteLine machine & " ist Online"  
        End If
    Next
Next
Grüße
bastla