pago159
Goto Top

Drucker per PowerShell auf Printserver installieren

Hallo Kolleginnen und Kollegen,

vor kurzem gab es schon einmal eine Frage zur installation von Druckern auf Printservern, allerdings sollte in diesem Fall ein Skript direkt auf dem Printserver laufen und dort Drucker installieren.
Ich hätte es gerne, dass ich von meinem Client aus per Powershell auf verschiedenen Printservern Druckerobjekte mit entsprechendem Port installieren kann, ohne jedes mal eine RDP-Sitzung zum Drucker zu starten.
Ich habe auch schon ein bisschen rum gebastelt, mein Skript läuft auch ohne Fehler durch (PowerShell ISE).
Wenn es eine Möglichkeit gibt die Textdateien zu umgehen, also alles nur durch das Skript laufen zu lassen und zum Schluss eine Logdatei zu schreiben, welche den Printserver, den Druckernamen, die IP-Adresse, den Standort und das Druckermodell enthält, wäre ich auch hierüber sehr dankbar.

und nun mein Skript:

#printer add script 
#Created from Scripting guys example scripts and Stephen Small. 
#
 
#Löscht alle variablen, damit bei einem doppelten Lauf keine Werte vergeben sind. 
$portname = ""   
$IPaddress = ""   
$driver = ""   
$location = ""   
$comment = ""   
$printserver = ""  


 
#Erstellen der Form
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Drawing")    
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")    
 
$objForm = New-Object System.Windows.Forms.Form 
$objForm.Text = "Printer Add"   
$objForm.Size = New-Object System.Drawing.Size(300,550)  
$objForm.StartPosition = "CenterScreen"   
 
# Erstellen der Label für die Texteingabe (Druckername) 

$objLabel1 = New-Object System.Windows.Forms.Label 
$objLabel1.Location = New-Object System.Drawing.Size(10,20)  
$objLabel1.Size = New-Object System.Drawing.Size(280,20)  
$objLabel1.Text = "Druckername:"   
$objForm.Controls.Add($objLabel1)  
 
$objTextBox1 = New-Object System.Windows.Forms.TextBox  
$objTextBox1.Location = New-Object System.Drawing.Size(10,40)  
$objTextBox1.Size = New-Object System.Drawing.Size(260,20)  
$objForm.Controls.Add($objTextBox1) 
 
 # Erstellen der Label für die Texteingabe (IP-Adresse) 
 
$objLabel2 = New-Object System.Windows.Forms.Label 
$objLabel2.Location = New-Object System.Drawing.Size(10,70)  
$objLabel2.Size = New-Object System.Drawing.Size(280,20)  
$objLabel2.Text = "IP-Adresse:"   
$objForm.Controls.Add($objLabel2)  
 
$objTextBox2 = New-Object System.Windows.Forms.TextBox  
$objTextBox2.Location = New-Object System.Drawing.Size(10,90)  
$objTextBox2.Size = New-Object System.Drawing.Size(260,20)  
$objForm.Controls.Add($objTextBox2) 
 
 # Erstellen der Label für die Texteingabe (Standort) 
 
$objLabel3 = New-Object System.Windows.Forms.Label 
$objLabel3.Location = New-Object System.Drawing.Size(10,120)  
$objLabel3.Size = New-Object System.Drawing.Size(280,20)  
$objLabel3.Text = "In welchem Zimmer steht der Drucker?"   
$objForm.Controls.Add($objLabel3)  
 
$objTextBox3 = New-Object System.Windows.Forms.TextBox  
$objTextBox3.Location = New-Object System.Drawing.Size(10,150)  
$objTextBox3.Size = New-Object System.Drawing.Size(260,20)  
$objForm.Controls.Add($objTextBox3) 
 
 # Erstellen der Label für die Texteingabe (Printserver)
 
$objLabel4 = New-Object System.Windows.Forms.Label 
$objLabel4.Location = New-Object System.Drawing.Size(10,180)  
$objLabel4.Size = New-Object System.Drawing.Size(280,20)  
$objLabel4.Text = "Printserver Name:"   
$objForm.Controls.Add($objLabel4)  
 
$objTextBox4 = New-Object System.Windows.Forms.TextBox  
$objTextBox4.Location = New-Object System.Drawing.Size(10,200)  
$objTextBox4.Size = New-Object System.Drawing.Size(260,20)  
$objForm.Controls.Add($objTextBox4) 
 
 # Erstellen der Label für die Texteingabe (Kommentar)
 
$objLabel5 = New-Object System.Windows.Forms.Label 
$objLabel5.Location = New-Object System.Drawing.Size(10,230)  
$objLabel5.Size = New-Object System.Drawing.Size(280,20)  
$objLabel5.Text = "Comment:"   
$objForm.Controls.Add($objLabel5)  
  
$objTextBox5 = New-Object System.Windows.Forms.TextBox  
$objTextBox5.Location = New-Object System.Drawing.Size(10,250)  
$objTextBox5.Size = New-Object System.Drawing.Size(260,20)  
$objForm.Controls.Add($objTextBox5) 
 
 # Liste der Drucker, die eingerichtet werden Können (Pfad zur *.ini muss noch eingerichtet werden)
 
$objLabel6 = New-Object System.Windows.Forms.Label
$objLabel6.Location = New-Object System.Drawing.Size(10,280) 
$objLabel6.Size = New-Object System.Drawing.Size(280,20) 
$objLabel6.Text = "Suchen Sie den Druckertreiber aus:"  
$objForm.Controls.Add($objLabel6) 
 
$objListBox = New-Object System.Windows.Forms.ListBox  
$objListBox.Location = New-Object System.Drawing.Size(10,300)  
$objListBox.Size = New-Object System.Drawing.Size(260,20)  
$objListBox.Height = 160 
$objListbox.SelectionMode = "one"   
  
