2017-08-30 28 views
1

我正在尝试编辑机器默认打印机首选项。更具体地讲,我想每个打印类型更改为锁定打印,然后分配给各个用户的用户名和密码:使用VBScript编辑默认打印机首选项作业类型

settings to be edited

每个人都在PCL6打印机驱动程序,但我不知道如何从VBScript中访问这个。这是我到目前为止。我一直在尽可能多地注释它,所以希望如果我离开的话能够理解它的人。全部在工作状态:

Option Explicit 

' Tell WSH to resume on errors, otherwise our error handling can't do it's job 
    On Error Resume Next 

' Define variables 
Dim objNetwork, objWMIService, objPrinter 
Dim colInstalledPrinters 
Dim strPrinterServer, strPrinterShare, strUserName, strPassword, strPrinterName 
Dim Return, LocalDefault 
Dim DynamicMessage 
Dim DefaultPrinter 

strPrinterServer = "\\GBDSCWSSC0125" 
strPrinterShare = "GBGBMIL1NPSC000" 
strPassword = "1234" 

msgbox("This tool will set up your default printer with a username and password. When changing default printers, please run this tool again") 
strUserName = CreateObject("WScript.Network").UserName 
DynamicMessage = msgbox("Your username is " & strUserName & vbNewLine & "Is this correct?", vbYesNo) 

If DynamicMessage = vbNo Then 
    strUserName = InputBox("Please enter your username") 
    DynamicMessage = msgbox("Your username is " & strUserName, vbOK) 
End If 

' Get WMIService so we can run WMI queries (windows management instrumentation). Basically a library for controlling windows 
Set objWMIService = GetObject(_ 
    "winmgmts:" & "{impersonationLevel=impersonate}!\\" _ 
    & strComputerName & "\root\cimv2") 

' Run a WMI query to get all the installed printers. This returns a collection so the variable uses the "col" prefix 
Set colInstalledPrinters = objWMIService.ExecQuery("Select * from Win32_Printer") 

' The WMI query returns a collection that we need to loop through and check to see if the current printer object is the default printer 
For Each objPrinter in colInstalledPrinters 
    If objPrinter.Default = "True" Then 
     If objPrinter.Name <> "Microsoft Office Document Image Writer" Then 
      LocalDefault = True 
      strPrinterName = objPrinter.Name 
      DynamicMessage = msgbox("Default printer is " & strPrinterName, vbOKOnly) 
     End If 
    End If 
Next 

msgbox("Done!") 

Set objWMIService = Nothing 
Set objNetwork = Nothing 

WScipt.Quit 

这是不是可能?

+0

你在用什么打印机?也许是RICOH? – JoSerra

+0

是的,我们在办公室附近有各种RICOH打印机,但它们都使用相同的驱动程序。 – JaayB

+0

Hi @JaayB Ricoh打印机队列在PRINT SERVER上包含一个XML文件,它在这个注册表项上存储了一些打印机首选项** HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Print \ Printers \ \ PrinterDriverData \ capsdb_scope :: UI_Customize ** 。 您可以使用[打印机驱动程序包装器NX软件](http://support.ricoh.com/html_gen/util/PDP/PDP.html)创建自定义配置文件 我认为您可以将打印作业的用户标识设置为当前的Windows登录名,但我不知道如何设置密码字段。 – JoSerra

回答

0

你可以尝试设置注册表项HKEY_LOCAL_MACHINE \ SOFTWARE \微软\的Windows NT \ CURRENTVERSION \打印\打印机\打印机名称\为PrinterDriver数据\ capsdb_scope ::üI_Customize这个值打印服务器上:

<?xml version="1.0" encoding="utf-8"?> 
<rcf version="1.0"> 
    <devicesettings drivername="RICOH MP 402SPF PCL 6" independent="yes"> 
    <item name="userid_type" value="windowsloginname"/> 
    <item name="jobtype" value="lockedprint"/> 
    </devicesettings> 
    <featurelock> 
    <item fixvalue="windowsloginname" name="userid_type"/> 
    <item fixvalue="lockedprint" name="jobtype"/> 
    </featurelock> 
    <popupbeforeprint type="jobtype"> 
    <item defaultstring="default" name="username"/> 
    <item defaultstring="blank" name="password"/> 
    <item defaultstring="default" name="userid"/> 
    </popupbeforeprint> 
</rcf> 
+0

我可以直到HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Print \ Printers \ HP Universl Printing PCL 6 \ PrinterDriverData,但过去我无法在注册表中找到capsdb_scope :: UI ...。 原谅我,如果我听起来有点遗忘所有这一切。我之前编辑过注册表,但总是盲目地完成它,因为我被告知。我可能需要花一些时间来阅读和理解它。 – JaayB

+0

您必须在打印服务器(GBDSCWSSC0125)中检查该注册表项。你的打印机驱动程序名是什么? – JoSerra

+0

我有点厚颜无耻,搜索了我在注册表中输入到打印机首选项中的用户名,并找到了UserID/Username字段和密码字段。我只是想找到一个现在改变类型,我应该设置....我想。仍围绕着XML来改变注册表,但最终应该点击它。 发现它在HKEY_CURRENT_USER> SOFTWARE> RICOH> JOBCODE> JCUserID \\ \ JaayB

相关问题