[VbScript] Printers toevoegen

Pagina: 1
Acties:

Onderwerpen


  • ShaneV
  • Registratie: Maart 2005
  • Laatst online: 10:09
Hey allemaal,

Het volgend stukje code moet aan de hand van de computer naam, een mapping maken naar een printer en deze als standaard printer instellen.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Dim objNetwork
Set objNetwork = Wscript.CreateObject("Wscript.Network")
ComputerName = objNetwork.ComputerName

If objNetwork.ComputerName = "pc007" then
objNetwork.AddWindowsPrinterConnection "\\pc006\HPOfficeAvondster"
objNetwork.SetDefaultPrinter "\\pc006\HPOfficeAvondster"
ElseIf objNetwork.ComputerName = "pc006" then
objNetwork.AddWindowsPrinterConnection "\\pc006\HPOfficeAvondster"
objNetwork.SetDefaultPrinter "\\pc006\HPOfficeAvondster"
ElseIf objNetwork.ComputerName = "pc005" then
objNetwork.AddWindowsPrinterConnection "\\pc005\Samsung Avondster"
objNetwork.SetDefaultPrinter "\\pc005\Samsung Avondster"
ElseIf objNetwork.ComputerName = "pc001" then
objNetwork.AddWindowsPrinterConnection "\\pc001\HPLaserJ"
objNetwork.SetDefaultPrinter "\\pc001\HPLaserJ"
Else
objNetwork.AddWindowsPrinterConnection "\\pc1admini-ms\HPLaserJ"
objNetwork.SetDefaultPrinter "\\pc1admini-ms\HPLaserJ"
End If


Jammer genoeg gaat hij blijkbaar onmiddellijk door naar de laatste Else. Als ik maar 1 if heb in de code, voert hij het wel goed uit. Iemand enig idee wat ik over het hoofd heb gezien?

Alvast bedankt

//EDIT:

Bedankt aan sille om me uit te wijzen dat je op deze manier geen = kan gebruiken. Je moet hier blijkbaar StrComp voor gebruiken.

En dan krijg je:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Dim objNetwork
Set objNetwork = Wscript.CreateObject("Wscript.Network")
ComputerName = objNetwork.ComputerName

If StrComp (objNetwork.ComputerName,"pc007") then
objNetwork.AddWindowsPrinterConnection "\\pc006\HPOfficeAvondster"
objNetwork.SetDefaultPrinter "\\pc006\HPOfficeAvondster"

ElseIf StrComp (objNetwork.ComputerName,"pc006") then
objNetwork.AddWindowsPrinterConnection "\\pc006\HPOfficeAvondster"
objNetwork.SetDefaultPrinter "\\pc006\HPOfficeAvondster"

ElseIf StrComp (objNetwork.ComputerName,"pc005") then
objNetwork.AddWindowsPrinterConnection "\\pc005\Samsung Avondster"
objNetwork.SetDefaultPrinter "\\pc005\Samsung Avondster"

ElseIf StrComp (objNetwork.ComputerName,"pc001") then
objNetwork.AddWindowsPrinterConnection "\\pc001\HPLaserJ"
objNetwork.SetDefaultPrinter "\\pc001\HPLaserJ"
Else
objNetwork.AddWindowsPrinterConnection "\\pc1admini-ms\HPLaserJ"
objNetwork.SetDefaultPrinter "\\pc1admini-ms\HPLaserJ"
End If


//EDIT2: hierboven staande code werkt op mijn pc wel maar, op andere pc's voor de een of andere reden niet. Hij zegt dat de naam, pad, volume naam, etc niet correct is van de eerste regel met IF in. Verwijder ik deze regel klaagt hij over de volgende en volgende etc...

Iemand suggesties?

[ Voor 35% gewijzigd door ShaneV op 25-09-2008 17:06 ]


  • LittleWan
  • Registratie: Februari 2003
  • Laatst online: 11-09 14:26
Strings vergelijk je met de functie StrComp s1,s2, de = operator kan dat niet.

http://www.sillevl.be - blog http://www.sillevl.be/blog - flickr http://www.flickr.com/sillevl


  • ShaneV
  • Registratie: Maart 2005
  • Laatst online: 10:09