[void] $objListBox.Items.Add("HP Color LaserJet 3505")   
[void] $objListBox.Items.Add("HP Color LaserJet 3800")   
[void] $objListBox.Items.Add("HP LaserJet 1320")   
[void] $objListBox.Items.Add("Lexmark C510")   
[void] $objListBox.Items.Add("Lexmark MS510dn")   
[void] $objListBox.Items.Add("Lexmark C734dn")   
[void] $objListBox.Items.Add("Lexmark C746")   
[void] $objListBox.Items.Add("Lexmark E120n")   
[void] $objListBox.Items.Add("Lexmark E352dn")   
[void] $objListBox.Items.Add("Lexmark E360dn")   
[void] $objListBox.Items.Add("Lexmark E460dn")  
[void] $objListBox.Items.Add("Lexmark T420")  
[void] $objListBox.Items.Add("Lexmark T650")  
[void] $objListBox.Items.Add("Lexmark X544")  
[void] $objListBox.Items.Add("Kyocera Mita FS-1010")  
[void] $objListBox.Items.Add("Kyocera Mita FS-6020")   
[void] $objListBox.Items.Add("NRG 1805d 1808d 1802d")  
[void] $objListBox.Items.Add("NRG 1305 1308 1302")  
[void] $objListBox.Items.Add("NRG 2205 2238 2212")  
[void] $objListBox.Items.Add("NRG 3545 3518 3532")  
[void] $objListBox.Items.Add("NRG 6002 6005 6008")  
[void] $objListBox.Items.Add("NRG 7502 7505 7508")  
[void] $objListBox.Items.Add("NRG DSm 415")  
[void] $objListBox.Items.Add("NRG DSm 615")  
[void] $objListBox.Items.Add("NRG DSm 618")  
[void] $objListBox.Items.Add("NRG DSm 622")  
[void] $objListBox.Items.Add("NRG DSm 651")  
[void] $objListBox.Items.Add("NRG DSm 735")  
[void] $objListBox.Items.Add("NRG MP 2550")  
[void] $objListBox.Items.Add("NRG P 7325N")  
[void] $objListBox.Items.Add("Ricoh Aficio 3025")  
[void] $objListBox.Items.Add("Ricoh Aficio 3045")  
[void] $objListBox.Items.Add("Ricoh Aficio MP 5000B")  
[void] $objListBox.Items.Add("Ricoh Aficio MP 5500")  
[void] $objListBox.Items.Add("Ricoh Aficio MP 6000")  
[void] $objListBox.Items.Add("Ricoh Aficio MP 7500")  

$objListBox.SelectedItem 
 
$objForm.Controls.Add($objListBox) 
 
# HIER STEHEN JETZT DIE BUTTONS!!!

$objForm.KeyPreview = $True 
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Enter") {$driver=$objListBox.SelectedItem;$portname=$objTextBox1.Text;$IPaddress=$objTextBox2.Text;$Location=$objTextBox3.Text;$printserver=$objTextbox4.Text;$objForm.Close()}})   
$objForm.Add_KeyDown({if ($_.KeyCode -eq "Escape") {$Cancel=$True;$objForm.Close()}})   



$OKButton = New-Object System.Windows.Forms.Button 
$OKButton.Location = New-Object System.Drawing.Size(75,480) 
$OKButton.Size = New-Object System.Drawing.Size(75,23) 
$OKButton.Text = "OK"   
$OKButton.Add_Click({$driver=$objListBox.SelectedItem;$portname=$objTextBox1.Text;$IPaddress=$objTextBox2.Text;$Location=$objTextBox3.Text;$comment=$objTextBox5.Text;$printserver=$objTextbox4.Text;$objForm.Close()}) 
$objForm.Controls.Add($OKButton) 
 
$CancelButton = New-Object System.Windows.Forms.Button 
$CancelButton.Location = New-Object System.Drawing.Size(150,480) 
$CancelButton.Size = New-Object System.Drawing.Size(75,23) 
$CancelButton.Text = "Cancel"   
$CancelButton.Add_Click({$Cancel=$True;$objForm.Close()}) 
$objForm.Controls.Add($CancelButton)  
 
 
$objForm.Topmost = $True 
 
$objForm.Add_Shown({$objForm.Activate()}) 
[void] $objForm.ShowDialog() 
 
if ($Cancel -eq $True) 
{Exit} 
  
 
#Hinzufügen der Daten zu den Textdateien für die spätere Erstellung der Objekte 
 
Clear-Content c:\printeraddscript\ports.txt 
add-content c:\printeraddscript\ports.txt "Printserver,Portname,IPAddress"   
add-content c:\printeraddscript\ports.txt "$printservername","$portname","$IPaddress"   
  
Clear-Content c:\printeraddscript\printers.txt 
add-content c:\printeraddscript\printers.txt "Printserver,Driver,PortName,ShareName,Location,Comment,DeviceID"   
add-content c:\printeraddscript\printers.txt "$printservername","$driver","$portname","$portname","$location","$IPaddress", "$driver","$portname"   
  
#Erstellt das Druckerobjekt mit Hilfe der Textdokumente
 
function CreatePrinterPort { 
$server = $args  
$port = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_TCPIPPrinterPort").createInstance()   
$port.Name = $args[1] 
$port.SNMPEnabled = $true 
$port.SNMPCommunity = ""   
$port.Protocol = 1 
$port.Portnumber = "9100"   
$port.HostAddress = $args[2]   
} 
  
function CreatePrinter{ 
$server = $args 
$print = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_Printer").createInstance()   
$print.Drivername = $args[1] 
$print.PortName = $args[2] 
$print.Shared = $true 
$print.Published = $true 
$print.Sharename = $args[3] 
$print.Location = $args[4] 
$print.Comment = $args[5] 
$print.DeviceID = $args[6] 

} 
  
#Log File 
$printers = Import-Csv c:\printeraddscript\printers.txt 
$ports = Import-Csv c:\printeraddscript\ports.txt 
$filename = "printeradd-{0:d2}-{1:d2}-{2:d2}.log" -f $date.month,$date.day,$date.year   
$filepath = "c:\printeraddscript\"   
  
foreach ($port in $ports){ 
CreatePrinterPort $port.Printserver $port.Portname $port.IPAddress 
} 
foreach ($printer in $printers){ 
CreatePrinter $printer.Printserver $printer.Driver $printer.Portname $printer.Sharename $printer.Location $printer.Comment $printer.DeviceID 
$date = Get-Date; Add-Content -Path $filepath\$filename ("Printer $($portname) was added on $($printserver) at $($date)")   
} 
 
