Powershell v2 — Установка принтера

Я пытаюсь автоматизировать установку принтера в Windows 7 x64 с помощью сценария Powershell. На данный момент у меня есть сценарий, который успешно создает порт 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"

person Gazel    schedule 12.11.2013    source источник
comment
Это сетевая очередь печати?   -  person MDMoore313    schedule 12.11.2013
comment
Я думаю, что это вопрос цитаты. Не могли бы вы попробовать это: 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"   -  person CB.    schedule 12.11.2013
comment
@MDMoore313 Нет, это не очередь печати. Это локальная установка IP-принтера.   -  person Gazel    schedule 13.11.2013
comment
@C.B. Я обновил свой вопрос, пожалуйста, посмотрите.   -  person Gazel    schedule 13.11.2013


Ответы (4)


Чтобы вставить двойные кавычки в строку с двойными кавычками, вам нужно их экранировать. Поскольку вы не используете переменные, проще использовать строку в одинарных кавычках, например:

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`""
person Keith Hill    schedule 12.11.2013
comment
Спасибо! У меня это работает сейчас. - person Gazel; 13.11.2013

Извините, но я не уверен, почему вы звоните 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"
person tomohulk    schedule 28.05.2014
comment
На самом деле, вероятно, следует Splat PrinterInfo. - person tomohulk; 28.05.2014
comment
лучший ответ, ОП хочет powershell - person mschr; 27.10.2014

Я знаю, что на этот вопрос уже был дан ответ, но вы можете позаимствовать код, который у меня есть в этой книге Excel (в статье есть ссылка). Я понимаю, что он использует VBS, но они встроены в сценарии Windows, и вырезание/вставка в Excel спасли меня много раз, и я установил таким образом тысячи принтеров.

лучший инструмент-для-принтера -creation-excel-vs-print-management-console

person Douglas Anderson    schedule 18.12.2013

Попробуй это:

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\""
person Sam Doxy    schedule 22.08.2014