pago159
Goto Top

Löschen mehrerer Drucker über WMI sehr langsam, weshalb?

Hallo noch mal,
ich bin derzeit noch dabei das Script für die Drucker Erstellung und Bereinigung zu Optimieren.
Die Funktionen an für sich funktionieren alle, nur dass das Löschen mehrerer Drucker (ca. 130 stk.) mit unter ca. 3 Std. dauert.
Das Anlegen selbiger hingegen dauert gerade mal 15 Minuten auf ein und dem selben Server (W2k8r2).
Die CSV-Datei zum erstellen und löschen ist derzeit identisch, da es bei den Tests immer die selben Drucker betrifft, die erst erstellt und anschließend gelöscht werden.
Betroffene Funktion: " $handler_btnDelCsv_Click"
Was läuft hier schief, dass die verarbeitung so lange dauert?

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
$btnList = New-Object System.Windows.Forms.Button
$btnExp = New-Object System.Windows.Forms.Button
$btnImp = New-Object System.Windows.Forms.Button
$btnDelCsv = 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
#----------------------------------------------

# Pfade, die evtl. verändert werden müssen. Log Pfade und Dateien müssen bereits existieren.
$logfile = "C:\Logs\AddPrinter\logfile.log"  
$Importlogfile = "C:\Logs\AddPrinter\ImportLogfile.log"  
$import = "C:\Logs\AddPrinter\import.txt"  
$DelCSV = "C:\Logs\AddPrinter\delete.txt"  
$path = "C:\Logs\AddPrinter"  
$date = Get-Date -f yyyy-MM-dd_
$extension = ".csv"  
$Dellogfile = "C:\Logs\AddPrinter\DeleteLogfile.log"  

$deletePrinter = { #Drucker anhand des ausgefüllten Formulars löschen!!!___________________________________________________________________________________________________________Anfang
	Try{
		$printserver = $comboPrintServer.Text		
		
		# delete printer instance (Printerport bleibt weiter bestehen)
		$sharename = $txtPrintername.Text
        gwmi Win32_Printer -computer $printserver -Filter "Name = '$sharename'" | %{$_.Delete()}  
		
		# delete printer Port (eine Wartezeit von 15 Sekunden wurde eingebaut, damit der Port gelöscht werden kann)
		sleep 15
		$name = $txtPrinterIP.Text
		gwmi Win32_TCPIPPrinterPort -computer $printserver -Filter "HostAddress = '$name'" | %{$_.Delete()}		  
		
        return $true
		}catch{
        return $_.Exception.Message
			  }

				} #Drucker anhand des ausgefüllten Formulars löschen!!!___________________________________________________________________________________________________________Ende

$handler_btnDel_Click = { #Aktion beim Klick auf Löschen inkl. Fehlermeldung
    
    # 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)
Systemmeldung: $($result)
"@  
        [System.Windows.Forms.MessageBox]::Show("Der Drucker $txtPrintername wurde auf dem Printserver $($comboPrintServer.Text) gelöscht.")  
    }else{
    # wenn Fehler beim löschen (Fehlermeldung wird mit Dokumentiert)...
        $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)
Systemmeldung: $($result)
$("-"*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 = { #Drucker anhand des ausgefüllten Formulars erstellen!!!___________________________________________________________________________________________________________Anfang

    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
     }

} #Drucker anhand des ausgefüllten Formulars erstellen!!!___________________________________________________________________________________________________________Ende

$handler_btnList_Click = {
	$result = &$PrinterOnServer }

$PrinterOnServer = { # Auflisten der Drucker auf dem Server inkl. Port des ausgewählten Printserver_______________________________________________Anfang

$printserver = $comboPrintServer.Text

Get-WmiObject -Class Win32_Printer -computername $printserver | select drivername, portname, sharename, location, comment | Out-GridView

} # Auflisten der Drucker auf dem Server inkl. Port des ausgewählten Printserver_______________________________________________Ende

$handler_btnExp_Click = { 
$printserver = $comboPrintServer.Text
    $result = &$ExportPrinter 
 if ($result -eq $true){
       
        [System.Windows.Forms.MessageBox]::Show("Die Datei ist unter folgendem Pfad zu finden: $path\$date$printserver$extension")  
    }else{
    # wenn Fehler beim erstellen (Fehlermeldung wird mit Dokumentiert)...
        
        [System.Windows.Forms.MessageBox]::Show("$result")  
    }
   # Export der Drucker in eine CSV-Datei
}

$ExportPrinter = { # Export der Drucker auf dem Server inkl. Port des ausgewählten Printserver in eine CSV-Datei_______________________________________________Anfang
Try{


Get-WmiObject -Class Win32_Printer -computername $printserver | select drivername, portname, sharename, location, comment | export-csv $path\$date$printserver$extension -NoTypeInformation -Delimiter ";" -Encoding "ASCII" -noclobber  

 return $true #$path $date $printserver $extension
     }catch{
        return $_.Exception.Message
     }
   } 

