Criando uma impressora de rede via Powershell

3

Estou tentando criar impressoras de rede usando um script do Powershell. O script abaixo cria a porta sem problemas, mas não cria a fila. Alguém pode confirmar se esse script funciona no Windows Server 2008? (Note que você precisa ter o driver instalado para que isso funcione).

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"

O erro que estou recebendo está na função CreatePrinter:

Exception calling "Put" with "0" argument(s): "Generic failure "

    
por fenster 25.08.2010 / 08:02

2 respostas

3

O seu PortName não deveria ser "IP_ $ IPAddress" em vez de "Localhost"?

CreatePrinter  -PrinterName Print1 -DriverName "HP LaserJet 4" -PortName "IP_123.123.123.123" -Location "Office" -Comment "Test comment"

Além disso, seu DriverName precisa ser o nome exato desse driver. Você não consegue escolher; é especificado pelo fabricante.

    
por 21.03.2011 / 19:15
0

O problema com o seu script é que você declara $ IPAddress em sua função, mas especifica -portname quando você chama a função. Altere a função para usar $ PortName ou use -IPAddress ao chamar a função.

Pessoalmente, mudei sua função para usar [string] $ PortName

Aqui está sua função funcionando corretamente

  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"
    
por 22.01.2014 / 19:00