Donnerstag, 22. April 2010

Anlegen von Druckern und Druckerports per PowerShell

Kürzlich stand ich vor der Herausforderung, mehrere hundert Drucker bei einem Kunden zu installieren. Nach kurzer Recherche war klar, dass sich das sehr einfach per PowerShell erledigen lässt:

Anlegen eines Druckerports mit dem Namen "Port001":

Write-Output "Creating printer port `"Port001`""
$port =([WMICLASS]"\\.\ROOT\cimv2:Win32_TCPIPPrinterPort").createInstance()
$port.Name="Port001"
$port.SNMPEnabled=$false
$port.Protocol=1
$port.HostAddress="Port001"
$port.Put()

Anlegen und freigeben eines Druckers mit dem Namen "Printer001":

Write-Output "Creating printer `"Printer001`""
$printer =([WMICLASS]"\\.\ROOT\cimv2:Win32_Printer").createInstance()
$printer.Name="Printer001"
$printer.DriverName="HP Universal Printing PCL 5 (v5.0)"
$printer.DeviceID="Printer001"
$printer.PortName="Port001"
$printer.Shared=$true
$printer.ShareName="Printer001"
$printer.Put()

Das ganze packt man dann in eine Schleife, die eine CSV-Datei mit den vorhandenen Druckern einliest und schon kann man beliebig viele Drucker auf Knopfdruck anlegen. :-)

Das Anlegen eines Druckers auf einem Printserver-Cluster funktioniert so übrigens nicht, da per WMI nicht auf den virtuellen Clusternamen zugegriffen werden kann. Stattdessen kann man dann allerdings z.B. per PowerShell erstellte Registry-Dateien importieren...

3 Kommentar(e):

  1. .. und wie sieht diese Schleife dann aus?
    AntwortenLöschen
  2. z.B. so:

    Import-Csv "printers.csv" -Delimiter ";" | foreach {
    Write-Host "Writing information for printer port $($_.PrinterPort) to PowerShell file..."
    Write-Output "Write-Output `"Creating printer port ```"$($_.PrinterPort)```"`""
    Write-Output "`$port =([WMICLASS]`"\\.\ROOT\cimv2:Win32_TCPIPPrinterPort`").createInstance()"
    Write-Output "`$port.Name=`"$($_.PrinterPort)`""
    Write-Output "`$port.SNMPEnabled=`$false"
    Write-Output "`$port.Protocol=1"
    Write-Output "`$port.HostAddress=`"$($_.PrinterPort)`""
    Write-Output "`$port.Put()"
    Write-Output ""
    } | Out-File $($Filename)

    ---

    Die Datei printers.csv enthält dann für jeden Drucker eine Zeile:

    PrinterPort;PrinterName;Model;Driver
    PRINTER001;PRINTER001;HP Color LaserJet CP3505x;HP Universal Printing PCL 5 (v5.0)
    PRINTER002;PRINTER002;HP Color LaserJet CP3505dn;HP Universal Printing PCL 5 (v5.0)
    AntwortenLöschen
  3. perfekt.. funktioniert.. Danke
    AntwortenLöschen