Я пытаюсь создать сетевые принтеры с помощью сценария Powershell. Приведенный ниже сценарий создает порт без каких-либо проблем, но не создает очередь. Вы можете подтвердить, работает ли этот сценарий на Windows Server 2008? (Учтите, что для того, чтобы это работало, у вас должен быть установлен драйвер).
function CreatePrinterPort {
Param (
[string]$IPAddress
)
$port = [wmiclass]"Win32_TcpIpPrinterPort"
$newPort = $port.CreateInstance()
$newport.Name= "IP_$IPAddress"
$newport.SNMPEnabled=$false
$newport.Protocol=1
$newport.HostAddress= $IPAddress
Write-Host "Creating Port $ipaddress" -foregroundcolor "green"
$newport.Put()
}
function CreatePrinter {
Param (
[string]$PrinterName,
[string]$DriverName,
[string]$IPAddress,
[string]$Location,
[string]$Comment
)
$print = [WMICLASS]"Win32_Printer"
$newprinter = $print.createInstance()
$newprinter.Drivername = $DriverName
$newprinter.PortName = "IP_$IPAddress"
$newprinter.Shared = $true
$newprinter.Sharename = $PrinterName
$newprinter.Location = $Location
$newprinter.Comment = $Comment
$newprinter.DeviceID = $PrinterName
Write-Host "Creating Printer $printername" -foregroundcolor "green"
$newprinter.Put()
}
CreatePrinterPort -IPAddress "Localhost"
CreatePrinter -PrinterName Print1 -DriverName "HP LaserJet 4" -PortName "Localhost"`
-Location "Office" -Comment "Test comment"
Ошибка, которую я получаю, связана с функцией CreatePrinter:
Исключение, вызывающее «Put» с аргументом (ами) «0»: «Общий сбой»
Разве ваше имя порта не должно быть «IP_ $ IPAddress» вместо «Localhost»?
CreatePrinter -PrinterName Print1 -DriverName "HP LaserJet 4" -PortName "IP_123.123.123.123" -Location "Office" -Comment "Test comment"
Кроме того, ваше имя драйвера должно быть точным именем этого драйвера. Вы не можете выбрать это; это указано производителем.
Проблема с вашим скриптом заключается в том, что вы объявляете $ IPAddress в своей функции, но указываете -portname при вызове функции. Либо измените функцию, чтобы использовать $ PortName, либо используйте -IPAddress при вызове функции.
Лично я изменил вашу функцию на использование [string] $ PortName
Вот ваша функция работает правильно
function CreatePrinter {
Param (
[string]$PrinterName,
[string]$DriverName,
[string]$PortName,
[string]$Location,
[string]$Comment
)
$print = [WMICLASS]"Win32_Printer"
$newprinter = $print.createInstance()
$newprinter.Drivername = $DriverName
$newprinter.PortName = "IP_$PortName"
$newprinter.Shared = $true
$newprinter.Sharename = $PrinterName
$newprinter.Location = $Location
$newprinter.Comment = $Comment
$newprinter.DeviceID = $PrinterName
Write-Host "Creating Printer $printername" -foregroundcolor "green"
$newprinter.Put()
}
$printerport1 = "10.10.10.0"
CreatePrinterPort -IPAddress $printerport1
CreatePrinter -PrinterName "Print1" -DriverName "HP LaserJet 4300 PCL 6" -PortName $printerport1 -Location "Office" -Comment "Test comment"