locked
ListView Drucken RRS feed

  • Frage

  • Guten Morgen alle miteinander, (Peter??)

    ich möchte gerne die ListView einer GUI ausdrucken komme aber leider nicht weiter.

    Meine GUI ist ein Administratives Werkzeug und in dem ListView werden unterschiedliche Daten angezeigt (Services, Prozesse, Benutzer, Software etc. jenachdem was ausgewählt wird) ich habe das nur reduziert auf die Services was mir das anpassen der Befehle für das Drucken erleichtern sollte.

    Habe zwei zusätzliche Schaltflächen erstellt. 

    1. direkt Drucken

    2. Druckvorschau

    Habe schon einiges gegoogled/gelesen und ausprobiert aber ich komme einfach nicht mit den unterschiedlichen Befehlen/Bezeichnungen etc. klar die in den unterschiedlichsten codes stehen die ich gefunden habe.

    Ich bekomme es einfach nicht hin, den Code denn ich im Netz gefunden habe, in den code von der GUI einzubinden/anzupassen das er funktioniert.

    Vorab vielen Dank für Eure Unterstützung.

    Friedrich

    PS: Peter, falls Du dies annimmst! Ich habe Dir meinen Code per e-mail geschickt.


    Freitag, 8. November 2013 15:26

Antworten

  • Hallo Friedrich,

    grundsätzlich:  Falls du hier im Forum Unterstüzung möchtest, kannst du nicht auf per Email versendeten Code verweisen. Sollte Peter dir wider erwarten signalisiert haben, das er bereit ist, dir außerhalb dieses Forums Support zu leisten, dann ist das schön für dich, bedeutet aber auch das bitte die komplette Kommunikation per Email laufen sollte.

    zum Thema Druckvorschau: Wenn du damit die "grafische Vorabdarstellung des späteren Dokuments" meinst, ist das etwas aus dem Bereich fortgeschrittene Anwendungsprogrammierung und leider nicht mit rudimentären Powershell-Kenntnissen lösbar. Es übersteigt auch bei weitem das was man in einem Forum hier sinnvoll vermitteln könnte.

    Was das Drucken allgemein betrifft, hängt der Aufwand sehr stark davon ab wie die Daten beschaffen sind und wie sie auf dem Papier aussehen sollen. Da ich das nicht weiß lässt sich die Frage auch nur sehr allgemein beantworten:

    Gundsätzlich solltes es aber am einfachsten sein, die Listview-items in Powershell-Objekte zu überführen, wobei die Property-Namen hier dann die Header des Listviews wären und die Einträge im Listview dann die dazugehörigen Property-Values. Wenn du pro Reihe im Listview ein einfaches Object erstellst und das ganze dann in ein Array packst, kannst du zu beliebiger Zeit ziemlich einfach ( $objektArray | out-printer ) das ganze auf einem Drucker ausgeben.
    Noch einfacher ist es, wenn du das Listview eh aus einem Objekt fütterst. Dann brauchst du nur dieses an out-printer zu übergeben.
       Grüße, Denniver


    Blog: http://bytecookie.wordpress.com
    Powershell Codesnippet Manager: Link

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:18
    Samstag, 9. November 2013 16:36
    Moderator
  • So, letzter Versuch, dann gebe ich es auf!

    Fred was ist daran so schwer, Objekte in einem Array zu sammeln?

    Vor der ForEach Schleife erstelle ich ein leeres Array(leere Liste)

    $PrintObjectCollection = @()

    In der ForEach Schleife sammle ich die einzelnen Objekte damit Sie gemeinsam gedruckt werden:

    		# Objekt dem Array hinzufügen
    		$PrintObjectCollection += $ItemObject

    Nach der ForEach Schleife, wenn alles gesammelt wurde, wird gedruckt:

        Out-Printer -InputObject $PrintObjectCollection

    Hier der ganze Code den du in Arposch,in einem Button-Klick-Ereignis einfügen musst (mehr nicht):

    ##################### Hier ist der 'Druck' Code ################
    $button1_OnClick= 
    {
    
    	# leeres Array erstellen um die zu Druckenden Objkete zu sammeln
    	$PrintObjectCollection = @()
    	
    	# Auslesen der Zeilen aus dem Listview 
    	ForEach($Item in $lvMain.Items) {
    		# für die Aktuelle  Zeile ein Leeres neues objekt erstellen
    		$ItemObject = New-Object -TypeName PSObject
    		# Zähler zum auslesen der Position der Spalten (Überschriften)
    		$ColumnCounter = 0
    		# Jedes SubItem (Zelle) in der Zeile besuchen  
    		ForEach($SubItem In $Item.SubItems) {
                            #Jedes Subitem als Property dem Objekt zufügen (Objekt füllen)			
    			Add-Member -InputObject $ItemObject -Name $lvMain.Columns[$ColumnCounter].Name -Value $SubItem.Text -MemberType NoteProperty
    			# Spalten Zähler um eins hoch zählen (nächste Spalte)
    			$ColumnCounter++
    		}
    		
    		# Objekt dem Array hinzufügen
    		$PrintObjectCollection += $ItemObject
    
    	}
    	# gesammelte Objekte Drucken 
    	Out-Printer -InputObject $PrintObjectCollection
    	
    }
    ##################### Hier ist der 'Druck' Code ENDE ################


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Bearbeitet Peter Kriegel Freitag, 15. November 2013 07:29
    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:16
    Freitag, 15. November 2013 07:29
  • Damit alle hier im Forum auch was davon haben, habe ich dir mal einen Demonstrations-Code gemacht.

    PowerShell Listview Zeilen und Spalten drucken (print Listview Grid example):

    #Generated Form Function
    function GenerateForm {
    
    #region Import the Assemblies
    [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
    [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
    #endregion
    
    #region Generated Form Objects
    $form1 = New-Object System.Windows.Forms.Form
    $lvMain = New-Object System.Windows.Forms.ListView
    $button1 = New-Object System.Windows.Forms.Button
    $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
    #endregion Generated Form Objects
    
    ##################### Hier ist der 'Druck' Code ################
    $button1_OnClick= 
    {
    	
    	# Auslesen der Zeilen aus dem Listview 
    	ForEach($Item in $lvMain.Items) {
    		# für die Aktuelle  Zeile ein Leeres neues objekt erstellen
    		$ItemObject = New-Object -TypeName PSObject
    		# Zähler zum auslesen der Position der Spalten (Überschriften)
    		$ColumnCounter = 0
    		# Jedes SubItem (Zelle) in der Zeile besuchen  
    		ForEach($SubItem In $Item.SubItems) {
                            #Jedes Subitem als Property dem Objekt zufügen (Objekt füllen)			
    			Add-Member -InputObject $ItemObject -Name $lvMain.Columns[$ColumnCounter].Name -Value $SubItem.Text -MemberType NoteProperty
    			# Spalten Zähler um eins hoch zählen (nächste Spalte)
    			$ColumnCounter++
    		}
    		
    		$ItemObject | Out-Default
    		# oder $ItemObject | Export-CSV
    		# oder $ItemObject | Out-Printer
    		# oder oder oder ...... Excel !?
    	}
    	
    }
    ##################### Hier ist der 'Druck' Code ENDE ################
    
    $handler_form1_Load=
    {
    # CSV Data 
    $CSV = @"
    UserMoved;OldDept;NewDept;DateTime
    Bclary4;A Division;B Division;11-17-2011
    Harry;Sales;managers;09-17-2009
    Marcy;After sales;Administration;01-29-2007
    Sylvester;Bussiness;Revision;12-31-2012
    Claus;North Pole;South pole;12-24-1900
    Santa;South pole;North Pole;12-25-1901
    "@
    	# Create CSV File
    	$CSV | Out-File $env:TMP\test.csv -Force
    	# Import CSV File
    	$moves = Import-csv $env:TMP\test.csv -Delimiter ';'
    
    	# Fill ListView with CSV Data
    	foreach ($move in $moves){
    		$item1 = New-Object System.Windows.Forms.ListViewItem($move.UserMoved)
    		$item1.SubItems.Add($move.OldDept)
    		$item1.SubItems.Add($move.NewDept)
    		$item1.SubItems.Add($move.DateTime)
    		$lvMain.Items.Add($item1)
    	}
    
    	$lvMain.AutoResizeColumns([System.Windows.Forms.ColumnHeaderAutoResizeStyle]::HeaderSize)
    }
    
    
    $OnLoadForm_StateCorrection=
    {#Correct the initial state of the form to prevent the .Net maximized form issue
    	$form1.WindowState = $InitialFormWindowState
    }
    
    #----------------------------------------------
    #region Generated Form Code
    $form1.Text = "Primal Form"
    $form1.Name = "form1"
    $form1.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 500
    $System_Drawing_Size.Height = 474
    $form1.ClientSize = $System_Drawing_Size
    $form1.add_Load($handler_form1_Load)
    
    
    $button1.TabIndex = 3
    $button1.Name = "button3"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 75
    $System_Drawing_Size.Height = 23
    $button1.Size = $System_Drawing_Size
    $button1.UseVisualStyleBackColor = $True
    
    $button1.Text = "Drucken"
    
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 288
    $System_Drawing_Point.Y = 424
    $button1.Location = $System_Drawing_Point
    $button1.DataBindings.DefaultDataSourceUpdateMode = 0
    $button1.add_Click($button1_OnClick)
    
    $form1.Controls.Add($button1)
    
    $lvMain.UseCompatibleStateImageBehavior = $False
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 455
    $System_Drawing_Size.Height = 381
    $lvMain.Size = $System_Drawing_Size
    $lvMain.DataBindings.DefaultDataSourceUpdateMode = 0
    $lvMain.Name = "listView1"
    $lvMain.View = 'Details'
    $lvMain.TabIndex = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 22
    $System_Drawing_Point.Y = 13
    $lvMain.FullRowSelect = $True
    $lvMain.GridLines = $True
    $lvMain.Location = $System_Drawing_Point
    
    $ColumnHeader_UserMoved = New-Object System.Windows.Forms.ColumnHeader
    $ColumnHeader_UserMoved.Name = "UserMoved"
    $ColumnHeader_UserMoved.Text = "User Moved"
    $ColumnHeader_UserMoved.Width = 160
    $lvMain.Columns.Add($ColumnHeader_UserMoved)|Out-Null
    
    $ColumnHeader_OldDept = New-Object System.Windows.Forms.ColumnHeader
    $ColumnHeader_OldDept.Name = "OldDept"
    $ColumnHeader_OldDept.Text = "Old Dept"
    $ColumnHeader_OldDept.Width = 200
    $lvMain.Columns.Add($ColumnHeader_OldDept)|Out-Null
    
    $ColumnHeader_NewDept = New-Object System.Windows.Forms.ColumnHeader
    $ColumnHeader_NewDept.Name = "NewDept"
    $ColumnHeader_NewDept.Text = "New Dept"
    $ColumnHeader_NewDept.Width = 200
    $lvMain.Columns.Add($ColumnHeader_NewDept)|Out-Null
    
    $ColumnHeader_DateTime = New-Object System.Windows.Forms.ColumnHeader
    $ColumnHeader_DateTime.Name = "DateTime"
    $ColumnHeader_DateTime.Text = "DateTime"
    $ColumnHeader_DateTime.Width = 127
    $lvMain.Columns.Add($ColumnHeader_DateTime)|Out-Null
    
    $form1.Controls.Add($lvMain)
    
    #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


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Bearbeitet Peter Kriegel Montag, 11. November 2013 18:15
    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:18
    Montag, 11. November 2013 16:22

  • Liegt das an dem Befehl:

    $ColumnCounter++


    Nein!

    Du musst wohl die $ItemObjekt Objekte in einem Array sammeln und dann das Array drucken (wie Denniver oben schon gesagt hat).

    Mit Out-Printer habe ich noch nie gearbeitet.

    Da musst du dich selbst durch beissen.

    Vielleicht nimmste doch lieber OUT Excel ;-)


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Bearbeitet Peter Kriegel Dienstag, 12. November 2013 16:25
    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:17
    Dienstag, 12. November 2013 16:23
  • Mit der Variante von Peter hast du die Daten danach in einem Objekt gespeichert, welches du dann in eine Excel-Datei "exportieren" könntest

    Diese kannst du wiederum mit PowerShell öffnen (vorausgesetzt Excel ist installiert) und weiterverarbeiten.

    $excel = new-object -comobject excel.application
    $excel.visible = $true
    $excelpath = "C:\Temp\Excel.xls"
    #Existierende Excel-Datei öffnen
    $workbook=$excel.Workbooks.open($excelpath)
    #Das PrintPreview öffnen
    $workbook.worksheets.Item(1).PrintPreview()
    #Schliesst nur die Excel-Datei (Excel Programm bleibt geöffnet)
    $workbook.Close()


    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:16
    Freitag, 15. November 2013 09:43
  • Ich weiss noch nicht genau was ich alles abändern muss damit der code in meinem Script läuft??

    Garnichts ändern! Sogar die Variable hat den richtigen Namen ;-)

    1. knopf erstellen fürs drucken

    2. in das click ereigniss den Code einfügen und unten die Ausgabe anpassen:

    ##################### Hier ist der 'Druck' Code ################ $button1_OnClick= { # Auslesen der Zeilen aus dem Listview ForEach($Item in $lvMain.Items) { # für die Aktuelle Zeile ein Leeres neues objekt erstellen $ItemObject = New-Object -TypeName PSObject # Zähler zum auslesen der Position der Spalten (Überschriften) $ColumnCounter = 0 # Jedes SubItem (Zelle) in der Zeile besuchen ForEach($SubItem In $Item.SubItems) { #Jedes Subitem als Property dem Objekt zufügen (Objekt füllen) Add-Member -InputObject $ItemObject -Name $lvMain.Columns[$ColumnCounter].Name -Value $SubItem.Text -MemberType NoteProperty # Spalten Zähler um eins hoch zählen (nächste Spalte) $ColumnCounter++ } # Ausgabe:

    $ItemObject | Out-Default # oder $ItemObject | Export-CSV # oder $ItemObject | Out-Printer # oder oder oder ...... Excel !? } } ##################### Hier ist der 'Druck' Code ENDE ################



    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:17
    Dienstag, 12. November 2013 11:58

  • Einige Methoden oder Cmdlets erzeugen eine Ausgabe (Rückgabewert) die nicht erwünscht ist.

    Wenn du in PowerShell Ausgaben hast, die du nicht Anzeigen willst, kannst du das Cmdlet Out-Null benutzen.
    Damit wir die Ausgabe über die Pipeline in das „nichts“ geschickt (die Ausgabe wird verworfen, vernichtet)

    "Ausgabe"

    "keine Ausgabe" | Out-Null


    Da das Cmdlet Out-Null und die Pipeline erst von PowerShell geladen werden müssen, ist dies nicht die schnellste Lösung für diesen Zweck.  

    Alternativ oder besser ist es den den Accelerator [Void] zu benutzen oder die Zuweisung nach $Null.
    Diese beiden Arbeiten Intern gleich wie das Out-Null Cmdlet, sind aber viel schneller!
    (Die Zuweisung nach $Null ist, nach meinen Messungen, die schnellste Lösung)

    # Rückgabe Wert verwerfen mit dem Accelerator [Void]

    [Void]"Keine Ausgabe"

    # oder (am schnellsten) Rückgabe Wert verwerfen mit Zuweisung an $Null

    $Null = "Keine Ausgabe"

    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    Freitag, 22. November 2013 08:16

Alle Antworten

  • Hallo Friedrich,

    grundsätzlich:  Falls du hier im Forum Unterstüzung möchtest, kannst du nicht auf per Email versendeten Code verweisen. Sollte Peter dir wider erwarten signalisiert haben, das er bereit ist, dir außerhalb dieses Forums Support zu leisten, dann ist das schön für dich, bedeutet aber auch das bitte die komplette Kommunikation per Email laufen sollte.

    zum Thema Druckvorschau: Wenn du damit die "grafische Vorabdarstellung des späteren Dokuments" meinst, ist das etwas aus dem Bereich fortgeschrittene Anwendungsprogrammierung und leider nicht mit rudimentären Powershell-Kenntnissen lösbar. Es übersteigt auch bei weitem das was man in einem Forum hier sinnvoll vermitteln könnte.

    Was das Drucken allgemein betrifft, hängt der Aufwand sehr stark davon ab wie die Daten beschaffen sind und wie sie auf dem Papier aussehen sollen. Da ich das nicht weiß lässt sich die Frage auch nur sehr allgemein beantworten:

    Gundsätzlich solltes es aber am einfachsten sein, die Listview-items in Powershell-Objekte zu überführen, wobei die Property-Namen hier dann die Header des Listviews wären und die Einträge im Listview dann die dazugehörigen Property-Values. Wenn du pro Reihe im Listview ein einfaches Object erstellst und das ganze dann in ein Array packst, kannst du zu beliebiger Zeit ziemlich einfach ( $objektArray | out-printer ) das ganze auf einem Drucker ausgeben.
    Noch einfacher ist es, wenn du das Listview eh aus einem Objekt fütterst. Dann brauchst du nur dieses an out-printer zu übergeben.
       Grüße, Denniver


    Blog: http://bytecookie.wordpress.com
    Powershell Codesnippet Manager: Link

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:18
    Samstag, 9. November 2013 16:36
    Moderator
  • Guten Tag Denniver,

    Danke f:ur den Hinweis!

    Ich habe Peter die Daten geschickt weil Er mir die letzten drei mal immer geantwortet hat und die Daten (da Er sie immer per e-mail angefordert hatte) vorsichtshalber schon einmal geschickt.

    Bin noch neu hier und werde mich bessern. ;-))

    Powershell und Listview ist auch noch relativ neu für mich zumindest, in dem Ausmass wie ich mich die letzten 2-3 Monate damit beschäftige.

    Object erstellen kann ich leider noch nicht. Bin gerade erst seit 3 Wochen mich mit Functions am auseinandersetzen.

    Montag, 11. November 2013 14:00
  • Damit alle hier im Forum auch was davon haben, habe ich dir mal einen Demonstrations-Code gemacht.

    PowerShell Listview Zeilen und Spalten drucken (print Listview Grid example):

    #Generated Form Function
    function GenerateForm {
    
    #region Import the Assemblies
    [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
    [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
    #endregion
    
    #region Generated Form Objects
    $form1 = New-Object System.Windows.Forms.Form
    $lvMain = New-Object System.Windows.Forms.ListView
    $button1 = New-Object System.Windows.Forms.Button
    $InitialFormWindowState = New-Object System.Windows.Forms.FormWindowState
    #endregion Generated Form Objects
    
    ##################### Hier ist der 'Druck' Code ################
    $button1_OnClick= 
    {
    	
    	# Auslesen der Zeilen aus dem Listview 
    	ForEach($Item in $lvMain.Items) {
    		# für die Aktuelle  Zeile ein Leeres neues objekt erstellen
    		$ItemObject = New-Object -TypeName PSObject
    		# Zähler zum auslesen der Position der Spalten (Überschriften)
    		$ColumnCounter = 0
    		# Jedes SubItem (Zelle) in der Zeile besuchen  
    		ForEach($SubItem In $Item.SubItems) {
                            #Jedes Subitem als Property dem Objekt zufügen (Objekt füllen)			
    			Add-Member -InputObject $ItemObject -Name $lvMain.Columns[$ColumnCounter].Name -Value $SubItem.Text -MemberType NoteProperty
    			# Spalten Zähler um eins hoch zählen (nächste Spalte)
    			$ColumnCounter++
    		}
    		
    		$ItemObject | Out-Default
    		# oder $ItemObject | Export-CSV
    		# oder $ItemObject | Out-Printer
    		# oder oder oder ...... Excel !?
    	}
    	
    }
    ##################### Hier ist der 'Druck' Code ENDE ################
    
    $handler_form1_Load=
    {
    # CSV Data 
    $CSV = @"
    UserMoved;OldDept;NewDept;DateTime
    Bclary4;A Division;B Division;11-17-2011
    Harry;Sales;managers;09-17-2009
    Marcy;After sales;Administration;01-29-2007
    Sylvester;Bussiness;Revision;12-31-2012
    Claus;North Pole;South pole;12-24-1900
    Santa;South pole;North Pole;12-25-1901
    "@
    	# Create CSV File
    	$CSV | Out-File $env:TMP\test.csv -Force
    	# Import CSV File
    	$moves = Import-csv $env:TMP\test.csv -Delimiter ';'
    
    	# Fill ListView with CSV Data
    	foreach ($move in $moves){
    		$item1 = New-Object System.Windows.Forms.ListViewItem($move.UserMoved)
    		$item1.SubItems.Add($move.OldDept)
    		$item1.SubItems.Add($move.NewDept)
    		$item1.SubItems.Add($move.DateTime)
    		$lvMain.Items.Add($item1)
    	}
    
    	$lvMain.AutoResizeColumns([System.Windows.Forms.ColumnHeaderAutoResizeStyle]::HeaderSize)
    }
    
    
    $OnLoadForm_StateCorrection=
    {#Correct the initial state of the form to prevent the .Net maximized form issue
    	$form1.WindowState = $InitialFormWindowState
    }
    
    #----------------------------------------------
    #region Generated Form Code
    $form1.Text = "Primal Form"
    $form1.Name = "form1"
    $form1.DataBindings.DefaultDataSourceUpdateMode = 0
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 500
    $System_Drawing_Size.Height = 474
    $form1.ClientSize = $System_Drawing_Size
    $form1.add_Load($handler_form1_Load)
    
    
    $button1.TabIndex = 3
    $button1.Name = "button3"
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 75
    $System_Drawing_Size.Height = 23
    $button1.Size = $System_Drawing_Size
    $button1.UseVisualStyleBackColor = $True
    
    $button1.Text = "Drucken"
    
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 288
    $System_Drawing_Point.Y = 424
    $button1.Location = $System_Drawing_Point
    $button1.DataBindings.DefaultDataSourceUpdateMode = 0
    $button1.add_Click($button1_OnClick)
    
    $form1.Controls.Add($button1)
    
    $lvMain.UseCompatibleStateImageBehavior = $False
    $System_Drawing_Size = New-Object System.Drawing.Size
    $System_Drawing_Size.Width = 455
    $System_Drawing_Size.Height = 381
    $lvMain.Size = $System_Drawing_Size
    $lvMain.DataBindings.DefaultDataSourceUpdateMode = 0
    $lvMain.Name = "listView1"
    $lvMain.View = 'Details'
    $lvMain.TabIndex = 0
    $System_Drawing_Point = New-Object System.Drawing.Point
    $System_Drawing_Point.X = 22
    $System_Drawing_Point.Y = 13
    $lvMain.FullRowSelect = $True
    $lvMain.GridLines = $True
    $lvMain.Location = $System_Drawing_Point
    
    $ColumnHeader_UserMoved = New-Object System.Windows.Forms.ColumnHeader
    $ColumnHeader_UserMoved.Name = "UserMoved"
    $ColumnHeader_UserMoved.Text = "User Moved"
    $ColumnHeader_UserMoved.Width = 160
    $lvMain.Columns.Add($ColumnHeader_UserMoved)|Out-Null
    
    $ColumnHeader_OldDept = New-Object System.Windows.Forms.ColumnHeader
    $ColumnHeader_OldDept.Name = "OldDept"
    $ColumnHeader_OldDept.Text = "Old Dept"
    $ColumnHeader_OldDept.Width = 200
    $lvMain.Columns.Add($ColumnHeader_OldDept)|Out-Null
    
    $ColumnHeader_NewDept = New-Object System.Windows.Forms.ColumnHeader
    $ColumnHeader_NewDept.Name = "NewDept"
    $ColumnHeader_NewDept.Text = "New Dept"
    $ColumnHeader_NewDept.Width = 200
    $lvMain.Columns.Add($ColumnHeader_NewDept)|Out-Null
    
    $ColumnHeader_DateTime = New-Object System.Windows.Forms.ColumnHeader
    $ColumnHeader_DateTime.Name = "DateTime"
    $ColumnHeader_DateTime.Text = "DateTime"
    $ColumnHeader_DateTime.Width = 127
    $lvMain.Columns.Add($ColumnHeader_DateTime)|Out-Null
    
    $form1.Controls.Add($lvMain)
    
    #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


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Bearbeitet Peter Kriegel Montag, 11. November 2013 18:15
    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:18
    Montag, 11. November 2013 16:22
  • Guten Tag Peter,

    das ist toll vond Dir aber leider habe ich bei dem code genau das gleich Problem wie bei dem den ich über google gefunden habe. :-(

    Ich weiss noch nicht genau was ich alles abändern muss damit der code in meinem Script läuft??

    Bei $form1 = denke ich, dass ich halt den Namen auf den Namen meiner form ändern muss

    und bei Schaltfläche1 und 2 natürlich die von meiner Druck- und Druckvorschau Schaltfläche aber das war es dann auch schon mit meinem Wissen.

    Muss ich auch noch function GenerateForm ( 

    abändern und/oder ??????

    Viellecht sogar noch mehr Änderungen??

    Nachtrag:

    war mal wieder zu schnell! ;-))

    Ich habe gerade erst realisiert, dass Du eine komplette Form veröffentlicht hast.

    Werde die nächsten 1-2 Tage mal schauen ob ich das hinbekomme mir die benötigten Befehle, die ich für mein Script benötige, auszusortieren und einzubinden.

    Erst einmal vielen Dank und ich melde mich ganz bestimmt wieder!! ;-))

    Mfg

    Friedrich


    • Bearbeitet 001fred Dienstag, 12. November 2013 12:45 Feststellung
    Dienstag, 12. November 2013 11:43
  • Ich weiss noch nicht genau was ich alles abändern muss damit der code in meinem Script läuft??

    Garnichts ändern! Sogar die Variable hat den richtigen Namen ;-)

    1. knopf erstellen fürs drucken

    2. in das click ereigniss den Code einfügen und unten die Ausgabe anpassen:

    ##################### Hier ist der 'Druck' Code ################ $button1_OnClick= { # Auslesen der Zeilen aus dem Listview ForEach($Item in $lvMain.Items) { # für die Aktuelle Zeile ein Leeres neues objekt erstellen $ItemObject = New-Object -TypeName PSObject # Zähler zum auslesen der Position der Spalten (Überschriften) $ColumnCounter = 0 # Jedes SubItem (Zelle) in der Zeile besuchen ForEach($SubItem In $Item.SubItems) { #Jedes Subitem als Property dem Objekt zufügen (Objekt füllen) Add-Member -InputObject $ItemObject -Name $lvMain.Columns[$ColumnCounter].Name -Value $SubItem.Text -MemberType NoteProperty # Spalten Zähler um eins hoch zählen (nächste Spalte) $ColumnCounter++ } # Ausgabe:

    $ItemObject | Out-Default # oder $ItemObject | Export-CSV # oder $ItemObject | Out-Printer # oder oder oder ...... Excel !? } } ##################### Hier ist der 'Druck' Code ENDE ################



    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:17
    Dienstag, 12. November 2013 11:58
  • Der war gut!! ;-))

    Habe denn code eingefügt und habe 2 Sachen geändert $btnprint_click { anstelle von $button1_click

    und $itemobject | out-print activiert.

    Drucker hat sofort angefangen zu drucken wobei nacheinander ca. 45 Fenster auftraten und die ausgedruckten Seiten waren leer.

    Konnte das Ganze nur mit Task Manager stoppen. 

    Wenn ich dein komplettes script nehme wird jede Zeile auf ein Extrablatt gedruckt.

    Liegt das an dem Befehl:

    $ColumnCounter++

    Warum werden die 5 Zeilen nicht auf ein Blatt gedruckt?

    ;-))

    Muss also doch einige Sachen abändern.

    Werde sehen wie ich das hinbekomme.


    • Bearbeitet 001fred Dienstag, 12. November 2013 14:44 Aktualisieren
    Dienstag, 12. November 2013 14:34

  • Liegt das an dem Befehl:

    $ColumnCounter++


    Nein!

    Du musst wohl die $ItemObjekt Objekte in einem Array sammeln und dann das Array drucken (wie Denniver oben schon gesagt hat).

    Mit Out-Printer habe ich noch nie gearbeitet.

    Da musst du dich selbst durch beissen.

    Vielleicht nimmste doch lieber OUT Excel ;-)


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Bearbeitet Peter Kriegel Dienstag, 12. November 2013 16:25
    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:17
    Dienstag, 12. November 2013 16:23
  • Versuch einmal folgender Code (Kopiert aus: Printing a Windows Form):

    ##################### Hier ist der 'Druck' Code ################
    $button1_OnClick= 
    {
    $code = @'
    
    using System;
    using System.Text;
    using System.Windows.Forms;
    using System.Drawing;
    
    
    namespace PrintPreview
    {
        public class FormPrintHelper
        {
            [System.Runtime.InteropServices.DllImport("gdi32.dll")]
            public static extern long BitBlt(IntPtr hdcDest, int nXDest, int nYDest, int nWidth, int nHeight, IntPtr hdcSrc, int nXSrc, int nYSrc, int dwRop);
            public Bitmap memoryImage;
            public void CaptureScreen(Control F)
            {
                Graphics mygraphics = F.CreateGraphics();
                Size s = F.Size;
                memoryImage = new Bitmap(s.Width, s.Height, mygraphics);
                Graphics memoryGraphics = Graphics.FromImage(memoryImage);
                IntPtr dc1 = mygraphics.GetHdc();
                IntPtr dc2 = memoryGraphics.GetHdc();
                BitBlt(dc2, 0, 0, F.ClientRectangle.Width, F.ClientRectangle.Height, dc1, 0, 0, 13369376);
                mygraphics.ReleaseHdc(dc1);
                memoryGraphics.ReleaseHdc(dc2);
            }
        }
    }
    '@
    
        add-type $code -ReferencedAssemblies 'System.Windows.Forms','System.Drawing'
    
        $fph = New-Object PrintPreview.FormPrintHelper
        #Beliebige Control des Windows Forms ($button1,$form1)
        $fph.CaptureScreen($lvMain)
    
        $form = New-Object windows.forms.form
        $previewpicture = New-Object Windows.Forms.PictureBox
        $button = New-Object Windows.Forms.Button
        #Fenstergrösse der gewählten Control plus manuellen Werten
        $form.Height = $fph.memoryImage.Height + 85
        $form.Width = $fph.memoryImage.Width + 15
        #Vorschaubild
        $previewpicture.Image = $fph.memoryImage
        $previewpicture.Height = $fph.memoryImage.Height
        $previewpicture.Width = $fph.memoryImage.Width
        $button.TabIndex = 1
        $button.Name = "button"
        $System_Drawing_Size = New-Object System.Drawing.Size
        $System_Drawing_Size.Width = 75
        $System_Drawing_Size.Height = 23
        $button.Size = $System_Drawing_Size
        $button.UseVisualStyleBackColor = $True
        $button.Text = "Drucken"
    
        $System_Drawing_Point = New-Object System.Drawing.Point
        #Position des Buttons 15 Unter dem Bild und Mittig des Bildes (Bildlänge halbieren und danach Buttonlängehalbieren und abziehen)
        $System_Drawing_Point.Y = $fph.memoryImage.Height + "15"
        $System_Drawing_Point.X = $fph.memoryImage.Width / 2 - 37.5
        $button.Location = $System_Drawing_Point
        $button.DataBindings.DefaultDataSourceUpdateMode = 0
        $button.Add_Click({
            $pd = New-Object System.Drawing.Printing.PrintDocument
            $pd.Add_PrintPage({$_.Graphics.DrawImage(([System.Drawing.Image]$fph.memoryImage), 0, 0)})
            $pd.Print()
        })
    
        $form.Controls.Add($previewpicture)
        $form.Controls.Add($button)
        $form.ShowDialog()
    }
    ##################### Hier ist der 'Druck' Code ENDE ################

    Im Prinzip erstellst du ein Bild einer gewählten Windows-Forms-Control (in diesem Fall eine Listview)

    Dieses Bild lässt du in einer neuen Windows Form anzeigen (Druckvorschau)

    Und druckst es anschliessend als normales Bild aus

    Beachte: Ich habe es nur kurz angeschaut und getestet unter Powershell 4.0

    Alternative wäre die ListView in ein Excel zu überführen und danach mittels Excel-Comobjekt das Ganze zu drucken

    Grüsse

    Mittwoch, 13. November 2013 12:23
  • Guten Tag Powerturtle,

    das ist einfach Spitzenklasse!!! ;-))

    Mit meinem, auf die Services gekürzten Admin tool, funktioniert das einfach Suuuuuuuuper.

    So habe ich mir das vorgestellt.

    Bin mal gespannt ob das auch in dem kompletten Admin tool mit den anderen Daten, die im Listview erscheinen so funktioniert.

    Vielen lieben Dank!!

    Mfg

    Friedrich

    Mittwoch, 13. November 2013 14:12
  • Den Code hatte ich auch gesehen, habe Ihn aber verworfen, weil ich das Umwandeln von Daten und Drucken von Daten als Bild einfach Murks finde!

    Dort geht der Text und die Information verloren!

    Man kann z.B. nicht in ein PDF Drucken und aus dem PDF den Text wieder heraus kopieren, weil es eben ein Bild ist.

    Ebenso kann man den Text nicht mehr Skalieren und der Text sieht unsauber aus, weil er eben aus Pixeln besteht.

    Da kann man ja auch ein Bildschirm Bild drucken!

    Ist halt Murks!

    Aber wenn es gefällt ...


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Mittwoch, 13. November 2013 15:18
  • Da kann ich leider noch nicht so mitreden weil mir die Erfahrung und die Kenntnis fehlt!

    Habe aber gerade festgestellt, nachdem ich den code in mein kompl. Admin tool eingebaut habe, dass die Druckervorschau nur 30 Einträge anzeigt und ausdruckt.

    In einigen Funktionen, wie z.B. installierte Software, ist die Liste im listview erheblich länger.

    Bin gerade im code am suchen wo ich die Liste vergrössern kann.

    Verstehe natürlich auch noch nicht den code richtig zu lesen wegen der Unterschiedlichen Bezeichnungen etc. 

    Mittwoch, 13. November 2013 15:37
  • Es sieht so aus als mache der Code (CaptureScreen(Control F)) mehr oder weniger einen Screenshot der Form.
    D.h. du kannst nur ausdrucken was gerade auf dem Bildschirm angezeigt wird.

    Wenn das ganze so einfach wäre hätten wir das erwähnt. :)

     

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com
    Powershell Codesnippet Manager: Link

    Hilf mit und markiere hilfreiche Beiträge mit dem "Abstimmen"-Button (links) und Beiträge die eine Frage von dir beantwortet haben, als "Antwort" (unten).
    Warum das Ganze? Hier gibts die Antwort.

    Mittwoch, 13. November 2013 15:45
    Moderator
  • Genau! Es wird von dem Listview ein Foto gemacht und dieses wird ausgedruckt.

    Wenn man den Listview Scrollen muss wird der unsichtbare Bereich NICHT mit ausgedruckt. Bei meinem Code schon!


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)


    Mittwoch, 13. November 2013 17:52
  • Hallo alle miteinander,

    genau das ist der punkt.

    Der Ausdruck sieht soweit sehr gut aus aber leider scrollt er nicht runter beim Ausdruck.

    Ich kriege den code von Dir (Peter) einfach nicht in mein script eingebunden.

    Bei deinem code druck er mir jeweils eine Zeile auf separate Blätter.

    Bin einfach noch nicht so weit das ich alles verstehe! ;-)



    • Bearbeitet 001fred Donnerstag, 14. November 2013 15:51 aktualisieren
    Donnerstag, 14. November 2013 15:50
  • So, letzter Versuch, dann gebe ich es auf!

    Fred was ist daran so schwer, Objekte in einem Array zu sammeln?

    Vor der ForEach Schleife erstelle ich ein leeres Array(leere Liste)

    $PrintObjectCollection = @()

    In der ForEach Schleife sammle ich die einzelnen Objekte damit Sie gemeinsam gedruckt werden:

    		# Objekt dem Array hinzufügen
    		$PrintObjectCollection += $ItemObject

    Nach der ForEach Schleife, wenn alles gesammelt wurde, wird gedruckt:

        Out-Printer -InputObject $PrintObjectCollection

    Hier der ganze Code den du in Arposch,in einem Button-Klick-Ereignis einfügen musst (mehr nicht):

    ##################### Hier ist der 'Druck' Code ################
    $button1_OnClick= 
    {
    
    	# leeres Array erstellen um die zu Druckenden Objkete zu sammeln
    	$PrintObjectCollection = @()
    	
    	# Auslesen der Zeilen aus dem Listview 
    	ForEach($Item in $lvMain.Items) {
    		# für die Aktuelle  Zeile ein Leeres neues objekt erstellen
    		$ItemObject = New-Object -TypeName PSObject
    		# Zähler zum auslesen der Position der Spalten (Überschriften)
    		$ColumnCounter = 0
    		# Jedes SubItem (Zelle) in der Zeile besuchen  
    		ForEach($SubItem In $Item.SubItems) {
                            #Jedes Subitem als Property dem Objekt zufügen (Objekt füllen)			
    			Add-Member -InputObject $ItemObject -Name $lvMain.Columns[$ColumnCounter].Name -Value $SubItem.Text -MemberType NoteProperty
    			# Spalten Zähler um eins hoch zählen (nächste Spalte)
    			$ColumnCounter++
    		}
    		
    		# Objekt dem Array hinzufügen
    		$PrintObjectCollection += $ItemObject
    
    	}
    	# gesammelte Objekte Drucken 
    	Out-Printer -InputObject $PrintObjectCollection
    	
    }
    ##################### Hier ist der 'Druck' Code ENDE ################


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    • Bearbeitet Peter Kriegel Freitag, 15. November 2013 07:29
    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:16
    Freitag, 15. November 2013 07:29
  • Guten Morgen Peter,

    Du hast gut reden, bist wahrscheinlich schon sehr lange dabei. ;-))

    Wenn man gerade erst seit ein paar Monaten damit beschäftigt ist und keiner in der näheren Umgebung verfügbar ist mit dem man discutieren kann, ist das halt alles nicht so einfach. ;-))

    Array's, Objecte etc.

    Bin in meinem Wälzer erst auf Seite 425 und und das letzte mal als ich etwas mit programmieren zu tun hatte war 2000 mit Assembler MÜC 8085.

    Seitdem habe ich nichts mehr in dieser Beziehung gemacht.


    Freitag, 15. November 2013 08:39
  • Mit der Variante von Peter hast du die Daten danach in einem Objekt gespeichert, welches du dann in eine Excel-Datei "exportieren" könntest

    Diese kannst du wiederum mit PowerShell öffnen (vorausgesetzt Excel ist installiert) und weiterverarbeiten.

    $excel = new-object -comobject excel.application
    $excel.visible = $true
    $excelpath = "C:\Temp\Excel.xls"
    #Existierende Excel-Datei öffnen
    $workbook=$excel.Workbooks.open($excelpath)
    #Das PrintPreview öffnen
    $workbook.worksheets.Item(1).PrintPreview()
    #Schliesst nur die Excel-Datei (Excel Programm bleibt geöffnet)
    $workbook.Close()


    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:16
    Freitag, 15. November 2013 09:43
  • Na ja, lange dabei ist relativ...

    Ich kenne halt schon viele anderen Scripting und Programmiertechniken.

    Erfahrung ist da auch ein großer Faktor.

    Du machst ja gerade Erfahrungen ;-)

    PowerShell liefert dir ja fast immer mehrere Objekte.

    z.B. Get-Prozess Liefert dir viele Prozess Objekte

    Diese Objekte befinden sich IMMER in einem Array (Liste von Objekten).

    Du Liest das Buch von Tobias Weltner "Scripting mit Windows PowerShell 3.0 – Der Workshop" richtig ?

    Ich habe das hier (als PDF) und gerade mal nachgesehen.

    Leider erklärt er Arrays sehr verteilt in dem Buch und nicht sehr intensiv.

    Der Umgang mit Arrays ist aus meiner Sicht essentielles Grundwissen.

    In meinen Youtube Videos habe ich ein Array Video geplant, aber das dauert noch...

    Tobias hat Arrays hier in Englisch besprochen:

    http://powershell.com/cs/blogs/ebookv2/archive/2012/03/11/chapter-4-arrays-and-hashtables.aspx


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Freitag, 15. November 2013 09:45
  • Ja, das Buch führe ich mir gerade zu Gemüte!

    Bin im Abschnitt über Fehlermeldung, was für mich noch etwas spanisch ist. Habe auch schon den ps Befehl ausprobiert der die Fehlermeldungen etwas ausagekräftiger ausgeben soll aber bis dato kann ich damit auch noch nicht viel anfangen. ;-)) 

    Danke für einen neuen Link zum lesen! Weiss schon gar nicht mehr wann ich schlafen soll vor lauter Leserei. ;-))

    Vielen Dank noch einmal für Eure Unterstützung und ich wünsche Euch ein schönes Wochenende.

    Bin nächste Woche auf einem 3 Tage Windows 7 Lehrgang.

    Freitag, 15. November 2013 15:48
  • Fred, ist denn dein Problem nun gelöst ?


    Meine PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    Mein deutscher PowerShell Blog
    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+ | Deutsches PowerShell Forum (TechNet)

    Montag, 18. November 2013 07:46
  • Guten Morgen Peter, Denniver und Powerturtle,

    der code funktioniert auch sehr gut und vor allen Dingen druckt er die komplette Liste aus. Die ausgedruckte Ansicht von Powerturtle's code sieht zwar besser aus aber ist auch etwas umständlich wenn man, je nach Länge der Liste, mehrmals Fenster schliessen und öffnen muss.

    Naja, man kann halt nicht immer alles haben.

    Die Frage ist damit beantwortet.

    Nur noch eine zum heutigen Abschluss.

    in deinem code gibts Du den Assembley code durch eine Pipe and Out-Null

    [reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
    [reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null

    Warum?

    Was passiert dadurch?

    Ich bedanke mich auf jeden Fall bei Euch und wünsche Euch ein schönes Wochenende!!

    Ihr seit einfach Spitzenklasse!!

    Mfg

    Friedrich




    • Als Antwort markiert 001fred Freitag, 22. November 2013 07:16
    • Bearbeitet 001fred Freitag, 22. November 2013 07:27 Änderung des Textes.
    • Tag als Antwort aufgehoben Denniver ReiningMVP, Moderator Donnerstag, 12. Mai 2016 00:51
    Freitag, 22. November 2013 07:15

  • Einige Methoden oder Cmdlets erzeugen eine Ausgabe (Rückgabewert) die nicht erwünscht ist.

    Wenn du in PowerShell Ausgaben hast, die du nicht Anzeigen willst, kannst du das Cmdlet Out-Null benutzen.
    Damit wir die Ausgabe über die Pipeline in das „nichts“ geschickt (die Ausgabe wird verworfen, vernichtet)

    "Ausgabe"

    "keine Ausgabe" | Out-Null


    Da das Cmdlet Out-Null und die Pipeline erst von PowerShell geladen werden müssen, ist dies nicht die schnellste Lösung für diesen Zweck.  

    Alternativ oder besser ist es den den Accelerator [Void] zu benutzen oder die Zuweisung nach $Null.
    Diese beiden Arbeiten Intern gleich wie das Out-Null Cmdlet, sind aber viel schneller!
    (Die Zuweisung nach $Null ist, nach meinen Messungen, die schnellste Lösung)

    # Rückgabe Wert verwerfen mit dem Accelerator [Void]

    [Void]"Keine Ausgabe"

    # oder (am schnellsten) Rückgabe Wert verwerfen mit Zuweisung an $Null

    $Null = "Keine Ausgabe"

    PowerShell Artikel, Buchtipps und kostenlose PowerShell Tutorials + E-Books
    auf der deutschsprachigen PowerShell Community

    Mein 21 Teiliger PowerShell Video Grundlehrgang
    Deutsche PowerShell Videos auf Youtube
    Folge mir auf:
    Twitter | Facebook | Google+

    Freitag, 22. November 2013 08:16
  • Ach so ist das. 

    Hatte mich schon gewundert weil die Assemblies in meinem code [void] vorab stehen haben.

    Vielen Dank und SWE!! ;-))

    Freitag, 22. November 2013 11:47