$handler_btnImp_Click = { 
	$printserver = $comboPrintServer.Text
     # Drucker erstellen
     $result = &$ImportPrinter
    
    # wenn erfolgreich erstellt ...
    $logtext = ""  
    if ($result -eq $true){
        $logtext = @"  
-------- $(get-date -Format "g") ---------- Die Drucker wurden auf dem Printserver '$($comboPrintServer.Text)' erstellt: --------------  
Druckername: $($global:sharename)
IP-Adresse: $($global:RAWportname)
Port: $($global:portname)
Treiber: $($global:drivername)
Standort: $($global:location)
Kommentar: $($global:comment)
Systemmeldung: $($result)
"@  
        [System.Windows.Forms.MessageBox]::Show("Die Drucker wurden auf dem Printserver $($comboPrintServer.Text) erstellt. $result")  
    }else{
    # wenn Fehler beim erstellen (Fehlermeldung wird mit Dokumentiert)...
        $logtext = @"  
-------- $(get-date -Format "g") ---------- !!! ACHTUNG FEHLER !! beim erstellen der Druckers auf Printserver '$($comboPrintServer.Text) ist ein Fehler aufgetreten': --------------  
Druckername: $(global:$sharename)
IP-Adresse: $($global:RAWportname)
Port: $($global:portname)
Treiber: $($global:drivername)
Standort: $($global:location)
Kommentar: $($global:comment)
Systemmeldung: $($result)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Beim erstellen des Druckers/Ports ist ein Fehler aufgetreten: $result")  
    }
    # Add-Content "logfile.log" $logtext -Force 
    Add-Content "$Importlogfile" $logtext -Force  
}
 
$handler_btnDelCsv_Click = { 
   
	$printserver = $comboPrintServer.Text
     # Drucker erstellen
     $result = &$DeletePrinterCSV
	 $result = &$DeletePortCSV
    
    # wenn erfolgreich erstellt ...
    $logtext = ""  
    if ($result -eq $true){
	$printers = Import-Csv $DelCSV –Delimiter ';'  
        $logtext = @"  
-------- $(get-date -Format "g") ---------- Die Drucker wurden auf dem Printserver '$($comboPrintServer.Text)' gelöscht: --------------  
Druckername: $($global:sharename)
IP-Adresse: $($global:RAWportname)
Port: $($global:portname)
Treiber: $($global:drivername)
Standort: $($global:location)
Kommentar: $($global:comment)
Systemmeldung: $($result)
"@  
        [System.Windows.Forms.MessageBox]::Show("Die Drucker wurden auf dem Printserver $($comboPrintServer.Text) gelöscht: $result")  
		 }else{
    # wenn Fehler beim erstellen (Fehlermeldung wird mit Dokumentiert)...
        $logtext = @"  
-------- $(get-date -Format "g") ---------- !!! ACHTUNG FEHLER !! beim löschen der Druckers auf Printserver '$($comboPrintServer.Text) ist ein Fehler aufgetreten': --------------  
Druckername: $($global:sharename)
IP-Adresse: $($global:RAWportname)
Port: $($global:portname)
Treiber: $($global:drivername)
Standort: $($global:location)
Kommentar: $($global:comment)
Systemmeldung: $($result)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Beim löschen der Drucker/Ports ist ein Fehler aufgetreten. Bitte Prüfen Sie, welche Drucker fehlen!!!: $result")  
    }
    # Add-Content "logfile.log" $logtext -Force 
    Add-Content "$Dellogfile" $logtext -Force  
} 
 
$DeletePrinterCSV = { #Drucker anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Anfang
     $global:printers = Import-Csv $DelCSV –Delimiter ';'   

    foreach ($printer in $global:printers){

        $global:sharename = $printer.sharename

		 Try{
		$printserver = $comboPrintServer.Text		
		
		# delete printer instance (Printerport bleibt weiter bestehen)
		$sharename = $global:sharename
        gwmi Win32_Printer -computer $printserver -Filter "Name = '$sharename'" | %{$_.Delete()}  
		
		# delete printer Port (eine Wartezeit von 15 Sekunden wurde eingebaut, damit der Port gelöscht werden kann)
		#sleep 15
		#$name = $global:RAWportname
		#gwmi Win32_TCPIPPrinterPort -computer $printserver -Filter "HostAddress = '$name'" | %{$_.Delete()}		 
		
        
		}catch{
			return $_.Exception.Message
			  }
			  }
			# return true 

				} #Drucker anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Ende

