Avatar billede mc_goblen Praktikant
11. august 2008 - 08:15 Der er 9 kommentarer og
1 løsning

Random Choice

Hej!

Jeg benytter følgende lille vbs-fil til at tilslutte printere til mine brugere (der står 3 ens printere i et lokale og det er ALT hvad de skal bruge) og sætte en af dem som standard-printer. Dog kunne jeg godt tænke mig at få fordelt presset på printeren lidt, så hvordan laver jeg et stykke kode som vælger en af printerne tilfældigt? Så det enten bliver printer1, 2 eller 3 der bliver sat...?

---------------------
Option Explicit

Dim oWSHNetwork, oPrinters, intCounter
on error resume next

'-- Setting objects --
Set oWshNetwork = WScript.CreateObject("WScript.Network")
Set oPrinters = oWshNetwork.EnumPrinterConnections

For intCounter =1 to oPrinters.Count -1 Step 2

oWSHNetwork.RemovePrinterConnection oPrinters.Item(intCounter), true, true


Next

oWshNetwork.AddWindowsPrinterConnection "\\eserver01\Print1"
oWshNetwork.AddWindowsPrinterConnection "\\eserver01\Print2"
oWshNetwork.AddWindowsPrinterConnection "\\eserver01\Print3"


oWshNetwork.SetDefaultPrinter "\\eserver01\Print1"

'Clean up and exit the script

wscript.quit
Avatar billede w13 Novice
11. august 2008 - 08:35 #1
Randomize
oWshNetwork.SetDefaultPrinter "\\eserver01\Print" & Int((3-1+1)*Rnd+1)
Avatar billede w13 Novice
11. august 2008 - 08:39 #2
Eller lidt mere dynamisk, så kan du vel rette:

oWshNetwork.AddWindowsPrinterConnection "\\eserver01\Print1"
oWshNetwork.AddWindowsPrinterConnection "\\eserver01\Print2"
oWshNetwork.AddWindowsPrinterConnection "\\eserver01\Print3"


oWshNetwork.SetDefaultPrinter "\\eserver01\Print1"

til:

Dim aPrinter(2)
aPrinter(0)="\\eserver01\Print1"
aPrinter(1)="\\eserver01\Print2"
aPrinter(2)="\\eserver01\Print3"

For i=0 To UBound(aPrinter)
  oWshNetwork.AddWindowsPrinterConnection aPrinter(i)
Next

Randomize
oWshNetwork.SetDefaultPrinter aPrinter(Int((3-1+1)*Rnd+1))
Avatar billede mc_goblen Praktikant
11. august 2008 - 09:19 #3
Hej w13 - tusind tak for dine svar! Nu har jeg forsøgt at benytte det sidste eksempel, men jeg synes ikke helt jeg kan få det til at virke? - Den fjerner fint eksisterende printere (den første del af koden), men den når aldrig så langt at den tilføjer nye?

Serveren hedder nu DSHK03 og printerne hedder DATABAR1, 2 og 3?
Har du endnu et bud? :) Mange tak indtil nu:

Option Explicit

Dim oWSHNetwork, oPrinters, intCounter
on error resume next

'-- Setting objects --
Set oWshNetwork = WScript.CreateObject("WScript.Network")
Set oPrinters = oWshNetwork.EnumPrinterConnections

For intCounter =1 to oPrinters.Count -1 Step 2

'Fjern denne linje for at få vist en tekstboks med printernavne
'wscript.echo oPrinters.Item(intCounter)

oWSHNetwork.RemovePrinterConnection oPrinters.Item(intCounter), true, true


Next

Dim aPrinter(2)
aPrinter(0)="\\dshk03\DATABAR1"
aPrinter(1)="\\dshk03\DATABAR2"
aPrinter(2)="\\dshk03\DATABAR3"

For i=0 To UBound(aPrinter)
  oWshNetwork.AddWindowsPrinterConnection aPrinter(i)
Next

Randomize
oWshNetwork.SetDefaultPrinter aPrinter(Int((3-1+1)*Rnd+1))




'Clean up and exit the script

wscript.quit
Avatar billede w13 Novice
11. august 2008 - 10:18 #4
hvilken fejlmeddelelse får du?
Avatar billede mc_goblen Praktikant
11. august 2008 - 10:48 #5
Hej W13, jamen der kommer nu ingen fejl :-/

Det eneste der sker at den den fjerne eksisterende printere, også er det ligesom det. Så den når aldrig til at tilføje de nye? :-S
Avatar billede w13 Novice
11. august 2008 - 11:46 #6
Hmm. Virker mærkeligt.
Avatar billede mc_goblen Praktikant
11. august 2008 - 14:38 #7
Ja- det er nu lidt underligt.

Hvis jeg ændre følgende linje:
oWshNetwork.AddWindowsPrinterConnection aPrinter(i)

til f.eks.:
oWshNetwork.AddWindowsPrinterConnection aPrinter(2) - fungere det fint nok (printer nr. 2).

Men kan det være noget med at i aldrig bliver tildelt en værdi?
Avatar billede w13 Novice
11. august 2008 - 14:43 #8
Hmm, du har Option Explicit på, så du skal lige Dim'e variablen "i", ja.
Avatar billede mc_goblen Praktikant
11. august 2008 - 14:58 #9
Hey w13 - nu er koden her jo noget jeg har fundet på nettet, for jeg har absolut ingen forstand på at kode...

Nu fjernede jeg Option Explicit, og wupti - det hele virkede :)

Men hvad gør dette? Og betyder det noget at jeg har fjernet det?
Du får point for din kæmpe hjælp! Tusind tak!
Avatar billede w13 Novice
11. august 2008 - 15:34 #10
Option Explicit er meget god at have, men ikke nødvendig.

Den gør, at alle variabler (f.eks. "i") skal deklareres, dvs. at man skal skrive:
Dim i
inden man kan bruge den. Det vil gøre din kode en anelse hurtigere. Men hul i det, din kode er jo meget simpel.

Og tak for point! :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester