dragonkm
Goto Top

Suche VB-Programmierer oder so ähnlich

Ich möchte für unsere Nutzer ein kleines Programm schreiben, in dem Sie ein paar Dinge prüfen lassen können.

Hallo @ all

Ich habe folgendes Problem....

Bei uns im Netzwerk gibt es manchmal Probleme, dass bestimmte Netzlaufwerke nicht sauber gemappt werden, oder ein Netzwerkdrucker nicht verbunden wird.

Deshalb habe ich mir gedacht, ich schreibe ein Script in dem folgendes vom Nutzer geprüft werden kann.

- Verbindung zum Domaincontroller, Fileserver und SMS Server (Softwareverteilung)
- Neuverbindung ausgewählter Laufwerke
- Neuverbindung ausgeählter Drucker

Ich kann eigentlich alles per Batchscript, ausser den Verbindungstest zu den Servern.

Gibt es eine Möglichkeit in VB einen Ping mit Errorlevel zu erstellen?

Sollte in etwa so aussehen:

Ping File-Server (if exist goto exist_fs) else goto no_fs

Ich habe leider keine Ahnung von VB....

Vielleicht kann mir auch jemand gute Webseiten mit Tutorials empfehlen, die VB für Anfänger behandelt.

mfg
Dragon

Content-ID: 21835

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

Ausgedruckt am: 05.11.2024 um 15:11 Uhr

Biber
Biber 17.12.2005 um 16:12:56 Uhr
Goto Top
Moin DragonKM,
irgendwie sind ein paar logische Brüche in Deiner Frage, bei denen ich gerne erst nachfragen würde:

Ich kann eigentlich alles per Batchscript, ausser den Verbindungstest zu den Servern.
..öhm... wieso geht ein Ping-Aufruf vom Batch aus nicht?

Gibt es eine Möglichkeit in VB einen Ping mit Errorlevel zu erstellen?
Ja, ob Du das Errorlevel nun als objShell.Run()-Rückgabewert oder im Batch als Errorlevel auswertest ist egal.
Wenn es denn VBS (oder meintest Du wirklich eine VB-Exedatei für diesen Zweck???) sein soll, dann hat u.a. FaBMiN zwei hoch bewertete Musterbeiträge dazu gepostet (die ersten in der Suchergebnisliste "ping vbs").

Verbindung zum Domaincontroller, Fileserver und SMS Server (Softwareverteilung)
- Neuverbindung ausgewählter Laufwerke
- Neuverbindung ausgeählter Drucker

Wieso "ausgewählter"? Ist das nicht ein einfacher Soll/Ist-Vergleich ohne Benutzerrückfragen?
Sollen nicht einfach alle Shares/Netzwerkdrucker, die "fehlen", neu verbunden werden? Was soll der Benutzer denn auswählen?

Grüße Biber
DragonKM
DragonKM 17.12.2005 um 16:19:51 Uhr
Goto Top
Den soll/ist Vergleich hatte ich schon

Ich hatte das so gelöst

if exist z: (goto pruef2) else goto (userhome_nok)

:userhome_nok
net use z: \\FILESERVER\%user%

:pruef2

usw.

Das ging gut, nur bei den Druckern gab es Probleme...

Denn ich weiss nicht, wie ich prüfen kann, ob ein Netzwerkdrucker vorhanden ist.

Und ich brauch die Ping-Prüfung mit Rückgabewert

Weil ein Nutzer sich auch in der Domäne anmelden kann, obwohl keine Domäne vorhanden ist. Hab keine Ahnung warum das so ist face-sad
Linuxx
Linuxx 17.12.2005 um 17:02:41 Uhr
Goto Top
Es gibt viele Arten ein Ping über VBS zu realisieren, eine bitte schon Microsoft an:

http://www.microsoft.com/germany/technet/datenbank/articles/600483.mspx

Eine andere ist wie Biber diese schon beschrieben hat.

Und Biber zu deinem Problem mit Druckern:
Das kann so gelöst werden:
- Drucker verbinden
- Status abfragen durch eine Portabfrage auf dem Drucker
- Wenn du Adminrechte auf dem Drucker hast (z.B. Kycera) kannst auch noch Druckaufträge abfragen, sowie die genauen Stati

