【问题标题】:Powershell v2 - Installing PrinterPowershell v2 - 安装打印机
【发布时间】:2013-11-12 12:19:19
【问题描述】:

我正在尝试使用 Powershell 脚本在 Windows 7 x64 上自动安装打印机。到目前为止,我有一个成功创建 TCP/IP 端口的脚本,但在执行打印机安装部分代码时给了我一个错误 - 参数无效。关于如何解决问题并通过 Powershell 成功安装打印机的任何想法?代码如下:

$hostAddress = "172.16.2.24" 
$portNumber = "9100"  
$computer = $env:COMPUTERNAME 

$wmi= [wmiclass]"\\$computer\root\cimv2:win32_tcpipPrinterPort" 
#$wmi.psbase.scope.options.enablePrivileges = $true 
$newPort = $wmi.createInstance() 

$newPort.hostAddress = $hostAddress 
$newPort.name = "IP_" + $hostAddress 
$newPort.portNumber = $portNumber 
$newPort.SNMPEnabled = $false 
$newPort.Protocol = 1 
$newPort.put()

CMD.EXE /C "printui.exe /if /b "Test Printer" /f C:\inetpub\wwwroot\ftp\Prdrivers\HP Universal Print Driver\pcl6-x64-5.7.0.16448\hpbuio100l.inf /r "IP_172.16.2.24" /m "HP Laser Jet P3015""

问题更新:这是有效的 CMD 代码,那么如何将其合并到上面的 Powershell 代码中?

printui.exe /if /b "HP Universal Printing PCL 6" /f "C:\inetpub\wwwroot\ftp\Prdrivers\HP Universal Print Driver\pcl6-x64-5.7.0.16448\hpbuio100l.inf" /u /r "IP_172.16.2.24" /m "HP Universal Printing PCL 6"

【问题讨论】:

  • 这是一个网络打印队列吗?
  • 我认为是报价问题。你可以试试这个:cmd.exe /c printui.exe /if /b "Test Printer" /f C:\inetpub\wwwroot\ftp\Prdrivers\HP Universal Print Driver\pcl6-x64-5.7.0.16448\hpbuio100l.inf /r "IP_172.16.2.24" /m "HP Laser Jet P3015"
  • @MDMoore313 不,这不是打印队列。这是本地 IP 打印机安装。
  • @C.B.我已经更新了我的问题,请看一下。

标签: powershell printers


【解决方案1】:

要在双引号字符串中嵌入双引号,您需要对它们进行转义。由于您没有使用变量,因此使用单引号字符串更容易,例如:

CMD.EXE /C 'printui.exe /if /b "Test Printer" /f C:\inetpub\wwwroot\ftp\Prdrivers\HP Universal Print Driver\pcl6-x64-5.7.0.16448\hpbuio100l.inf /r "IP_172.16.2.24" /m "HP Laser Jet P3015"'

如果您需要在此字符串中使用 PowerShell 变量,则需要切换回双引号并转义必要的 DQ 字符,例如:

CMD.EXE /C "printui.exe /if /b `"$PrinterName`" /f C:\inetpub\wwwroot\ftp\Prdrivers\HP Universal Print Driver\pcl6-x64-5.7.0.16448\hpbuio100l.inf /r `"IP_172.16.2.24`" /m `"HP Laser Jet P3015`""

【讨论】:

  • 谢谢!我现在已经启动并运行了。
【解决方案2】:

抱歉,我不确定你为什么要调用 CMD /C @PARAMS。我只是直接调用 printui.exe 并且它正在工作,我只双引号 Args

# Printer Info, I keep this in an SQL DB, and return these values with a query:
$printerID = "<PrinterNameOrID>"
$printerIP = "<PrinterIP>"
$printerPort = "IP_$printerIP"
$printerModel = "<PrinterModelFromINF>"
$driverINFPath = "<UNCPathToDriverINF>"

# Build a new Local TCP Printer Port, naming it with values unique to the Printer ID:
$newPort = ([wmiclass]"Win32_TcpIpPrinterPort").CreateInstance()
$newPort.HostAddress = $printerIP
$newPort.Name = $printerPort
$newPort.PortNumber = "9100"
$newPort.Protocol = 1
$newPort.Put()

# Add the printer
printui.exe /if /b "$printerID" /f "$driverINFPath" /u /r "$printerPort" /m "$printerModel"

【讨论】:

  • 实际上,应该可能会喷出 PrinterInfo。
  • 最佳答案,OP 想要 powershell
【解决方案3】:

我知道这已经得到解答,但您可以借用我在此 Excel 工作簿中的代码(文章中有链接)。我意识到它使用 VBS,但这些是在 Windows 中内置的脚本,剪切/粘贴到 Excel 中为我节省了很多次,我已经以这种方式安装了数千台打印机

best-tool-for-printer-creation-excel-vs-print-management-console

【讨论】:

    【解决方案4】:

    试试这个:

    runas /user:Contoso.com\user1 "printui.exe /if /b \"Test Printer\" /f \"C:\inetpub\wwwroot\ftp\Prdrivers\HP Universal Print Driver\pcl6-x64-5.7.0.16448\hpbuio100l.inf\" /r \"IP_172.16.2.24\" /m \"HP Laser Jet P3015\""
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-29
      • 2016-11-17
      • 2018-03-31
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 2015-09-11
      • 2015-11-03
      相关资源
      最近更新 更多