#Balloon tip on Cmplettion 
[void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")   
 
$objNotifyIcon = New-Object System.Windows.Forms.NotifyIcon  
 
$objNotifyIcon.Icon = "C:\ProgramData\Microsoft\Device Stage\Task\{e35be42d-f742-4d96-a50a-1775fb1a7a42}\print_queue.ico"   
$objNotifyIcon.BalloonTipIcon = "Info"    
$objNotifyIcon.BalloonTipText = ("Der Drucker" , $portname , " wurde auf dem Server" , $printserver , "hinzugefügt.")    
$objNotifyIcon.BalloonTipTitle = "Printer add Complete"   
  
$objNotifyIcon.Visible = $False  
$objNotifyIcon.ShowBalloonTip(20000)    

Content-Key: 256361

Url: https://administrator.de/contentid/256361

Printed on: April 16, 2024 at 23:04 o'clock

Member: colinardo
Solution colinardo Dec 01, 2014, updated at Dec 05, 2014 at 13:21:42 (UTC)
Goto Top
Hallo pago,
etwa so (ungetestet mangels zur Verfügung stehender Drucker):
function GenerateForm {

#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null  
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null  
#endregion

#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$txtPrinterPort = New-Object System.Windows.Forms.NumericUpDown
$label7 = New-Object System.Windows.Forms.Label
$comboPrintServer = New-Object System.Windows.Forms.ComboBox
$btnCancel = New-Object System.Windows.Forms.Button
$btnOK = New-Object System.Windows.Forms.Button
$label6 = New-Object System.Windows.Forms.Label
$txtPrinterComment = New-Object System.Windows.Forms.TextBox
$txtPrinterLocation = New-Object System.Windows.Forms.TextBox
$label4 = New-Object System.Windows.Forms.Label
$lbPrinterType = New-Object System.Windows.Forms.ListBox
$txtPrinterIP = New-Object System.Windows.Forms.TextBox
$txtPrintername = New-Object System.Windows.Forms.TextBox
$label3 = New-Object System.Windows.Forms.Label
$label2 = New-Object System.Windows.Forms.Label
$label1 = New-Object System.Windows.Forms.Label
$label5 = New-Object System.Windows.Forms.Label
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects

#----------------------------------------------
# Event Script Blocks
#----------------------------------------------
$createPrinter = {

    Try{
        $printserver = $comboPrintServer.Text
        $portname = "IP_$($txtPrinterIP.Text)"  
    
        # create printer port
        $wmi = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_TCPIPPrinterPort")  
        $wmi.psbase.scope.options.enablePrivileges = $true
        $port = $wmi.CreateInstance()
        $port.Name = $portname
        $port.Protocol = 1 
        $port.Portnumber = $txtPrinterPort.Text 
        $port.HostAddress = $txtPrinterIP.Text
        $port.SNMPEnabled = $False
        $port.put()

        #create printer instance
        $print = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_Printer").createInstance()   
        $print.Drivername = $lbPrinterType.SelectedItem
        $print.PortName = $portname
        $print.Shared = $true
        $print.Published = $true
        $print.Sharename = $txtPrintername.Text
        $print.Location = $txtPrinterLocation.Text
        $print.Comment = $txtPrinterComment.Text
        $print.DeviceID = $txtPrintername.Text
        $print.put()
        return $true
     }catch{
        return $_.Exception.Message
     }

} 

$handler_btnOK_Click = {
    
    # Drucker erstellen
    $result = &$createPrinter
    
    # wenn erfolgreich ...
    $logtext = ""  
    if ($result -eq $true){
        $logtext = @"  
-------- $(get-date -Format "g") ---------- Drucker auf Printserver '$($comboPrintServer.Text)' hinzugefügt: --------------  
Druckername: $($txtPrintername.Text)
IP-Adresse: $($txtPrinterIP.Text)
Port: $($txtPrinterPort.Value)
Treiber: $($lbPrinterType.SelectedItem)
Standort: $($txtPrinterLocation.Text)
Kommentar: $($txtPrinterComment.Text)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Der Drucker $txtPrintername wurde auf dem Printserver $($comboPrintServer.Text) angelegt.")  
    }else{
        $logtext = @"  
-------- $(get-date -Format "g") ---------- !!! ACHTUNG FEHLER !! beim hinzufügen des Druckers auf Printserver '$($comboPrintServer.Text)': --------------  
Druckername: $($txtPrintername.Text)
IP-Adresse: $($txtPrinterIP.Text)
Port: $($txtPrinterPort.Value)
Treiber: $($lbPrinterType.SelectedItem)
Standort: $($txtPrinterLocation.Text)
Kommentar: $($txtPrinterComment.Text)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Beim Anlegen des Druckers/Ports ist ein Fehler aufgetreten: $result")  
    }
    Add-Content "logfile.log" $logtext -Force  
}

$handler_btnCancel_Click = {
    $form1.Close()
}

$handler_form1_Load = {

    # add printer drivers to List
    $lbPrinterType.Items.AddRange(@(
        "HP Color LaserJet 3505",  
        "HP Color LaserJet 3800",  
        "HP LaserJet 1320",  
        "Lexmark C510",  
        "Lexmark MS510dn",  
        "Lexmark C734dn",  
        "Lexmark C746",  
        "Lexmark E120n",  
        "Lexmark E352dn",  
        "Lexmark E360dn",  
        "Lexmark E460dn",  
        "Lexmark T420",  
        "Lexmark T650",  
        "Lexmark X544",  
        "Kyocera Mita FS-1010",  
        "Kyocera Mita FS-6020",  
        "NRG 1805d 1808d 1802d",  
        "NRG 1305 1308 1302",  
        "NRG 2205 2238 2212",  
        "NRG 3545 3518 3532",  
        "NRG 6002 6005 6008",  
        "NRG 7502 7505 7508",  
        "NRG DSm 415",  
        "NRG DSm 615",  
        "NRG DSm 618",  
        "NRG DSm 622",  
        "NRG DSm 651",  
        "NRG DSm 735",  
        "NRG MP 2550",  
        "NRG P 7325N",  
        "Ricoh Aficio 3025",  
        "Ricoh Aficio 3045",  
        "Ricoh Aficio MP 5000B",  
        "Ricoh Aficio MP 5500",  
        "Ricoh Aficio MP 6000",  
        "Ricoh Aficio MP 7500"  
    ))

    # add printservers
    $comboPrintServer.Items.AddRange(@(
        ".",  
        "SERVER01",  
        "SERVER02",  
        "SERVER03",  
        "SERVER04"  
    ))
    $comboPrintServer.SelectedIndex = 0
}

$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
	$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 472
$System_Drawing_Size.Width = 274
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 500
$System_Drawing_Size.Width = 282
$form1.MinimumSize = $System_Drawing_Size
$form1.Name = "form1"  
$form1.Text = "Create Printer"  
$form1.add_Load($handler_form1_Load)

$txtPrinterPort.Anchor = 9
$txtPrinterPort.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 186
$System_Drawing_Point.Y = 75
$txtPrinterPort.Location = $System_Drawing_Point
$txtPrinterPort.Maximum = 65536
$txtPrinterPort.Minimum = 1
$txtPrinterPort.Name = "txtPrinterPort"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 76
$txtPrinterPort.Size = $System_Drawing_Size
$txtPrinterPort.TabIndex = 2
$txtPrinterPort.TextAlign = 2
$txtPrinterPort.Value = 9100

$form1.Controls.Add($txtPrinterPort)

$label7.Anchor = 9
$label7.DataBindings.DefaultDataSourceUpdateMode = 0
$label7.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 186
$System_Drawing_Point.Y = 58
$label7.Location = $System_Drawing_Point
$label7.Name = "label7"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 59
$label7.Size = $System_Drawing_Size
$label7.TabIndex = 11
$label7.Text = "Port"  

$form1.Controls.Add($label7)

$comboPrintServer.Anchor = 14
$comboPrintServer.DataBindings.DefaultDataSourceUpdateMode = 0
$comboPrintServer.FormattingEnabled = $True
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 391
$comboPrintServer.Location = $System_Drawing_Point
$comboPrintServer.Name = "comboPrintServer"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 21
$System_Drawing_Size.Width = 249
$comboPrintServer.Size = $System_Drawing_Size
$comboPrintServer.TabIndex = 6

$form1.Controls.Add($comboPrintServer)

$btnCancel.Anchor = 10

$btnCancel.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 186
$System_Drawing_Point.Y = 437
$btnCancel.Location = $System_Drawing_Point
$btnCancel.Name = "btnCancel"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnCancel.Size = $System_Drawing_Size
$btnCancel.TabIndex = 8
$btnCancel.Text = "Abbrechen"  
$btnCancel.UseVisualStyleBackColor = $True
$btnCancel.add_Click($handler_btnCancel_Click)

$form1.Controls.Add($btnCancel)

$btnOK.Anchor = 10

$btnOK.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 105
$System_Drawing_Point.Y = 437
$btnOK.Location = $System_Drawing_Point
$btnOK.Name = "btnOK"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnOK.Size = $System_Drawing_Size
$btnOK.TabIndex = 7
$btnOK.Text = "OK"  
$btnOK.UseVisualStyleBackColor = $True
$btnOK.add_Click($handler_btnOK_Click)

$form1.Controls.Add($btnOK)

$label6.Anchor = 6
$label6.DataBindings.DefaultDataSourceUpdateMode = 0
$label6.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 368
$label6.Location = $System_Drawing_Point
$label6.Name = "label6"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 250
$label6.Size = $System_Drawing_Size
$label6.TabIndex = 10
$label6.Text = "Erstellen auf folgendem PrintServer"  

$form1.Controls.Add($label6)

$txtPrinterComment.Anchor = 14
$txtPrinterComment.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 339
$txtPrinterComment.Location = $System_Drawing_Point
$txtPrinterComment.Name = "txtPrinterComment"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 250
$txtPrinterComment.Size = $System_Drawing_Size
$txtPrinterComment.TabIndex = 5

$form1.Controls.Add($txtPrinterComment)

$txtPrinterLocation.Anchor = 14
$txtPrinterLocation.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 294
$txtPrinterLocation.Location = $System_Drawing_Point
$txtPrinterLocation.Name = "txtPrinterLocation"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 251
$txtPrinterLocation.Size = $System_Drawing_Size
$txtPrinterLocation.TabIndex = 4

$form1.Controls.Add($txtPrinterLocation)

$label4.Anchor = 6
$label4.DataBindings.DefaultDataSourceUpdateMode = 0
$label4.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 275
$label4.Location = $System_Drawing_Point
$label4.Name = "label4"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 169
$label4.Size = $System_Drawing_Size
$label4.TabIndex = 6
$label4.Text = "Standort"  

$form1.Controls.Add($label4)

$lbPrinterType.Anchor = 15
$lbPrinterType.DataBindings.DefaultDataSourceUpdateMode = 0
$lbPrinterType.FormattingEnabled = $True
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 133
$lbPrinterType.Location = $System_Drawing_Point
$lbPrinterType.Name = "lbPrinterType"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 121
$System_Drawing_Size.Width = 250
$lbPrinterType.Size = $System_Drawing_Size
$lbPrinterType.TabIndex = 3

$form1.Controls.Add($lbPrinterType)

$txtPrinterIP.Anchor = 13
$txtPrinterIP.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 75
$txtPrinterIP.Location = $System_Drawing_Point
$txtPrinterIP.Name = "txtPrinterIP"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 168
$txtPrinterIP.Size = $System_Drawing_Size
$txtPrinterIP.TabIndex = 1

$form1.Controls.Add($txtPrinterIP)

$txtPrintername.Anchor = 13
$txtPrintername.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 26
$txtPrintername.Location = $System_Drawing_Point
$txtPrintername.Name = "txtPrintername"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 250
$txtPrintername.Size = $System_Drawing_Size
$txtPrintername.TabIndex = 0

$form1.Controls.Add($txtPrintername)

$label3.DataBindings.DefaultDataSourceUpdateMode = 0
$label3.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 107
$label3.Location = $System_Drawing_Point
$label3.Name = "label3"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 100
$label3.Size = $System_Drawing_Size
$label3.TabIndex = 2
$label3.Text = "Druckertyp"  

$form1.Controls.Add($label3)

$label2.DataBindings.DefaultDataSourceUpdateMode = 0
$label2.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 58
$label2.Location = $System_Drawing_Point
$label2.Name = "label2"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 100
$label2.Size = $System_Drawing_Size
$label2.TabIndex = 1
$label2.Text = "IP-Adresse"  

$form1.Controls.Add($label2)

$label1.DataBindings.DefaultDataSourceUpdateMode = 0
$label1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 9
$label1.Location = $System_Drawing_Point
$label1.Name = "label1"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 100
$label1.Size = $System_Drawing_Size
$label1.TabIndex = 0
$label1.Text = "Druckername"  

$form1.Controls.Add($label1)

$label5.Anchor = 6
$label5.DataBindings.DefaultDataSourceUpdateMode = 0
$label5.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 321
$label5.Location = $System_Drawing_Point
$label5.Name = "label5"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 169
$label5.Size = $System_Drawing_Size
$label5.TabIndex = 9
$label5.Text = "Kommentar"  

$form1.Controls.Add($label5)

#endregion Generated Form Code

#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null

} #End Function

#Call the Function
GenerateForm
Grüße Uwe
Member: pixel0815
pixel0815 Dec 01, 2014 at 18:59:25 (UTC)
Goto Top
Servus ihr zwei,

das ist ja eine tolle Weiterentwicklung
Ich erhalte beispielsweise auf dem Printserver folgende Meldung. Die Drucker werden erstellt.

Auf dem PS habe ich PS 2.0 und auf meinem Laptop 3.0
Benötige ich eine andere Version dafür? face-sad

Der Typ [System.Windows.MessageBox] kann nicht gefunden werden: Stellen Sie sicher, dass die Assembly, die diesen Typ e
nthält, geladen wird.
Bei C:\Users\*****\Desktop\Drucker_GUIps1:85 Zeichen:36
+         [System.Windows.MessageBox] <<<< ::Show("Der Drucker $txtPrintername wurde auf dem Printserver $($comboPrintS  
erver.Text) angelegt.")  
    + CategoryInfo          : InvalidOperation: (System.Windows.MessageBox:String) , RuntimeException
    + FullyQualifiedErrorId : TypeNotFound
Member: colinardo
colinardo Dec 01, 2014 updated at 19:05:08 (UTC)
Goto Top
Hallo Heiko,
sorry Tippfehler, falsches Assembly verwendet face-wink. ist oben korrigiert.

Sollte eigentlich dieses sein:
[System.Windows.Forms.MessageBox]
Grüße Uwe

p.s. ich gebe den Fehler der Code-Completion face-smile
Member: pixel0815
pixel0815 Dec 01, 2014 updated at 19:15:25 (UTC)
Goto Top
Korrekt. Nu klappts.
Habe sogar remote einen Drucker auf dem Printserver anlegen können.
Das ist ein Tool das hier einen Admins sicherlich gefallen wird :o)

So hab ich mir das gedanklich vorgestellt. War ja froh das dass Skript aus dem Technet zum laufen gebracht wurde.
Das ist jetzt die SUPER Version von diesem Ding. :o)
Member: Pago159
Pago159 Dec 02, 2014 at 09:24:59 (UTC)
Goto Top
Hallo colinardo, danke schon mal für die Hilfe.

Leider läuft das Script bei mir in den ErrorHandler mit folgender Meldung:

Beim Anlegen des Druckers/Ports ist ein Fehler aufgetreten:
\\printserver\ROOT\cimv2:Win32_TCPIPPrinterPort.Name="IP_IP-Adresse"
Ausnahme beim Aufruf von "Put" mit 0 Argument(en): "Allgemeiner Fehler"

Kann es sein, dass das Script für ein x64 System andere Klassen benutzt um den Port zu erstellen?
Member: colinardo
colinardo Dec 02, 2014 updated at 09:28:01 (UTC)
Goto Top
Zitat von @Pago159:
Leider läuft das Script bei mir in den ErrorHandler mit folgender Meldung:

Beim Anlegen des Druckers/Ports ist ein Fehler aufgetreten:
\\printserver\ROOT\cimv2:Win32_TCPIPPrinterPort.Name="IP_IP-Adresse"
Ausnahme beim Aufruf von "Put" mit 0 Argument(en): "Allgemeiner Fehler"

Kann es sein, dass das Script für ein x64 System andere Klassen benutzt um den Port zu erstellen?
Nein, sehr wahrscheinlich hast du den Druckertreiber auf dem Printserver noch nicht installiert. Dieser Fall ließe sich ebenfalls noch mit einbinden:
http://www.adminarsenal.com/admin-arsenal-blog/how-to-add-printers-with ...

Lass ich dir mal als Hausaufgabe face-wink

Grüße Uwe
Member: Pago159
Pago159 Dec 04, 2014 updated at 14:02:34 (UTC)
Goto Top
OK, das mit den Treibern wird erst mal hinten angestellt, da ich dort dann Schleifen einbinden müsste, dafür bin ich nicht so gut geeignet.
Ich Teste jetzt gerade mit dem löschen von Druckerobjekten und habe noch einen Button "Löschen" eingebunden, über den dann folgender Schnipsel aufgerufen wird:

#delete printer instance
	$p = Get-WmiObject -Class Win32_printer -ComputerName $printserver -namespace "root\CIMV2" -filter "Sharename='$txtPrintername.Text'"  
        $p.delete()

Bei der Ausführung erhalte ich allerdings folgenden Fehler:
Bein löschen des Druckers/Ports ist ein Fehler aufgetreten:
Sie können keine Methode für einen Ausdruck mit dem Wert NULL aufrufen.

Get-WmiObject : Ungültige Klasse
Bei \\PfadzurDate\deletePrinter.ps1:48 Zeichen:21
$p = Get-WmiObject <<<< -Class Win32_printer -Computername $printserver -namespace "root\CIMV2" -filter "Sharename='$txtPrintername.Text'"
(+) CategoryInfo: InvalidOperation: (: ) [Get-WmiObject], ManagementException
(+) FullyQUalifiedErrorId: GetWMIManagementException, Microsoft.PowerShell.Commands.GetWmiObjectCommand
Member: colinardo
colinardo Dec 04, 2014 updated at 14:45:42 (UTC)
Goto Top
die Angabe im WMI-Filter geht so nicht mit Angabe einer Property von einem Objekt ...
# delete printer instance
$sharename = $txtPrintername.Text
Get-WmiObject Win32_Printer -ComputerName $printserver -filter "Sharename='$sharename'" | %{$_.Delete()}  
Member: Pago159
Pago159 Dec 05, 2014 updated at 08:12:14 (UTC)
Goto Top
Danke colinardo für die schnelle Hilfe, ich merke immer wieder dass ich noch sehr viel zu lernen habe.

Allerdings habe ich noch ein weiteres Problem, was meine Skriptausführung behindert.

Der start des Skriptes erfolgt auf einem Win7 Client inkl. SP und allen Patches.
Server1 ist ein W2K8 R2
Server2 ist ein W2k8 R2

Beide Server haben den selben Patch stand.

Auf Server1 liefert die Abfrage "Get-WmiObject Win32_Printer" alle installierten Drucker.
Auf Server2 liefert die Abfrage "Get-WmiObject Win32_Printer" allerdings die Fehlermeldung, dass die WMI KLasse nicht gefunden werden kann.

Die Abfrage "Get-WmiObject -List -Namespace root\cimv2 -class *print* liefert auf Server1 folgende Liste:
<List>
Win32_PrinterConfiguration
Win32_PrinterSetting
Win32_Printrob
CIM_Printer
Win32_Printer
Win32_PrinterDriver
Win32_TCPIPPrinterPort
Win32_PrinterShare
Win32_PrinterDriverDll
Win32_PrinterController
</List>
Die Abfrage "Get-WmiObject -List -Namespace root\cimv2 -class *print* liefert auf Server2 folgende Liste:
<List>
Win32_PrinterConfiguration
Win32_PrinterSetting
Win32_PrintJob
CIM_Printer

Win32_PrinterDriver
Win32_TCPIPPrinterPort
Win32_PrinterShare
Win32_PrinterDriverDll
Win32_PrinterController
</List>
Member: colinardo
colinardo Dec 05, 2014 updated at 08:10:01 (UTC)
Goto Top
Zitat von @Pago159:
Auf Server2 liefert die Abfrage "Get-WmiObject Win32_Printer" allerdings die Fehlermeldung, dass die WMI KLasse nicht gefunden werden kann.
Dann hat's auf diesem Server sehr wahrscheinlich das WMI Repository zerschossen, oder eine der benötigten DLLs ist nicht mehr richtig registriert.
Hier findest du ein Script um das zu fixen:
https://social.technet.microsoft.com/Forums/windowsserver/en-US/68310b21 ...

Grüße Uwe
Member: Pago159
Pago159 Dec 05, 2014 at 11:15:11 (UTC)
Goto Top
Hallo colinardo,

kann es sein, dass dieses Code-Schnipsel die Win32_Printer Klasse löscht, anstatt dem Druckerobjekt?
# delete printer instance
$sharename = $txtPrintername.Text
Get-WmiObject Win32_Printer -ComputerName $printserver -filter "Sharename='$sharename'" | %{$_.Delete()}  
Member: Pago159
Pago159 Dec 05, 2014 at 11:16:03 (UTC)
Goto Top
Ich habe das ganze jetzt mal noch auf einem anderen Server getestet, bei dem die Abfragen vorher geklappt haben, nach dem Löschversuch allerdings war die Klasse weg und es konnte keine Abfrage mehr erstellt werden.
Member: colinardo
colinardo Dec 05, 2014 updated at 11:56:35 (UTC)
Goto Top
Zitat von @Pago159:
kann es sein, dass dieses Code-Schnipsel die Win32_Printer Klasse löscht, anstatt dem Druckerobjekt?
Hallo Pago,
das wäre mit absolut neu, kann ich hier auch testweise nicht bestätigen. Da stimmt an deinem Script irgendwas nicht.
Member: Pago159
Pago159 Dec 05, 2014 at 12:46:30 (UTC)
Goto Top
Ich habe das ganze jetzt mal ein bisschen weiter angepasst,
das Löschen von Druckern funktioniert auch, leider habe ich es noch nicht hin bekommen, den TCPIPPrinterPort zu löschen.

function GenerateForm {

#region Import the Assemblies
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null  
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null  
#endregion

#region Generated Form Objects
$form1 = New-Object System.Windows.Forms.Form
$txtPrinterPort = New-Object System.Windows.Forms.NumericUpDown
$label7 = New-Object System.Windows.Forms.Label
$comboPrintServer = New-Object System.Windows.Forms.ComboBox
$btnCancel = New-Object System.Windows.Forms.Button
$btnOK = New-Object System.Windows.Forms.Button
$btnDel = New-Object System.Windows.Forms.Button
$label6 = New-Object System.Windows.Forms.Label
$txtPrinterComment = New-Object System.Windows.Forms.TextBox
$txtPrinterLocation = New-Object System.Windows.Forms.TextBox
$label4 = New-Object System.Windows.Forms.Label
$lbPrinterType = New-Object System.Windows.Forms.ListBox
$txtPrinterIP = New-Object System.Windows.Forms.TextBox
$txtPrintername = New-Object System.Windows.Forms.TextBox
$label3 = New-Object System.Windows.Forms.Label
$label2 = New-Object System.Windows.Forms.Label
$label1 = New-Object System.Windows.Forms.Label
$label5 = New-Object System.Windows.Forms.Label
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects

#----------------------------------------------
# Event Script Blocks
#----------------------------------------------

# Pfad zur Logdatei (Pfad und Datei müssen existieren)
$logfile = "C:\Logs\AddPrinter\logfile.log"  

$deletePrinter = {
	Try{
		$printserver = $comboPrintServer.Text
        $portname = "IP_$($txtPrinterIP.Text)"  
		
		# delete printer Port (nicht lauffähig, daher auskommentiert)
		
		#$name = $txtPrinterIP.Text
		#$DelPort = Get-WMIObject -computer $printserver -query "Select * From Win32_TCPIPPrinterPort Where HostAdress = '$name'"  
		#$DelPort.delete()
		
		
		# delete printer instance (Printerport "TCP/IP" bleibt weiter bestehen)  
		$sharename = $txtPrintername.Text
        $DelPrinter = Get-WMIObject -computer $printserver -query "Select * From Win32_Printer Where Name = '$sharename'"  
		$DelPrinter.delete()
		
        return $true
		}catch{
        return $_.Exception.Message
			  }

				} 

				$handler_btnDel_Click = {
    
    # Drucker löschen
    $result = &$deletePrinter
    
    # wenn erfolgreich gelöscht ...
    $logtext = ""  
    if ($result -eq $true){
        $logtext = @"  
-------- $(get-date -Format "g") ---------- Drucker wurde auf dem Printserver '$($comboPrintServer.Text)' gelöscht: --------------  
Druckername: $($txtPrintername.Text)
IP-Adresse: $($txtPrinterIP.Text)
Port: $($txtPrinterPort.Value)
Treiber: $($lbPrinterType.SelectedItem)
Standort: $($txtPrinterLocation.Text)
Kommentar: $($txtPrinterComment.Text)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Der Drucker $txtPrintername wurde auf dem Printserver $($comboPrintServer.Text) gelöscht.")  
    }else{
    # wenn Fehler beim löschen...
        $logtext = @"  
-------- $(get-date -Format "g") ---------- !!! ACHTUNG FEHLER !! beim löschen des Druckers auf Printserver '$($comboPrintServer.Text)': --------------  
Druckername: $($txtPrintername.Text)
IP-Adresse: $($txtPrinterIP.Text)
Port: $($txtPrinterPort.Value)
Treiber: $($lbPrinterType.SelectedItem)
Standort: $($txtPrinterLocation.Text)
Kommentar: $($txtPrinterComment.Text)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Beim löschen des Druckers/Ports ist ein Fehler aufgetreten: $result")  
    }
    # Add-Content "logfile.log" $logtext -Force  
    Add-Content "$logfile" $logtext -Force  
}
$createPrinter = {

    Try{
        $printserver = $comboPrintServer.Text
        $portname = "IP_$($txtPrinterIP.Text)"  
    
        # create printer port
        $wmi = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_TCPIPPrinterPort")  
        $wmi.psbase.scope.options.enablePrivileges = $true
        $port = $wmi.CreateInstance()
        $port.Name = $portname
        $port.Protocol = 1 
        $port.Portnumber = $txtPrinterPort.Text 
        $port.HostAddress = $txtPrinterIP.Text
        $port.SNMPEnabled = $False
        $port.put()

        #create printer instance
        $print = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_Printer").createInstance()   
        $print.Drivername = $lbPrinterType.SelectedItem
        $print.PortName = $portname
        $print.Shared = $true
        $print.Published = $true
        $print.Sharename = $txtPrintername.Text
        $print.Location = $txtPrinterLocation.Text
        $print.Comment = $txtPrinterComment.Text
        $print.DeviceID = $txtPrintername.Text
        $print.put()
        return $true
     }catch{
        return $_.Exception.Message
     }

} 


$handler_btnOK_Click = {
    
    # Drucker erstellen
    $result = &$createPrinter
    
    # wenn erfolgreich erstellt...
    $logtext = ""  
    if ($result -eq $true){
        $logtext = @"  
-------- $(get-date -Format "g") ---------- Drucker auf Printserver '$($comboPrintServer.Text)' hinzugefügt: --------------  
Druckername: $($txtPrintername.Text)
IP-Adresse: $($txtPrinterIP.Text)
Port: $($txtPrinterPort.Value)
Treiber: $($lbPrinterType.SelectedItem)
Standort: $($txtPrinterLocation.Text)
Kommentar: $($txtPrinterComment.Text)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Der Drucker $txtPrintername wurde auf dem Printserver $($comboPrintServer.Text) angelegt.")  
    }else{
    # wenn Fehler beim erstellen...
        $logtext = @"  
-------- $(get-date -Format "g") ---------- !!! ACHTUNG FEHLER !! beim hinzufügen des Druckers auf Printserver '$($comboPrintServer.Text)': --------------  
Druckername: $($txtPrintername.Text)
IP-Adresse: $($txtPrinterIP.Text)
Port: $($txtPrinterPort.Value)
Treiber: $($lbPrinterType.SelectedItem)
Standort: $($txtPrinterLocation.Text)
Kommentar: $($txtPrinterComment.Text)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Beim Anlegen des Druckers/Ports ist ein Fehler aufgetreten: $result")  
    }
    # Add-Content "logfile.log" $logtext -Force  
    Add-Content "$logfile" $logtext -Force  
}

$handler_btnCancel_Click = {
    $form1.Close()
}

$handler_form1_Load = {

    # add printer drivers to List (must be exist on Printserver with this name)
    $lbPrinterType.Items.AddRange(@(
        #"HP Color LaserJet 3505",  
        #"HP Color LaserJet 3800",  
        "HP LaserJet 1320 PCL 6",  
	"HP Universal Printing PCL 6",  
        "Lexmark MS510 Series XL"  
        "Lexmark C734 XL",  
        "Lexmark E360dn XL",  
        "Lexmark E460dn XL",  
        "Lexmark T650",  
        "Lexmark X544 XL",  
	"Lexmark Universal v2 XL",   
        "NRG 2205/2238/2212 PCL 6",  
        "NRG 6002/6005/6008 PCL6",  
        "NRG MP 2550 PCL6",  
        "RICOH Aficio 3045 PCL 6",  
	"RICOH Aficio MP 4500 PCL 5e",  
        "Ricoh Aficio MP 5500 PCL",  
        "RICOH Aficio MP 7500 PCL 6"   
    ))

    # add printservers (EIGENE SERVER MÜSSEN EINGETRAGEN WERDEN)
    $comboPrintServer.Items.AddRange(@(
         ".",  
        "Server01",  
        "Server02",  
        "Server03"  
		
    ))
    $comboPrintServer.SelectedIndex = 0
}

$OnLoadForm_StateCorrection=
{#Correct the initial state of the form to prevent the .Net maximized form issue
	$form1.WindowState = $InitialFormWindowState
}
#----------------------------------------------
#region Generated Form Code
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 472
$System_Drawing_Size.Width = 274
$form1.ClientSize = $System_Drawing_Size
$form1.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 500
$System_Drawing_Size.Width = 282
$form1.MinimumSize = $System_Drawing_Size
$form1.Name = "form1"  
$form1.Text = "PrinterAdd - Script"  
$form1.add_Load($handler_form1_Load)

$txtPrinterPort.Anchor = 9
$txtPrinterPort.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 186
$System_Drawing_Point.Y = 75
$txtPrinterPort.Location = $System_Drawing_Point
$txtPrinterPort.Maximum = 65536
$txtPrinterPort.Minimum = 1
$txtPrinterPort.Name = "txtPrinterPort"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 76
$txtPrinterPort.Size = $System_Drawing_Size
$txtPrinterPort.TabIndex = 2
$txtPrinterPort.TextAlign = 2
$txtPrinterPort.Value = 9100

$form1.Controls.Add($txtPrinterPort)

$label7.Anchor = 9
$label7.DataBindings.DefaultDataSourceUpdateMode = 0
$label7.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 186
$System_Drawing_Point.Y = 58
$label7.Location = $System_Drawing_Point
$label7.Name = "label7"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 59
$label7.Size = $System_Drawing_Size
$label7.TabIndex = 11
$label7.Text = "Port"  

$form1.Controls.Add($label7)

$comboPrintServer.Anchor = 14
$comboPrintServer.DataBindings.DefaultDataSourceUpdateMode = 0
$comboPrintServer.FormattingEnabled = $True
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 391
$comboPrintServer.Location = $System_Drawing_Point
$comboPrintServer.Name = "comboPrintServer"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 21
$System_Drawing_Size.Width = 249
$comboPrintServer.Size = $System_Drawing_Size
$comboPrintServer.TabIndex = 6

$form1.Controls.Add($comboPrintServer)

$btnCancel.Anchor = 10

$btnCancel.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 186
$System_Drawing_Point.Y = 437
$btnCancel.Location = $System_Drawing_Point
$btnCancel.Name = "btnCancel"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnCancel.Size = $System_Drawing_Size
$btnCancel.TabIndex = 8
$btnCancel.Text = "Abbrechen"  
$btnCancel.UseVisualStyleBackColor = $True
$btnCancel.add_Click($handler_btnCancel_Click)

$form1.Controls.Add($btnCancel)


$btnOK.Anchor = 10

$btnOK.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 105
$System_Drawing_Point.Y = 437
$btnOK.Location = $System_Drawing_Point
$btnOK.Name = "btnOK"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnOK.Size = $System_Drawing_Size
$btnOK.TabIndex = 7
$btnOK.Text = "Erstellen"  
$btnOK.UseVisualStyleBackColor = $True
$btnOK.add_Click($handler_btnOK_Click)

$form1.Controls.Add($btnOK)

$btnDel.Anchor = 10


$btnDel.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 25
$System_Drawing_Point.Y = 437
$btnDel.Location = $System_Drawing_Point
$btnDel.Name = "btnDel"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnDel.Size = $System_Drawing_Size
$btnDel.TabIndex = 11
$btnDel.Text = "Löschen"  
$btnDel.UseVisualStyleBackColor = $True
$btnDel.add_Click($handler_btnDel_Click)

$form1.Controls.Add($btnDel)


$label6.Anchor = 6
$label6.DataBindings.DefaultDataSourceUpdateMode = 0
$label6.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 368
$label6.Location = $System_Drawing_Point
$label6.Name = "label6"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 250
$label6.Size = $System_Drawing_Size
$label6.TabIndex = 10
$label6.Text = "Erstellen auf folgendem PrintServer"  

$form1.Controls.Add($label6)


$txtPrinterComment.Anchor = 14
$txtPrinterComment.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 339
$txtPrinterComment.Location = $System_Drawing_Point
$txtPrinterComment.Name = "txtPrinterComment"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 250
$txtPrinterComment.Size = $System_Drawing_Size
$txtPrinterComment.TabIndex = 5

$form1.Controls.Add($txtPrinterComment)


$txtPrinterLocation.Anchor = 14
$txtPrinterLocation.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 294
$txtPrinterLocation.Location = $System_Drawing_Point
$txtPrinterLocation.Name = "txtPrinterLocation"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 251
$txtPrinterLocation.Size = $System_Drawing_Size
$txtPrinterLocation.TabIndex = 4

$form1.Controls.Add($txtPrinterLocation)


$label4.Anchor = 6
$label4.DataBindings.DefaultDataSourceUpdateMode = 0
$label4.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 275
$label4.Location = $System_Drawing_Point
$label4.Name = "label4"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 169
$label4.Size = $System_Drawing_Size
$label4.TabIndex = 6
$label4.Text = "Standort"  

$form1.Controls.Add($label4)


$lbPrinterType.Anchor = 15
$lbPrinterType.DataBindings.DefaultDataSourceUpdateMode = 0
$lbPrinterType.FormattingEnabled = $True
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 133
$lbPrinterType.Location = $System_Drawing_Point
$lbPrinterType.Name = "lbPrinterType"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 121
$System_Drawing_Size.Width = 250
$lbPrinterType.Size = $System_Drawing_Size
$lbPrinterType.TabIndex = 3

$form1.Controls.Add($lbPrinterType)


$txtPrinterIP.Anchor = 13
$txtPrinterIP.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 75
$txtPrinterIP.Location = $System_Drawing_Point
$txtPrinterIP.Name = "txtPrinterIP"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 168
$txtPrinterIP.Size = $System_Drawing_Size
$txtPrinterIP.TabIndex = 1

$form1.Controls.Add($txtPrinterIP)


$txtPrintername.Anchor = 13
$txtPrintername.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 26
$txtPrintername.Location = $System_Drawing_Point
$txtPrintername.Name = "txtPrintername"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 20
$System_Drawing_Size.Width = 250
$txtPrintername.Size = $System_Drawing_Size
$txtPrintername.TabIndex = 0

$form1.Controls.Add($txtPrintername)


$label3.DataBindings.DefaultDataSourceUpdateMode = 0
$label3.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 107
$label3.Location = $System_Drawing_Point
$label3.Name = "label3"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 100
$label3.Size = $System_Drawing_Size
$label3.TabIndex = 2
$label3.Text = "Druckertyp"  

$form1.Controls.Add($label3)


$label2.DataBindings.DefaultDataSourceUpdateMode = 0
$label2.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 58
$label2.Location = $System_Drawing_Point
$label2.Name = "label2"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 100
$label2.Size = $System_Drawing_Size
$label2.TabIndex = 1
$label2.Text = "IP-Adresse"  

$form1.Controls.Add($label2)


$label1.DataBindings.DefaultDataSourceUpdateMode = 0
$label1.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 9
$label1.Location = $System_Drawing_Point
$label1.Name = "label1"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 100
$label1.Size = $System_Drawing_Size
$label1.TabIndex = 0
$label1.Text = "Druckername"  

$form1.Controls.Add($label1)


$label5.Anchor = 6
$label5.DataBindings.DefaultDataSourceUpdateMode = 0
$label5.Font = New-Object System.Drawing.Font("Microsoft Sans Serif",8.25,1,3,0)  

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 11
$System_Drawing_Point.Y = 321
$label5.Location = $System_Drawing_Point
$label5.Name = "label5"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 169
$label5.Size = $System_Drawing_Size
$label5.TabIndex = 9
$label5.Text = "Kommentar"  

$form1.Controls.Add($label5)

#endregion Generated Form Code

#Save the initial state of the form
$InitialFormWindowState = $form1.WindowState
#Init the OnLoad event to correct the initial state of the form
$form1.add_Load($OnLoadForm_StateCorrection)
#Show the Form
$form1.ShowDialog()| Out-Null

} #End Function

#Call the Function
GenerateForm
Member: colinardo
colinardo Dec 05, 2014 updated at 13:06:55 (UTC)
Goto Top
Erstens verwendest du die falsche Variable im Filter für den Printerport und zweitens kannst du einen Port erst löschen wenn kein Drucker den Port mehr benutzt, du musst den Drucker also vor dem Port löschen face-wink
gwmi Win32_TCPIPPrinterPort -computer $printserver -Filter "HostAddress = '$name'" | %{$_.Delete()}
Member: Pago159
Pago159 Dec 05, 2014 at 13:03:55 (UTC)
Goto Top
Ok, dass der Port erst nach dem Drucker gelöscht werden kann ist logisch.
Aber wieso nutze ich die falsche Variable?

#$name = $txtPrinterIP.Text 
#$DelPort = Get-WMIObject -computer $printserver -query "Select * From Win32_TCPIPPrinterPort Where HostAdress = '$name'"  
#$DelPort.delete() 

Ich setze doch erst die IP-Adresse in die Variable "$name" dann rufe ich das WMIObject auf und suche nach der HostAdress mit dem Ihnalt meiner Variblen $name.

Oder verstehe ich meinen Code falsch?
Member: colinardo
colinardo Dec 05, 2014 updated at 13:07:41 (UTC)
Goto Top
OK sorry da lag ich falsch, hatte ich übersehen, aber du hast die Variable ja auch auskommentiert:
#$name = $txtPrinterIP.Text 
Member: Pago159
Pago159 Dec 05, 2014 at 13:14:44 (UTC)
Goto Top
Oh mist, das habe ich übersehen face-wink

Habe es gerade noch einmal getestet und als Ergebnis folgendes bekommen:

Beim löschen des Druckers/Ports ist ein Fehler aufgetreten:
Ausnahme beim Aufruf von "Delete" mit 0 Argument8en): "Allgemeiner Fehler"

$deletePrinter = {
	Try{
	$printserver = $comboPrintServer.Text
        $portname = "IP_$($txtPrinterIP.Text)"  
		
		
		# delete printer instance (Printerport bleibt weiter bestehen)
		$sharename = $txtPrintername.Text
                $DelPrinter = Get-WMIObject -computer $printserver -query "Select * From Win32_Printer Where Name = '$sharename'"  
		$DelPrinter.delete()
		
		# delete printer Port (nicht lauffähig, daher auskommentiert)
		
		$name = $txtPrinterIP.Text
		$DelPort = Get-WMIObject -computer $printserver -query "Select * From Win32_TCPIPPrinterPort Where HostAddress = '$name'"  
		$DelPort.delete()
		
Member: colinardo
colinardo Dec 05, 2014 updated at 13:19:27 (UTC)
Goto Top
Ausnahme beim Aufruf von "Delete" mit 0 Argument8en): "Allgemeiner Fehler"
das ist genau der Fehler wenn der Port noch nicht gelöscht werden kann weil er noch in Verwendung ist, dann musst du eventuell eine kleine Pause zwischen den Vorgängen einbauen
sleep 1

und nutze meine Zeile von oben, dann kommt kein Fehler wenn der Port schon nicht mehr existiert:
gwmi Win32_TCPIPPrinterPort -computer $printserver -Filter "HostAddress = '$name'" | %{$_.Delete()}

p.s. können wir den Thread jetzt bitte schließen, das eigentliche Thema ist ja erledigt.