Linu
DragonKM
DragonKM 17.12.2005 um 18:30:27 Uhr
Goto Top
Wie mache ich denn eine Batch Ping Anfrage mit Errorlevel?

Wo stehen die Errorlevel? Normalerweise kommt doch nur

Ping wird ausgeführt für 192.168.2.12 mit 32 Bytes Daten:

Zeitüberschreitung der Anforderung.

Ping-Statistik für 192.168.2.12:
Pakete: Gesendet = 1, Empfangen = 0, Verloren = 1 (100% Verlust),

oder

Ping wird ausgeführt für 192.168.2.1 mit 32 Bytes Daten:

Antwort von 192.168.2.1: Bytes=32 Zeit<1ms TTL=64
Antwort von 192.168.2.1: Bytes=32 Zeit<1ms TTL=64

Ping-Statistik für 192.168.2.1:
Pakete: Gesendet = 2, Empfangen = 2, Verloren = 0 (0% Verlust),
Ca. Zeitangaben in Millisek.:
Minimum = 0ms, Maximum = 0ms, Mittelwert = 0ms


wäre dann in meiner Batch der Befehl so richtig?

ping XXX.XXX.XXX.XXX
if errorlevel ? goto ABC
if errorlevel ? goto DEF
DragonKM
DragonKM 17.12.2005 um 18:42:19 Uhr
Goto Top
Ich hab das mit dem Script ausprobiert...

On Error Resume Next

strTarget = "192.168.2.1" 'IP address or hostname
Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("ping -n 2 -w 1000 " & strTarget)
strPingResults = LCase(objExec.StdOut.ReadAll)
If InStr(strPingResults, "reply from") Then
WScript.Echo strTarget & " responded to ping."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strTarget & "\root\cimv2")
Set colCompSystems = objWMIService.ExecQuery("SELECT * FROM " & _
"Win32_ComputerSystem")
For Each objCompSystem In colCompSystems
WScript.Echo "Host Name: " & LCase(objCompSystem.Name)
Next
Else
WScript.Echo strTarget & " did not respond to ping."
End If


Damit Ping ich meinen Router nun an. Die Antwort ist aber immer, dass die Gegenstelle nicht antwortet.

Muss ich da was ändern? Achso... die Ping Abfrage geht natürlich in einer Batch, aber was bringt es, wenn er mir nur den Rechner anpingt, mir aber kein Errorlevel liefert, damit ich die Werte in der Batch weiterverwenden kann.

Ich will ja, dass wenn der Domaincontroller z.B. nicht erreichbar ist, dass der User eine Nachricht bekommt. Dann kann er uns schon am Telefon sagen, was alles geklappt hat und wo Fehler sind ;)
gemini
gemini 17.12.2005 um 19:02:49 Uhr
Goto Top
Hallo Kristian,

wenn des öfteren der DC oder andere Ressourcen nicht gefunden werden, würde ich mir mal das Netz genauer anschauen.
Stichworte hierzu: Ethereal, Switch-Konfig, ... bis hin zu den Kabeln.
Kannst du dieses Phänomen an irgendwas festmachen? Zeitliches Auftreten, best. Clients, ...?

Evtl. ist das Script schneller als das Netzwerk; dafür gäbe es aber eine Policy.
Es gibt auch ein diesbezügl. Problem mit GBit-NICs
Cannot connect to domain controller and cannot apply Group Policy with Gigabit Ethernet devices
(Wir hatten das Problem an einer einzigen von mehreren baugleichen HP EVOs; es trat nur zeitweilig auf, erzeugte neben einigen anderen den Error 1054 und war mit disable Media Sense nicht zu lösen.)

Imho ist es vernünftiger, die Ursache des Problems zu suchen und zu beseitigen, als kreuz und quer durchs Netz zu pingen! Nur um festzustellen, dass die Ressource nicht da ist.

HAGT
gemini
DragonKM
DragonKM 17.12.2005 um 19:16:13 Uhr
Goto Top
Also wir haben ein 100 MBit Netzwerk und die Etagenverteilung läuft über 1000er LWL

Die Probleme treten nicht regelmäßig auf, sondern mal hier mal dort. Ich hab in das Anmeldescript schon Pausen eingebaut, trotzdem tritt das Problem manchmal auf.

Die Hardware Komponenten vom Netzwerk sind von Extreme Networks (Summit Serie)

Tools wie Ethereal etc. darf ich nicht nutzen face-sad
Biber
Biber 17.12.2005, aktualisiert am 17.10.2012 um 16:26:44 Uhr
Goto Top
@DragonKM
Ping im Batch habe ich schon ein- oder zweimal gelesen hier im Forum.. such doch mal bitte nach "ping batch" statt "ping vbs"...
Eine der neueren Lösungen ist die hier von Superboh: Ping Antwort auswerten ?.

wäre dann in meiner Batch der Befehl so richtig?
ping XXX.XXX.XXX.XXX
if errorlevel ? goto ABC
if errorlevel ? goto DEF
Jepp. Jeder Errorlevel ungleich 0 bedeutet Fehler. Siehe die gefundenen Beispiele.

Wo stehen die Errorlevel? Normalerweise kommt doch nur...
Die stehen in der Variablen %ErrorLevel%. Siehe in den letzten Zeilen der Hilfe zu "Set /?" (war eher ein Scherz *gg, ist eigentlich keine Hilfe) oder in der Hilfe zu "IF" (IF /? am CMD-Prompt) oder im Bereich "Batch & Shell" in den neueren Tutorials.

HTH Biber
P.S. Ich hätte auch noch eine nahe liegende Erklärüng, warum der VBS-Schnipsel den String "reply from" nie findet.. aber da kommst Du bestimmt allein drauf..
Ping wird ausgeführt für 192.168.2.1 mit 32 Bytes Daten:
Antwort von 192.168.2.1: Bytes=32 Zeit<1ms TTL=64
DragonKM
DragonKM 17.12.2005 um 20:47:30 Uhr
Goto Top
Wegen dem Fehler in der vbs Datei. Ich habe die Texte schon in die Deutschen umgeändert, trotzdem kam der Fehler
DragonKM
DragonKM 17.12.2005 um 21:39:01 Uhr
Goto Top
So hab es nun glaube ich... fehlt nur noch der Druckerteil face-sad

@echo off
cls
REM Prüfung ob Protokolldatei existiert - ggf. Löschung der Datei if exist c:\protokoll.txt del protokoll.txt

rem Teste ob Domaincontroller 1 erreichbar ist
ping -n 1 160.16.3.20 > nul && @goTo DC1_online

:DC1_offline
REM In die Protokolldatei wird eingetragen, dass der Domaincontroller nicht erreichbar war echo Der Domaincontroller "Domaincontroller1" war nicht erreichbar >> c:\protokoll.txt goto DC1_end

:DC1_online
echo online
goto DC1_end

:DC1_end


rem Teste ob Domaincontroller 2 erreichbar ist
ping -n 1 160.16.2.21 > nul && @goTo DC2_online

:DC2_offline
REM In die Protokolldatei wird eingetragen, dass der Domaincontroller nicht erreichbar war echo Der Domaincontroller "Domaincontroller2" war nicht erreichbar >> c:\protokoll.txt goto DC2_end

:DC2_online
echo online
goto DC2_end

:DC2_end


Rem Nun prüfen wir die Erreichbarkeit des Fileservers

ping -n 1 160.16.2.3 > nul && @goTo FS_online

:FS_offline
REM In die Protokolldatei wird eingetragen, dass der Domaincontroller nicht erreichbar war echo Der Fileserver "Fileserver" war nicht erreichbar >> c:\protokoll.txt goto FS_end

:FS_online
echo online
goto FS_end

:FS_end

Rem Prüfung ob Netzlaufwerke verbunden sind - ggf. werden Sie neu verbunden if not exist y: (net use \\Fileserver\dezernate) if not exist z: (net use \\Fileserver\%user%)


cls
type protokoll.txt
echo.
pause