Toon posts:

[VBscript] output van shell opvangen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Heren/Dames,

IPX moet worden uitgeschakeld op printers. Dat doe ik door het volgende script te gebruiken:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Dim WShell
Dim infile1
Dim fsobj
Dim ipnr
Dim command

Set fsobj=WScript.CreateObject("Scripting.Filesystemobject")
Set WShell = WScript.CreateObject("WScript.shell")

Set infile1=fsobj.OpenTextFile(WScript.Arguments(0))
Do Until infile1.AtEndOfStream
    ipnr=infile1.readline()
    command="telnet "+ipnr
    WShell.Run (command)
    WScript.StdOut
    WScript.Sleep 2000
    WShell.SendKeys vbCR
    WScript.Sleep 750
    WShell.SendKeys vbCR
    WScript.Sleep 750

    WShell.SendKeys "novell:0" + vbCR
    WScript.Sleep 750
    WShell.SendKeys "ipx/spx:0" + vbCR
    WScript.Sleep 750
    WShell.SendKeys "ipx-config:0" + vbCR
    WScript.Sleep 750

    WShell.SendKeys "quit" + vbCR
    WShell.SendKeys "Y" + vbCR
    WScript.Sleep 3000 
Loop

infile1.Close()
WScript.Quit()


Dit script lees uit een tekstbestand het ip adres. Vervolgens opent het een console en opent een telnet connectie met het net gelezen ip adres. In dat zelfde venster zendt hij een paar commando's die IPX uitschakelen op HP printers. Verschillende commando's omdat sommige printers ouder zijn dan anderen.
Dit werkt heel erg fijn. "nadeeltje" eraan is dat je even niet met je systeem kan werken omdat de console die worden geopend de "focus" moeten hebben. Klik je op een ander scherm, dan zendt hij de tekenreeksen naar dat venster.

Nu gebruik ik dit al een tijdje, maar steeds meer loop ik tegen printers aan die een wachtwoord hebben (geen standaard wachtwoord), of die toch geen HP printer zijn.
Mijn script knalt daar nu vrolijk overheen zonder iets te laten weten.
Aan het einde van de rit is IPX wel op een aantal printers uitgeschakeld, maar ik weet niet welke.

Om te kunnen achterhalen of de operatie is geslaagd zou je de outout van de geopende console moeten kunnen lezen/bewerken.


Nu vraag ik mij af hoe ik dat in win32 + vbscript kan doen.


Ik heb de faq gelezen. Maar het leek mij toch slimmer om de vraag hier te plaatsen ipv in het Win Operated forum.

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 13-01 07:19
Met .Exec van WScript.Shell kun je stdout inlezen, en stdin gebruiken in plaats van sendkeys. Script blijft echter op de voorgrond.

Met .Run kun je het script wel op de achtergrond houden, maar als je foutmelding wilt weten zul je moeilijk moeten doen:

If (WShell.Run("telnet " & ipnr & " | find /c /i ""error"" | choice /c0123456789 < telnetopdrachten.txt", 7, True) > 0 Then
Echo "Er was een fout"
End If

Dit heeft weer als nadeel dat je je Sleeps niet kunt gebruiken en je je telnet opdrachten in een bestand moet zetten.