$DeletePortCSV = { #DruckerPort anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Anfang
     $global:printers = Import-Csv $DelCSV –Delimiter ';'   

    foreach ($printer in $global:printers){

        $global:RAWportname = $printer.portname

		 Try{
		$printserver = $comboPrintServer.Text		
		
		# delete printer instance (Printerport bleibt weiter bestehen)
		#$sharename = $global:sharename
        #gwmi Win32_Printer -computer $printserver -Filter "Name = '$sharename'" | %{$_.Delete()} 
		
		# delete printer Port (eine Wartezeit von 15 Sekunden wurde eingebaut, damit der Port gelöscht werden kann)
		
		$name = $global:RAWportname
		gwmi Win32_TCPIPPrinterPort -computer $printserver -Filter "HostAddress = '$name'" | %{$_.Delete()}		  
		
        
		}catch{
			return $_.Exception.Message
			  }
			  }
return $true
				} #DruckerPort anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Ende	
				
$ImportPrinter = {
    $global:printers = Import-Csv $import –Delimiter ';'   

    foreach ($printer in $global:printers){

        $global:drivername = $printer.drivername
        $global:RAWportname = $printer.portname
        $global:sharename = $printer.sharename
        $global:location = $printer.location
        $global:comment = $printer.comment

        Try{
            $printserver = $comboPrintServer.Text
            $global:portname = "IP_$($RAWportname)"  
    
            # 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.HostAddress = $RAWportname
            $port.SNMPEnabled = $False
            $port.put()

            #create printer instance
            $print = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_Printer").createInstance()   
            $print.Drivername = $drivername
            $print.PortName = $portname
            $print.Shared = $true
            $print.Published = $true
            $print.Sharename = $sharename
            $print.Location = $location
            $print.Comment = $comment
            $print.DeviceID = $sharename
            $print.put()
           # return $true
         }catch{
            return $_.Exception.Message
    }
    }
    return $true
}
  
$handler_btnOK_Click = { #inkl. Fehlermeldung
    
    # 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)
Systemmeldung: $($result)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Der Drucker $txtPrintername wurde auf dem Printserver $($comboPrintServer.Text) angelegt.")  
    }else{
    # wenn Fehler beim erstellen (Fehlermeldung wird mit Dokumentiert)...
        $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)
