VBS-Script für verschiedene Standarddrucker

  • VBScript

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von newcat.

    VBS-Script für verschiedene Standarddrucker

    Hi,

    beim Start unserer Rechner wird ein Script ausgeführt, welches verschiedene Netzwerkdrucker installiert und einen von ihnen als Standarddrucker definiert.

    Dieses funktioniert soweit. Jedoch habe ich an einigen Plätzen "Fineprint" installiert, welches einen entsprechenden Drucker anlegt.

    Jetzt möchte ich das Script modifizieren.

    Wenn der Drucker "FinePrint" gefunden wird, soll dieser als Standdrucker genutzt werden. Wird er nicht gefunden, dann soll der eine Netzwerkdrucker (z. B. DruckerSW) als Standarddrucker gewählt werden.

    Folgendes Script zum setzen des Standarddruckers für "FinePrint" habe ich, aber wie muss ich es modifizieren um folgendes "objNetwork.SetDefaultPrinter strUNCDruckerSW" einzubinden, wenn FinePrint nicht gefunden wird?

    ******************************************************************************************************
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colInstalledPrinters = objWMIService.ExecQuery ("Select * from Win32_Printer")
    For Each objPrinter in colInstalledPrinters
    If objPrinter.name = "FinePrint" then
    objPrinter.SetDefaultPrinter()
    End If
    Next
    ******************************************************************************************************

    Kann jemand helfen?

    Vielen Dank schon mal im voraus.

    Sven

    Visual Basic-Quellcode

    1. ​strComputer = "."
    2. Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    3. Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer")
    4. For Each objPrinter In colInstalledPrinters
    5. If objPrinter.Name = "DruckerSW" Then objPrinter.SetDefaultPrinter
    6. If objPrinter.Name = "FinePrint" Then
    7. objPrinter.SetDefaultPrinter
    8. Exit For
    9. End If
    10. Next
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Option Explicit
    Dim objNetwork
    Dim strUNCDruckerSW
    Dim strUNCDruckerFarbe
    Dim strUNCDruckerVordruck
    Dim objWMIService
    Dim colInstalledPrinters
    Dim strComputer
    Dim objPrinter

    strUNCDruckerSW = "\\server\SW Duplex"
    strUNCDruckerFarbe = "\\server\Farbe Duplex"
    strUNCDruckerVordruck = "\\server\Briefbogen"

    Set objNetwork = CreateObject("WScript.Network")
    objNetwork.AddWindowsPrinterConnection strUNCDruckerFarbe
    objNetwork.AddWindowsPrinterConnection strUNCDruckerVordruck
    objNetwork.AddWindowsPrinterConnection strUNCDruckerSW

    'StandardDrucker
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colInstalledPrinters = objWMIService.ExecQuery ("Select * from Win32_Printer")
    For Each objPrinter In colInstalledPrinters
    If objPrinter.Name = strUNCDruckerSW Then
    objPrinter.SetDefaultPrinter
    If objPrinter.Name = "FinePrint" Then
    objPrinter.SetDefaultPrinter
    Exit For
    End If
    Next

    WScript.Quit

    Vielen Dank, aber jetzt bekomme ich immer Kompilierungsfehler.

    Kannst Du nochmals behilflich sein!?
    strComputer = "."
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    Set colInstalledPrinters = objWMIService.ExecQuery ("Select * from Win32_Printer")
    For Each objPrinter In colInstalledPrinters

    If objPrinter.Name = "FinePrint" Then
    objPrinter.SetDefaultPrinter()
    If objPrinter.Name = strUNCDruckerSW Then
    objPrinter.SetDefaultPrinter()

    Exit For
    End If
    End If
    Next

    Den Fehler habe ich weg. Aber das Script wählt immer nur den ersten Drucker wenn er existiert. Existiert der erste Drucker nicht, dann ignoriert er den zweiten Drucker und macht nix.

    VB.NET-Quellcode

    1. ​strComputer = "."
    2. Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
    3. Set colInstalledPrinters = objWMIService.ExecQuery ("Select * from Win32_Printer")
    4. For Each objPrinter In colInstalledPrinters
    5. If objPrinter.Name = "FinePrint" Then
    6. objPrinter.SetDefaultPrinter()
    7. Exit For
    8. End If
    9. If objPrinter.Name = strUNCDruckerSW Then
    10. objPrinter.SetDefaultPrinter()
    11. Exit For
    12. End If
    13. Next


    Die If-Verschachtelung war nicht richtig - das End If musste nach oben und auch noch ein Exit For rein.
    Twitch Viewer Display Chat-, Zuschauer- und Statistiktool für Streamer
    @newcat Das Exit For in Zeile 13 muss raus.
    Wenn er den DruckerSW vor dem FinePrint findet, nimmt er sonst den als Default und kommt nicht mehr bis zum FinePrint.

    @darth-s In meinem Code oben fehlen lediglich die Klammern bei .SetDefaultPrinter().
    Das kommt davon, wenn man den Code nicht testet, bevor man ihn veröffentlicht. ;)
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --