Jump to content

Silent printer mapping - windows 7


Furek86
 Share

Recommended Posts

Hi guys,

I am having a problem with my script that maps printers at logon in my company. We run on windows 7 and when I try to map the printer silently as admin, all works perfectly. The issue occurs when I try to use my script when a non-admin account launches it and drivers need to be pulled from the print server. A window pops up asking if I want to install drivers and then windows is asking for admin credentials.

My code is kind of elaborate cause I added a lot of logging and progress bar stuff around it, so I removed those lines and left only these that actually try to map the printer.

Dim $WshNetwork
$WshNetwork = ObjCreate("WScript.Network")
$WshNetwork.AddWindowsPrinterConnection(\\printserver\printer01)

Is it possible to suppress this behaviour and run windows printer mapping silently in Windows 7?

Kuba

Link to comment
Share on other sites

Hi.

the locally logged on user has "Admin Rights"? I don't think so, as you wrote "... is asking for admin credentials" (if the user would have local admin rights, he/she would get a question like "would you like to allow ...")

So my suggestion is to deploy these printers using GPOs (Group Policy Objects)

Regards, Rudi.

Earth is flat, pigs can fly, and Nuclear Power is SAFE!

Link to comment
Share on other sites

As part of a backup tool I once built I had to silently capture a users printers, including their default printer, and then readd them once they got their new computer. I'll share with you the two functions I used for this...

Func PrinterRestore()
Local $PrinterArray[1], $x, $File
If FileExists($BrowseInputValue & "\printerlist.csv") Then
$File = FileReadLine($BrowseInputValue & "\printerlist.csv")
If Not $File = ("") Then
_FileReadToArray($BrowseInputValue & "\printerlist.csv", $PrinterArray)
For $x = 1 to 1
RunWait(@ComSpec & " /c " & "rundll32 printui.dll,PrintUIEntry /in /n" & $PrinterArray[$x], "", @SW_HIDE)
RunWait(@ComSpec & " /c " & "rundll32 printui.dll,PrintUIEntry /y /n" & $PrinterArray[$x], "", @SW_HIDE)
Next
For $x = 2 to $PrinterArray[0]
RunWait(@ComSpec & " /c " & "rundll32 printui.dll,PrintUIEntry /in /n" & $PrinterArray[$x], "", @SW_HIDE)
Next
EndIf
EndIf
EndFunc

Func PrinterBackup()

_FileCreate($BrowseInputValue & "\printerlist.csv")

$csvfile = FileOpen($BrowseInputValue & "\printerlist.csv", 1)
; Pull default printer and write it to the first line of the file
$objWMI = ObjGet("winmgmts:\\" & $Computer & "\root\CIMV2")
$colPrinters = $objWMI.ExecQuery("SELECT * FROM Win32_Printer", "WQL", 0x10 + 0x20)
If IsObj($colPrinters) Then
For $objPrinter In $colPrinters
If $objPrinter.Default = "True" And $objPrinter.Network = "-1" Then
ConsoleWrite("Writing printer " & $objPrinter.Name & @CR)
Sleep(500)
FileWriteLine($csvfile, $objPrinter.Name & @CR)
EndIf
Next
EndIf
; Then grab the rest of the printers, if any
$objWMI = ObjGet("winmgmts:\\" & $Computer & "\root\CIMV2")
$colPrinters = $objWMI.ExecQuery("SELECT * FROM Win32_Printer", "WQL", 0x10 + 0x20)
If IsObj($colPrinters) Then
For $objPrinter In $colPrinters
If $objPrinter.Network = "-1" And $objPrinter.Default = ("") Then
ConsoleWrite("Writing printer " & $objPrinter.Name & @CR)
Sleep(500)
FileWriteLine($csvfile, $objPrinter.Name & @CR)
EndIf
Next
EndIf

FileClose($csvfile)

EndFunc
Link to comment
Share on other sites

Hi.

Q1: Do the users have admin or power user rights to the local Win7 installation?

Q2: Does your script run in case you grant then one of these local group memberships?

Regards, Rudi.

@Rudi,

By default "EVERYONE" has read access to WMI. As there are no methods being called, there should be no problems using that script for restricted users. In our shop, most of our users operate in the "users" group and there were no reported problems. :)

thanks for sharing but what about printer drivers?

@gcue,

We run 2008 R2 print servers and this script was designed for network printers (can be configured for local tho). As such, when the restore function is run, the computer reaches out to the print server and automatically installs the drivers.

Think of it this way, it's the exact same computer process as manually clicking thru the add a network printer option. It's just done without the GUI and talks directly to the DLL.

EDIT:

I should really drop that code in the Example Scripts section.......

Edited by Colyn1337
Link to comment
Share on other sites

  • 2 weeks later...

Hi.

then in your environment the users are at least "poweruser", or the printers are pushed down from the print server (GPO or whatoever)

Regards, Rudi.

Nope, they're not poweruser's..... they're just regular bare bones users. We don't push pinters by GPO, but as stated before, we have print servers.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...