Systemmeldung: $($result)
$("-"*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)
	# Drucker zum DropDownMenü hinzufügen (Treiber muss in exakter Schreibweise auf dem Printserver vorhanden sein)
	
    $lbPrinterType.Items.AddRange(@(
           "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
	# Hier können Druckserver mit aufgenommen oder gelöscht werden
    $comboPrintServer.Items.AddRange(@(
        "PRINT01",  
        "print02",  
        "print03",  
        "print04",  
		"print05"  
		
    ))
    $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 = 560
$System_Drawing_Size.Width = 282
$form1.MinimumSize = $System_Drawing_Size
$form1.Name = "form1"  
$form1.Text = "PrinterAdd"  
$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 = 493
$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 = 11
$btnCancel.Text = "Abbrechen"  
$btnCancel.UseVisualStyleBackColor = $True
$btnCancel.add_Click($handler_btnCancel_Click)

$form1.Controls.Add($btnCancel)

$btnDelCsv.Anchor = 10

$btnDelCsv.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 186
$System_Drawing_Point.Y = 465
$btnDelCsv.Location = $System_Drawing_Point
$btnDelCsv.Name = "$btnDelCsv"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnDelCsv.Size = $System_Drawing_Size
$btnDelCsv.TabIndex = 13
$btnDelCsv.Text = "DelFromCSV"  
$btnDelCsv.UseVisualStyleBackColor = $True
$btnDelCsv.add_Click($handler_btnDelCsv_Click)

$form1.Controls.Add($btnDelCsv)


$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 = 8
$btnDel.Text = "Löschen"  
$btnDel.UseVisualStyleBackColor = $True
$btnDel.add_Click($handler_btnDel_Click)

$form1.Controls.Add($btnDel)

$btnList.Anchor = 10

$btnList.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 186
$System_Drawing_Point.Y = 437
$btnList.Location = $System_Drawing_Point
$btnList.Name = "btnList"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnList.Size = $System_Drawing_Size
$btnList.TabIndex = 12
$btnList.Text = "Auflisten"  
$btnList.UseVisualStyleBackColor = $True
$btnList.add_Click($handler_btnList_Click)

$form1.Controls.Add($btnList)

$btnExp.Anchor = 10

$btnExp.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 25
$System_Drawing_Point.Y = 465
$btnExp.Location = $System_Drawing_Point
$btnExp.Name = "btnExp"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnExp.Size = $System_Drawing_Size
$btnExp.TabIndex = 13
$btnExp.Text = "Export_CSV"  
$btnExp.UseVisualStyleBackColor = $True
$btnExp.add_Click($handler_btnExp_Click)

$form1.Controls.Add($btnExp)

$btnImp.Anchor = 10

$btnImp.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 105
$System_Drawing_Point.Y = 465
$btnImp.Location = $System_Drawing_Point
$btnImp.Name = "btnCancel"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnImp.Size = $System_Drawing_Size
$btnImp.TabIndex = 13
$btnImp.Text = "Import_CSV"  
$btnImp.UseVisualStyleBackColor = $True
$btnImp.add_Click($handler_btnImp_Click)

$form1.Controls.Add($btnImp)

$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

Content-ID: 257741

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

Ausgedruckt am: 24.11.2024 um 15:11 Uhr

114757
114757 16.12.2014 aktualisiert um 16:18:36 Uhr
Goto Top
Was läuft hier schief, dass die verarbeitung so lange dauert?
na bei über 800 Zeilen Code, kein Wunder face-big-smile

Benutze WMI Forward-Only-Queries dann läuft's vermutlich schneller ...Google ist dein Freund
http://technet.microsoft.com/en-us/library/ee198934.aspx

Gruß jodel32
Pago159
Pago159 17.12.2014 um 12:24:01 Uhr
Goto Top
Hallo Jodel32,

es kann gut sein, dass die WMI Forward-Only-Queries den Scriptablauf beschleunigen,
allerdings erklärt das nicht den unterschied vom Erstellen zum Löschen von Drucker Elementen.

Erstellen ist innerhalb 15 Minuten durch und
Löschen benötigt ca 180 Minuten

Die Anzahl der Drucker ist ja die selbe und es werden weniger Daten beim löschen abgefragt.
Für mich stellt sich halt die Frage, weshalb das Löschen so viel länger braucht.
114757
114757 17.12.2014 aktualisiert um 12:39:47 Uhr
Goto Top
naja du verplemperst ja auch schon für alle 130 Drucker insgesamt 32 Minuten nur für Sleep's face-wink
130*15/60
Pago159
Pago159 17.12.2014 um 12:52:00 Uhr
Goto Top
Die 15 Sekunden Sleep sind schon längst auskommentiert, da ich dort auch mein Problem gesehen habe face-wink
Dies brachte aber keine wirkliche besserung.
Ich hatte auch schon die Variante getestet, erst die Drucker und anschließend die Ports löschen zu lassen.

$handler_btnDelCsv_Click = { 
   $btnCancel.Text = "Abbrechen"  
	$printserver = $comboPrintServer.Text
     # Drucker erstellen
     $result = &$DeletePrinterCSV
	 $result = &$DeletePortCSV
    
    # wenn erfolgreich erstellt ...
    $logtext = ""  
    if ($result -eq $true){
	$printers = Import-Csv $DelCSV –Delimiter ';'  
        $logtext = @"  
-------- $(get-date -Format "g") ---------- Die Drucker wurden auf dem Printserver '$($comboPrintServer.Text)' gelöscht: --------------  
Druckername: $($global:sharename)
IP-Adresse: $($global:RAWportname)
Port: $($global:portname)
Treiber: $($global:drivername)
Standort: $($global:location)
Kommentar: $($global:comment)
Systemmeldung: $($result)
"@  
        [System.Windows.Forms.MessageBox]::Show("Die Drucker wurden auf dem Printserver $($comboPrintServer.Text) gelöscht: $result")  
		 }else{
    # wenn Fehler beim erstellen (Fehlermeldung wird mit Dokumentiert)...
        $logtext = @"  
-------- $(get-date -Format "g") ---------- !!! ACHTUNG FEHLER !! beim löschen der Druckers auf Printserver '$($comboPrintServer.Text) ist ein Fehler aufgetreten': --------------  
Druckername: $($global:sharename)
IP-Adresse: $($global:RAWportname)
Port: $($global:portname)
Treiber: $($global:drivername)
Standort: $($global:location)
Kommentar: $($global:comment)
Systemmeldung: $($result)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Beim löschen der Drucker/Ports ist ein Fehler aufgetreten. Bitte Prüfen Sie, welche Drucker fehlen!!!: $result")  
    }
    # Add-Content "logfile.log" $logtext -Force 
    Add-Content "$Dellogfile" $logtext -Force  
	$btnCancel.Text = "Close"  
} 


$DeletePrinterCSV = { #Drucker anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Anfang
     $global:printers = Import-Csv $DelCSV –Delimiter ';'   

    foreach ($printer in $global:printers){

        $global:sharename = $printer.sharename

		 Try{
		$printserver = $comboPrintServer.Text		
		
		# delete printer instance (Printerport bleibt weiter bestehen)
		$sharename = $global:sharename
        gwmi Win32_Printer -computer $printserver -Filter "Name = '$sharename'" | %{$_.Delete()}  
		
		# delete printer Port (eine Wartezeit von 15 Sekunden wurde eingebaut, damit der Port gelöscht werden kann)
		#sleep 15
		#$name = $global:RAWportname
		#gwmi Win32_TCPIPPrinterPort -computer $printserver -Filter "HostAddress = '$name'" | %{$_.Delete()}		 
		
        
		}catch{
			return $_.Exception.Message
			  }
			  }
			# return true 

				} #Drucker anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Ende

$DeletePortCSV = { #DruckerPort anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Anfang
     $global:printers = Import-Csv $DelCSV –Delimiter ';'   

    foreach ($printer in $global:printers){

        $global:RAWportname = $printer.portname

		 Try{
		$printserver = $comboPrintServer.Text		
		
		# delete printer instance (Printerport bleibt weiter bestehen)
		#$sharename = $global:sharename
        #gwmi Win32_Printer -computer $printserver -Filter "Name = '$sharename'" | %{$_.Delete()} 
		
		# delete printer Port (eine Wartezeit von 15 Sekunden wurde eingebaut, damit der Port gelöscht werden kann)
		
		$name = $global:RAWportname
		gwmi Win32_TCPIPPrinterPort -computer $printserver -Filter "HostAddress = '$name'" | %{$_.Delete()}		  
		
        
		}catch{
			return $_.Exception.Message
			  }
			  }
return $true
				} #DruckerPort anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Ende	
114757
114757 17.12.2014 um 12:55:08 Uhr
Goto Top
dann check euer Netzwerk und die Prozesse : Wireshark und Processmonitor sind dein Freund ...
Pago159
Pago159 15.01.2015 um 10:05:19 Uhr
Goto Top
Nach dem eine Routine geändert wurde, laufen das Skript in folgender Form auch schnelle:

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
$btnList = New-Object System.Windows.Forms.Button
$btnExp = New-Object System.Windows.Forms.Button
$btnImp = New-Object System.Windows.Forms.Button
$btnDelCsv = New-Object System.Windows.Forms.Button
$btnSpool = 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
$progressBar = New-Object System.Windows.Forms.ProgressBar
$InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
#endregion Generated Form Objects

#Create synchronized Hashtable-Object for communication between sub-thread and form
$syncHash = [hashtable]::Synchronized(@{})
#set the controls in the hashtable we wish to manipulate
$syncHash.progress = $progressBar
# initialize second Powershell runspace
$psCmd = [powershell]::Create()

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

# Pfade, die evtl. verändert werden müssen. Log Pfade und Dateien müssen bereits existieren. (Bitte daran denken, die Server und Treibernamen weiter unten zu ändern!!
$logfile = "C:\Logs\AddPrinter\logfile.log"  
$Importlogfile = "C:\Logs\AddPrinter\ImportLogfile.log"  
$import = "C:\Logs\AddPrinter\import.txt"  
$DelCSV = "C:\Logs\AddPrinter\delete.txt"  
$path = "C:\Logs\AddPrinter"  
$date = Get-Date -f yyyy-MM-dd_
$extension = ".csv"  
$Dellogfile = "C:\Logs\AddPrinter\DeleteLogfile.log"  

$handler_form1_Load = {
    # add printer drivers to List (must be exist on Printserver with this name)
	# Drucker zum DropDownMenü hinzufügen (Treiber muss in exakter Schreibweise auf dem Printserver vorhanden sein)	
    $lbPrinterType.Items.AddRange(@(
        
		"HP Universal Printing PCL 6",  
        "",  
		"Lexmark Universal v2 XL"  
       
    ))

    # add printservers
	# Hier können Druckserver mit aufgenommen oder gelöscht werden
    $comboPrintServer.Items.AddRange(@(
        "Printserver1",  
        "Printserver2"  
       	
    ))
    $comboPrintServer.SelectedIndex = 0
}








$deletePrinter = { #Drucker anhand des ausgefüllten Formulars löschen!!!___________________________________________________________________________________________________________Anfang
	Try{
		$printserver = $comboPrintServer.Text	
		$sharename = $txtPrintername.Text
		$name = $txtPrinterIP.Text		
		# delete printer instance
        gwmi Win32_Printer -computer $printserver -Filter "Name = '$sharename'" | %{$_.Delete()}  
		# delete printer Port (eine Wartezeit von 15 Sekunden wurde eingebaut, damit der Port gelöscht werden kann)
		sleep 15
		gwmi Win32_TCPIPPrinterPort -computer $printserver -Filter "HostAddress = '$name'" | %{$_.Delete()}		  
        return $true
		}catch{
        return $_.Exception.Message
			  }

				} #Drucker anhand des ausgefüllten Formulars löschen!!!___________________________________________________________________________________________________________Ende

$handler_btnDel_Click = { #Aktion beim Klick auf Löschen inkl. Fehlermeldung
   
    # 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)
Systemmeldung: $($result)
"@  
        [System.Windows.Forms.MessageBox]::Show("Der Drucker $txtPrintername wurde auf dem Printserver $($comboPrintServer.Text) gelöscht.")  
    }else{
    # wenn Fehler beim löschen (Fehlermeldung wird mit Dokumentiert)...
        $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)
Systemmeldung: $($result)
$("-"*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 = { #Drucker anhand des ausgefüllten Formulars erstellen!!!___________________________________________________________________________________________________________Anfang
    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
     }

} #Drucker anhand des ausgefüllten Formulars erstellen!!!___________________________________________________________________________________________________________Ende

$handler_btnList_Click = {
$btnCancel.Text = "Abbrechen"  
	$result = &$PrinterOnServer 
	$btnCancel.Text = "Close"}  

$PrinterOnServer = { # Auflisten der Drucker auf dem Server inkl. Port des ausgewählten Printserver_______________________________________________Anfang
$printserver = $comboPrintServer.Text
Get-WmiObject -Class Win32_Printer -computername $printserver | select drivername, portname, sharename, location, comment | Out-GridView
} # Auflisten der Drucker auf dem Server inkl. Port des ausgewählten Printserver_______________________________________________Ende

$handler_btnExp_Click = { 

$printserver = $comboPrintServer.Text
    $result = &$ExportPrinter 
 if ($result -eq $true){
        [System.Windows.Forms.MessageBox]::Show("Die Datei ist unter folgendem Pfad zu finden: $path\$date$printserver$extension")  
    }else{
    # wenn Fehler beim erstellen (Fehlermeldung wird mit Dokumentiert)... 
        [System.Windows.Forms.MessageBox]::Show("$result")  
    }
   # Export der Drucker in eine CSV-Datei
  
}

$ExportPrinter = { # Export der Drucker auf dem Server inkl. Port des ausgewählten Printserver in eine CSV-Datei_______________________________________________Anfang
Try{
Get-WmiObject -Class Win32_Printer -computername $printserver | select drivername, portname, sharename, location, comment | export-csv $path\$date$printserver$extension -NoTypeInformation -Delimiter ";" -Encoding "ASCII" -noclobber  
 return $true #$path $date $printserver $extension
     }catch{
        return $_.Exception.Message
     }
   } 

$handler_btnImp_Click = { 

	$printserver = $comboPrintServer.Text
     # Drucker erstellen
     $result = &$ImportPrinter
    
    # wenn erfolgreich erstellt ...
    $logtext = ""  
    if ($result -eq $true){
        $logtext = @"  
-------- $(get-date -Format "g") ---------- Die Drucker wurden auf dem Printserver '$($comboPrintServer.Text)' erstellt: --------------  
Druckername: $($global:sharename)
IP-Adresse: $($global:RAWportname)
Port: $($global:portname)
Treiber: $($global:drivername)
Standort: $($global:location)
Kommentar: $($global:comment)
Systemmeldung: $($result)
"@  
        [System.Windows.Forms.MessageBox]::Show("Die Drucker wurden auf dem Printserver $($comboPrintServer.Text) erstellt. $result")  
    }else{
    # wenn Fehler beim erstellen (Fehlermeldung wird mit Dokumentiert)...
        $logtext = @"  
-------- $(get-date -Format "g") ---------- !!! ACHTUNG FEHLER !! beim erstellen der Druckers auf Printserver '$($comboPrintServer.Text) ist ein Fehler aufgetreten': --------------  
Druckername: $(global:$sharename)
IP-Adresse: $($global:RAWportname)
Port: $($global:portname)
Treiber: $($global:drivername)
Standort: $($global:location)
Kommentar: $($global:comment)
Systemmeldung: $($result)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Beim erstellen des Druckers/Ports ist ein Fehler aufgetreten: $result")  
    }
    # Add-Content "logfile.log" $logtext -Force  
    Add-Content "$Importlogfile" $logtext -Force  
	
}
 
$handler_btnDelCsv_Click = { 
   
       
		 # Drucker gelöschen
     $result = &$DeletePrinterCSV
	 sleep 15
	 $result = ""  
	 $result = &$DeletePortCSV  	
 # wenn erfolgreich gelöscht ...
    $logtext = ""  
    if ($result -eq $OK){
	$printers = Import-Csv $DelCSV –Delimiter ';'  
        $logtext = @"  
-------- $(get-date -Format "g") ---------- Die Drucker wurden auf dem Printserver '$($comboPrintServer.Text)' gelöscht: --------------  
Druckername: $($global:sharename)
IP-Adresse: $($global:RAWportname)
Port: $($global:portname)
Treiber: $($global:drivername)
Standort: $($global:location)
Kommentar: $($global:comment)
Systemmeldung: $($result)
"@  

        [System.Windows.Forms.MessageBox]::Show("Die Drucker wurden auf dem Printserver $($comboPrintServer.Text) gelöscht: $result")  
		 }else{
    # wenn Fehler beim erstellen (Fehlermeldung wird mit Dokumentiert)...
        $logtext = @"  
-------- $(get-date -Format "g") ---------- !!! ACHTUNG FEHLER !! beim löschen der Druckers auf Printserver '$($comboPrintServer.Text) ist ein Fehler aufgetreten': --------------  
Druckername: $($global:sharename)
IP-Adresse: $($global:RAWportname)
Port: $($global:portname)
Treiber: $($global:drivername)
Standort: $($global:location)
Kommentar: $($global:comment)
Systemmeldung: $($result)
$("-"*20)  
"@  

        [System.Windows.Forms.MessageBox]::Show("Beim löschen der Drucker/Ports ist ein Fehler aufgetreten. Bitte Prüfen Sie, welche Drucker fehlen!!!: $result")  
    }
    # Add-Content "logfile.log" $logtext -Force  
    Add-Content "$Dellogfile" $logtext -Force  
	
} 

	
    
 
$DeletePrinterCSV = { #Drucker anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Anfang

	 $global:printers = Import-Csv $DelCSV –Delimiter ';'   

    foreach ($printer in $global:printers){

	

if ($DeletePrintserverCSV -eq "$DeletePrintserverCSV"){  
    # create new runspace to run our sub-thread in
        $newRunspace =[runspacefactory]::CreateRunspace()
        $newRunspace.ApartmentState = "STA"  
        $newRunspace.ThreadOptions = "ReuseThread"            
        $newRunspace.Open()
        $newRunspace.SessionStateProxy.SetVariable("printer",$printer)  
        $newRunspace.SessionStateProxy.SetVariable("global:printers",$plobal:printers)  
        $newRunspace.SessionStateProxy.SetVariable("printserver",$printserver)  
        $newRunspace.SessionStateProxy.SetVariable("comboPrintServer.Text",$comboPrintServer.Text)  
		$newRunspace.SessionStateProxy.SetVariable("global:sharename",$global:sharename)  
$newRunspace.SessionStateProxy.SetVariable("printer.sharename",$printer.sharename)  
$newRunspace.SessionStateProxy.SetVariable("sharename",$sharename)  
$newRunspace.SessionStateProxy.SetVariable("_.Exception.Message",$_.Exception.Message)  

        $psCmd.AddScript({
		
		

		$global:count = for ($i=1; -lt 100; $i++){
	    $syncHash.progress.Value = $i
	}
		
		
                              # in this expample we set the progress-bar value every 20s
                             # for ($i = 1;$i -le 10;$i++){
                              #    sleep 1
                               #   $syncHash.progress.Value = $i * 10
							   #}
							   
                              
                         })
        $psCmd.Runspace = $newRunspace
        #start the runspace
        $data = $psCmd.BeginInvoke()

                
$printserver = $comboPrintServer.Text
        $global:sharename = $printer.sharename

$sharename = $global:sharename

		 Try{
		# delete printer instance (Printerport bleibt weiter bestehen)
        gwmi Win32_Printer -computer $printserver -Filter "Name = '$sharename'" | %{$_.Delete()}  
		}catch{
			return $_.Exception.Message
			  }
			  }
			# return true 
			return $_.Exception.Message
sleep 120
return true
  }else{
        return false
        }
				} #Drucker anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Ende

$DeletePortCSV = { #DruckerPort anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Anfang
     $global:printers = Import-Csv $DelCSV –Delimiter ';'   
	 $printserver = $comboPrintServer.Text

    foreach ($printer in $global:printers){
		 Try{	
		 $global:RAWportname = $printer.portname
		$name = $global:RAWportname
		gwmi Win32_TCPIPPrinterPort -computer $printserver -Filter "HostAddress = '$name'" | %{$_.Delete()}	  
		}catch{
			return $_.Exception.Message
			  }
			  }
			  return $_.Exception.Message
			  
return $OK
				} #DruckerPort anhand der CSV-Datei löschen!!!___________________________________________________________________________________________________________Ende	
				
$ImportPrinter = {
$SharedData = [HashTable]::Synchronized(@{})
$SharedData.Form = $Null

 $newRunspace = [RunSpaceFactory]::CreateRunspace()
   $newRunspace.ApartmentState = "STA"  
   $newRunspace.ThreadOptions = "ReuseThread"  
   $newRunspace.Open()
   $newRunspace.SessionStateProxy.setVariable("sharedData", $sharedData)  
    $PS = [PowerShell]::Create()
   $PS.Runspace = $newRunspace
   $PS.AddScript($Function:EndlesProgressForm)
   
   
    $global:printers = Import-Csv $import –Delimiter ';'   
    foreach ($printer in $global:printers){
        $global:drivername = $printer.drivername
        $global:RAWportname = $printer.portname
        $global:sharename = $printer.sharename
        $global:location = $printer.location
        $global:comment = $printer.comment
        Try{
            $printserver = $comboPrintServer.Text
            $global:portname = "IP_$($RAWportname)"  
            # 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.HostAddress = $RAWportname
            $port.SNMPEnabled = $False
            $port.put()

            #create printer instance
            $print = ([WMICLASS]"\\$printserver\ROOT\cimv2:Win32_Printer").createInstance()   
            $print.Drivername = $drivername
            $print.PortName = $portname
            $print.Shared = $true
            $print.Published = $true
            $print.Sharename = $sharename
            $print.Location = $location
            $print.Comment = $comment
            $print.DeviceID = $sharename
            $print.put()
           # return $true
         }catch{
            return $_.Exception.Message
    }
    }
    return $true
}
  
$handler_btnOK_Click = { #inkl. Fehlermeldung
    # 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)
Systemmeldung: $($result)
$("-"*20)  
"@  
        [System.Windows.Forms.MessageBox]::Show("Der Drucker $txtPrintername wurde auf dem Printserver $($comboPrintServer.Text) angelegt.")  
    }else{
    # wenn Fehler beim erstellen (Fehlermeldung wird mit Dokumentiert)...
        $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)
Systemmeldung: $($result)
$("-"*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_btnSpool_Click = {

$result = & $RestartSpooler
if ($result -eq $true){
       
        [System.Windows.Forms.MessageBox]::Show("Der Spooler-Dienst wurde auf dem Server $($comboPrintServer.Text) neugestartet.")  
    }else{
    # wenn Fehler beim erstellen (Fehlermeldung wird mit Dokumentiert)...
        [System.Windows.Forms.MessageBox]::Show("Der Spooler-Dienst konnte auf dem Server $($comboPrintServer.Text) NICHT neugestartet werden.")  
		}
		
}

$RestartSpooler = {

$printserver = $comboPrintServer.Text

$service1 = Get-WmiObject -ComputerName $printserver -Class Win32_Service -Filter "Name = 'LPDSVC'"  
$service = Get-WmiObject -ComputerName $printserver -Class Win32_Service -Filter "Name = 'Spooler'"  

$service1.stopservice()
$service.stopservice()

sleep 3
$service.startservice()
$service1.startservice()

return $true

}


$handler_btnCancel_Click = {
    $form1.Close()
}


$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 = 560
$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 = 493
$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 = 12
$btnCancel.Text = "Close"  
$btnCancel.UseVisualStyleBackColor = $True
$btnCancel.add_Click($handler_btnCancel_Click)

$form1.Controls.Add($btnCancel)

$btnSpool.Anchor = 10
$btnSpool.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 105
$System_Drawing_Point.Y = 493
$btnSpool.Location = $System_Drawing_Point
$btnSpool.Name = "$btnSpool"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnSpool.Size = $System_Drawing_Size
$btnSpool.TabIndex = 11
$btnSpool.Text = "ResetSpool"  
$btnSpool.UseVisualStyleBackColor = $True
$btnSpool.add_Click($handler_btnSpool_Click)

$form1.Controls.Add($btnSpool)



$btnDelCsv.Anchor = 10

$btnDelCsv.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 186
$System_Drawing_Point.Y = 465
$btnDelCsv.Location = $System_Drawing_Point
$btnDelCsv.Name = "$btnDelCsv"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnDelCsv.Size = $System_Drawing_Size
$btnDelCsv.TabIndex = 12
$btnDelCsv.Text = "DelFromCSV"  
$btnDelCsv.UseVisualStyleBackColor = $True
$btnDelCsv.add_Click($handler_btnDelCsv_Click)

$form1.Controls.Add($btnDelCsv)


$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 = 6
$btnDel.Text = "Löschen"  
$btnDel.UseVisualStyleBackColor = $True
$btnDel.add_Click($handler_btnDel_Click)

$form1.Controls.Add($btnDel)

$btnList.Anchor = 10

$btnList.DataBindings.DefaultDataSourceUpdateMode = 0

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

$form1.Controls.Add($btnList)


$btnExp.Anchor = 10

$btnExp.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 25
$System_Drawing_Point.Y = 465
$btnExp.Location = $System_Drawing_Point
$btnExp.Name = "btnExp"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnExp.Size = $System_Drawing_Size
$btnExp.TabIndex = 9
$btnExp.Text = "Export_CSV"  
$btnExp.UseVisualStyleBackColor = $True
$btnExp.add_Click($handler_btnExp_Click)

$form1.Controls.Add($btnExp)

$btnImp.Anchor = 10

$btnImp.DataBindings.DefaultDataSourceUpdateMode = 0

$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 105
$System_Drawing_Point.Y = 465
$btnImp.Location = $System_Drawing_Point
$btnImp.Name = "btnImp"  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 23
$System_Drawing_Size.Width = 75
$btnImp.Size = $System_Drawing_Size
$btnImp.TabIndex = 10
$btnImp.Text = "Import_CSV"  
$btnImp.UseVisualStyleBackColor = $True
$btnImp.add_Click($handler_btnImp_Click)

$form1.Controls.Add($btnImp)

$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)

$ProgressBar.Anchor = 14
$ProgressBar.DataBindings.DefaultDataSourceUpdateMode = 0
$System_Drawing_Point = New-Object System.Drawing.Point
$System_Drawing_Point.X = 12
$System_Drawing_Point.Y = 415
$ProgressBar.Location = $System_Drawing_Point
$ProgressBar.Name = 'ProgressBar'  
$System_Drawing_Size = New-Object System.Drawing.Size
$System_Drawing_Size.Height = 15
$System_Drawing_Size.Width = 251
$ProgressBar.Size = $System_Drawing_Size
$ProgressBar.Style = "Marquee"  
$ProgressBar.MarqueeAnimationSpeed = 20

$form1.Controls.Add($ProgressBar)

#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