LittleWan schreef op donderdag 25 september 2008 @ 16:43:
Strings vergelijk je met de functie StrComp s1,s2, de = operator kan dat niet.
Nope, nog altijd geen volledig succes. Op men test pc negeert hij die laatste else blijkbaar... hij voegt de verkeerde printer toe.

[ Voor 22% gewijzigd door ShaneV op 25-09-2008 17:11 ]


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
LittleWan schreef op donderdag 25 september 2008 @ 16:43:
Strings vergelijk je met de functie StrComp s1,s2, de = operator kan dat niet.
Euh, dat kan de = operator wel. Maar dan moet je wel zorgen dat beide operatoren ook strings zijn én dat ze dezelfde case hebben. StrComp is vooral handig om beide operators naar string te casten mocht dat nog niet het geval zijn én om case-insensitive te comparen met vbTextCompare.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
mycompare "test", "test"    'geeft "gelijk"
mycompare "test", "TEST"    'geeft "ongelijk", want case verschil
mycompare 123, "123"        'geeft "ongelijk", want typen verschil
mycompare Cstr(123), "123"  'geeft "gelijk", want beide zelfde string value


public function mycompare(a, b)
    if a=b then
        msgbox("A (" & a & ") en B (" & b & ") zijn gelijk!")
    else
        msgbox("A (" & a & ") en B (" & b & ") zijn >>NIET<< gelijk!")
    end if
end function


Hetzelfde met een (case insensitive textcompare):
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
mycompare "test", "test"    'geeft "gelijk"
mycompare "test", "TEST"    'geeft "gelijk"
mycompare 123, "123"        'geeft "gelijk"
mycompare Cstr(123), "123"  'geeft "gelijk"


public function mycompare(a, b)
    if strcomp(a, b, vbTextCompare) = 0 then
        msgbox("A (" & a & ") en B (" & b & ") zijn gelijk!")
    else
        msgbox("A (" & a & ") en B (" & b & ") zijn >>NIET<< gelijk!")
    end if
end function
ShaneV schreef op donderdag 25 september 2008 @ 17:06:
[...]


Nope, nog altijd geen volledig succes. Op men test pc negeert hij die laatste else blijkbaar... hij voegt de verkeerde printer toe.
StrComp geeft -1, 0 of 1 terug, zie de return values in de documentatie; je code zou er dus (min of meer) zo moeten uit zien:
Visual Basic:
1
2
3
...
ElseIf StrComp (objNetwork.ComputerName,"pc001", vbTextCompare) = 0 then
...

En omdat je niet expliciet met 0 compared evalueert de if enkel naar true wanneer het StrComp -1 of 1 terug geeft en da's nu net wat jij niet wil (tegenovergesteld).

Bewijs:
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
'Met textcompare
If strcomp("blah", "BLAH", vbTextCompare)   then MsgBox "Woei 1"
If strcomp("blah", "BLAH", vbTextCompare)=0 then MsgBox "Woei 2"

If strcomp("blah", "blah", vbTextCompare)   then MsgBox "Woei 3"
If strcomp("blah", "blah", vbTextCompare)=0 then MsgBox "Woei 4"

'Nu zonder textcompare
If strcomp("blah", "blah")                  then MsgBox "Woei 5"
If strcomp("blah", "blah")=0                then MsgBox "Woei 6"

If strcomp("blah", "BLAH")                  then MsgBox "Woei 7"
If strcomp("blah", "BLAH")=0                then MsgBox "Woei 8"

Output: Woei 2, 4, 6 en 7. En niet, zoals jij verwacht 1, 3, 5 en 7 ;)

Overigens zou ik persoonlijk voor een "Select case" gaan i.p.v. die bak if / elseif / elseif / elseif / else / end if's :P

[ Voor 87% gewijzigd door RobIII op 25-09-2008 18:32 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • ShaneV
  • Registratie: Maart 2005
  • Laatst online: 10:09
@RobIII: Klopt, de = 0 moet er blijkbaar toch bij.

Het scriptje werkt nu op mijn pc, straks even uit testen op de rest. Bedankt aan beide om te helpen en bedankt aan Roblll om even men geheugen te verfrissen! :) Ik weet dat de select case een mooiere oplossing is maar, voor wat het scriptje maar hoeft te doen, zag ik het niet echt zitten :P voor de één of andere reden vindt ik else makkelijker :P

[ Voor 30% gewijzigd door ShaneV op 26-09-2008 10:02 ]