Setting Default Printer

Discussion in 'Scripting & Programming' started by Nelix, Sep 13, 2008.

  1. Nelix
    Honorary Member

    Nelix Gigabyte Poster

    1,416
    3
    82
    Hi All

    Where I work the printers are pushed out to the machines via a script that maps the printer in the room that thay are currently in, not the best method I know. My problem is that the script does not set the default printer.

    I know that it is possible to do this when installing a printer on a per user basis but cant seem to find a way of doing it on a machine basis so that whoever logs on to the machine gets the default set for them, does anyone know how this can be done?

    Regards

    Nelix
     
    Certifications: A+, 70-210, 70-290, 70-291, 74-409, 70-410, 70-411, 70-337, 70-347
    WIP: 70-346
  2. Kitkatninja
    Highly Decorated Member Award 500 Likes Award

    Kitkatninja aka me, myself & I Moderator

    11,140
    555
    383
    Here's the script that I use, I would say that it's mine, but it's a script that I've modified from a few sources, lol.

    We set printers based on the OU that the PC is in:

    Code:
    on error resume next 
    Dim objPrinter13
    Set objPrinter13 = CreateObject("WScript.Network") 
    'Define printers to install 
    'Notes 
    ' 
    'V IMPORTANT. DO NOT user Share names to install printers. Use the full printer name as it appears on the servers printer menu. 
    'Enter "none" into printers array to install no printers. 
    'Do not leave array empty 
    'network paths should use the "\" character not the "/" character 
    'Warning if the printer path is invalid then an error message will be displayed 
    'Items in the array MUST be enclosed by speach marks and be seperated by commas. 
    
    ' check for computer membership of ou 
    ' leave off any DC settings as these are not needed 
    If isMemberOu("ou=ouGroup") Then 
       printers = Array("[URL="file://\\server_name\printer1","\\server_name\Printer2"]\\server_name\printer1","\\server_name\Printer2[/URL]") ' define the printers you want to install 
       defaultPrinter = "[URL="file://\\server_name\printer1"]\\server_name\printer1[/URL]" ' Define the default printer 
       installPrinters = True ' Allows the install routines to run Set to false to disabled printer instalation 
       objPrinter.SetDefaultPrinter "[URL="file://\\server_name\printer1"]\\server_name\printer1[/URL]" 'this sets the default printer on the PC
    'Define another ou 
    elseIf isMemberOu("ou=anotherOuGroup") Then 
       printers = Array("[URL="file://\\server_name\printer3"]\\server_name\printer3[/URL]") ' define the printers to install 
       defaultPrinter = "[URL="file://\\server_name\printer3"]\\server_name\printer3[/URL]" ' Define the default printer 
       installPrinters = True ' Allows the install routines to run Set to false to disabled printer instalation 
       objPrinter.SetDefaultPrinter "[URL="file://\\server_name\printer3"]\\server_name\printer3[/URL]"
       'Continue with the elseif statements if you have more OU's
    END IF 
    ' **** DO NOT EDIT BELOW THIS LINE *** 
    On Error Resume Next    
    IF installPrinters Then 
       'install printers 
       Set objWSHNetwork = CreateObject("WScript.Network") 
       Set WS_PRINTERS = objWSHNetwork.EnumPrinterConnections 
       Set WshShell = WScript.CreateObject("WScript.Shell") 
       FOR EACH printer in printers 
          if LCase(printer) <> "none" Then 
             objWSHNetwork.AddWindowsPrinterConnection(printer) 
          END IF 
       NEXT 
        
       'set Default Printer 
       if LCase(defaultPrinter) <> "none" Then 
          objWSHNetwork.SetDefaultPrinter defaultPrinter 
       END IF 
       Set WS_PRINTERS = Nothing 
       Set WS_NET = Nothing 
       Set WshShell = Nothing 
    END IF 
    
    ' Determine OU Membership of computer 
    Private Function isMemberOu(checkOu) 
       Set objSysInfo = CreateObject("ADSystemInfo") 
       strComputerDN = objSysInfo.ComputerName 
       intIndexStart = InStr(LCase(strComputerDN), "ou=") 
       intIndexLength = InStr(LCase(strComputerDN), ",dc=") - intIndexStart 
       isMemberOu = false 
       If intIndexStart > 0 Then 
          compOu = LCase(Mid(strComputerDN, intIndexStart, intIndexLength)) 
       End If 
            If InStr(1, compOu, checkOu, 1) Then 
          isMemberOu = true 
       END IF 
       Set objSysInfo = nothing 
    End Function 
    '--------------------------------------------------------------------------------
    
    The two lines, I believe, that you're missing are these two:

    1. defaultPrinter = "\\server_name\printer1"
    2. objPrinter.SetDefaultPrinter "\\server_name\printer1"

    Of course, I assuming... as I haven't seen your printer script.

    -Ken
     
    Certifications: MSc, PGDip, PGCert, BSc, HNC, LCGI, MBCS CITP, MCP, MCSA, MCSE, MCE, A+, N+, S+, Server+
    WIP: MSc Cyber Security
  3. Nelix
    Honorary Member

    Nelix Gigabyte Poster

    1,416
    3
    82
    Cheers Ken

    Not sure if this would work.

    We install printers depending on location in AD, the script installs the printers to the machine and not just to the currently logged on user, heres a snipit from the script

    Code:
     
    On Error Resume Next
    ' Bits for setting up log file.
    strDirectory = "C:\Windows\Log"
    strFile = "\Build.txt"
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Const ForAppending = 8
    Set objTextFile = objFSO.OpenTextFile _
    (strDirectory & strFile, ForAppending, True)
    strdate = Date()
    strtime = Time()
    ' for log off
    Set ws = WScript.CreateObject("WScript.Shell")
    ' Section to get PC name
    Dim oNet, pcname
    Set oNet = CreateObject("WScript.Network")
    pcname = UCase(oNet.ComputerName)
    'Wscript.Echo "This PC is called: " & pcname
    
    ' Section to query AD for location
    Set objComputer = GetObject _
        ("[URL]ldap://CN="&pcname&",OU=Desktops,OU=BDN-4019,OU=Workstations,DC=DomainName,DC=local[/URL]")
    objProperty = objComputer.Get("Location")
    If objProperty = "" Then
    '    Wscript.Echo "The location has not been set."
    ' Section to ask if you want to change location
    title = "Computer Location"
    retval = msgbox("The computer location has not been set!" & vbNewLine _
     & vbNewLine _
     & "Do you want to change the computer location now?",vbYesNo)
    if retval = vbNo then
    ws.Run("C:\Windows\System32\shutdown /l"),0,True 
    else
    ' Section to change location
    title2 = "Enter Room Number"
    message2 = "Enter the room number this computer will be in." & vbNewLine _
     & vbNewLine _
     & "This should not be prefixed with Dept code." & vbNewLine _
     & vbNewLine _
     & "For example: IT1"
    strLocation = UCase(InputBox(message2, title2))
    objComputer.Put "Location" , strLocation
    objComputer.SetInfo
    objTextFile.WriteLine("This computer's location was update in AD to "  & strLocation & " on the " & strdate & " at " & strtime)
    Wscript.Echo "Location changed. You will now be logged off. Please then log back on to install printers!"
    ws.Run("C:\Windows\System32\shutdown /l"),0,True
    End If
    Else
    '    Wscript.Echo "This computers location is: " & objProperty
    End If
    
    ' Section to install printers based on location
    If objProperty = "TR1" Then
    sCmd = "rundll32.exe printui.dll,PrintUIEntry /ga /n [URL="file://\\PrintServer\Printername"]\\PrintServer\Printername[/URL]"
    'WScript.Echo sCmd
    Set oShell = CreateObject("WScript.Shell")
    oShell.Run sCmd, 1, True
    End If
    
    This script runs whenever a specific user logs on, it does not run for everyone. I know this is a strange way of doing it but I didn't have any say in the matter during implementation.

    This script also checks for the PC location and if not set it will ask you to set it before installing Printers.

    The bit that is missing is the bit to set the printer as default for everyuser that logs onto the machine, I have been told that this is not possible because the printer is being installed to the machine and not the a user, can't believe that that is true. :biggrin

    Hope someone can help

    Nelix
     
    Certifications: A+, 70-210, 70-290, 70-291, 74-409, 70-410, 70-411, 70-337, 70-347
    WIP: 70-346
  4. ThomasMc

    ThomasMc Gigabyte Poster

    1,507
    49
    111
    what about this

    Code:
    '  Example VBScript to set the local Default Printer
    '  Guy Thomas February 2004.
    '  ******************************
    Option Explicit
    Dim objPrinter
    Set objPrinter = CreateObject("WScript.Network")
    objPrinter.SetDefaultPrinter "\\ServerName\PrinterName"
    ' End of example VBScript 
    
    [edit]
    Just read the full post :oops:, hopefully Fergals about as am sure this is right up his street.
     
    Certifications: MCDST|FtOCC
    WIP: MCSA(70-270|70-290|70-291)

Share This Page

Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.