locked
Ausgabe an/in Notepad formatieren RRS feed

  • Frage

  • Guten Tag zusammen,

    ich habe ein Problem die Ausgabe von Out-String | Out-Notepad anständig zu formatieren und bitte um eure Unterstützung.

    Nach tagelangem suchen komme ich einfach nicht weiter da ich mich mit der Formattierung noch nicht so gut auskenne.

    Zurzeit beschäftige ich mich mit set-clipboard und benutze fürs erste folgend code:

           Function Set-ClipBoard{	
    
                $Script:ListViewText = @"
    
                $($lvMain.Items.SubItems.Text | Out-String -Stream | Out-Notepad) 
    
    "@	
    
                [Windows.Clipboard]::SetText($Script:ListViewText)
    
    }
    

    Notepad öffnet und zeigt mir die Einträge aus meiner ListView zwar an aber leider nicht in dem Format was ich mir wünsche.

    Habe schone etliche code Änderungen (mit 'n'r'r' und anderen )ausprobiert aber es funktioniert einfach nicht.

    Bei oben gelistetem code zeigt Notepad:

                 General Computer Name LT-0840J-XXX User Logon 02/03/2016 08:13:17 Screensaver Time 02/03/2016 08:13:16 Last Restart 02/03/2016 08:11:51 User Name domain\username Fullname Muster, Max LogonName musterm Department DGIS Office.....

    Wenn ich  die folgende Zeile benutze:

    $($lvMain.Items.SubItems.Text | Out-String)

    erscheint in Notepad:

              General
    Computer Name
    LT-0840J-XXX
    User Logon
    02/03/2016 08:13:17
    Screensaver Time
    02/03/2016 08:13:16
    Last Restart
    02/03/2016 08:11:51
    User
    Name
    domain\username

    Ich hätte die Anzeige in Notepad aber gerne/lieber wie folgt:

    Property                  Value

    General:
    Computer Name:      LT-0840J-XXX
    User Logon:             02/03/2016 08:13:17
    Screensaver  Time    02/03/2016 08:13:16
    Last Restart:            02/03/2016 08:11:51

    ***********

    User:
    Name:                      domain\username
    Fullname:                 Max Muster
    LogonName:              musterma
    Department:              DGIS
    Office:

    ***********

    usw.

    Vorab vielen Dank für eure Hilfe!

    Friedrich

     

    Donnerstag, 3. März 2016 13:00

Antworten

  •    

    Das meinte ich mit "möglicherweise vorformatieren".
    Du musst dich erst mal von der Vorstellung verabschieden, das nur weil die Daten im Listview so schön formatiert aussehen, du diese Ansicht auch ganz einfach im Notepad darstellen kannst.

    Die Texte der Listview-Items sind einfach einzelne Textfelder, die wenn du sie einfach über die Pipeline jagst, in keinerlei Zusammenhang mehr zueinander stehen. Das ist so als würdest du ein Puzzle auseinander nehmen, die Teile einzeln in eine Kiste werfen und erwarten das dort wieder das Puzzle entsteht.

    D.h. also, du musst dir die Ausgabe selbst zusammenbasteln.
    Ein Beispiel:
    Falls du z.b die Darstellung des Listview im Notepad replizieren willst, also alle Zellen einer Zeile des Listview jeweils hintereinander und alle Zeilen untereinander ausgeben wolltest, ginge das z.b. so:

    $textfile = "d:\tmp\test.txt"
    
    foreach ($line in $ListView.Items) {
        $outLine = ""
        foreach ( $item in $line.subitems ) {
    	   $outLine +=  $item.text + " "
    	}
    	$output += $outLine + "`r`n"
    }
    
    $output | Out-File $textfile 
    & $textfile
     
    $output kannst du dann wie vorher gezeigt einfach an out-file füttern.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    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.


    Donnerstag, 3. März 2016 17:02
    Moderator
  • Schau mal hier: LINK.

     
    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    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.

    Freitag, 11. März 2016 22:42
    Moderator

Alle Antworten

  • Hallo,

    Out-Notepad ist kein Standard-Cmdlet, daher kann ich nicht sagen, was es macht.

    Out-String wandelt die Objekte einfach in Strings um und schreibt diese untereinander.

    Wenn du eine spezielle Ausgabe haben willst, musst du sie wahrscheinlich selbst programmieren. 

    Donnerstag, 3. März 2016 13:10
  • Hallo,

    ich weiss aber ich dachte/denke ich kann von euch noch mehr lernen und das irgend jemand von euch kann mir ein paar Hinweise lieferen. ;-)

    Wenn ich out-string -Stream benutze schreibt Notepad mir die Ausgabe fortlaufend in eine Reihe und bis dato konnte ich leider nichts finden das ich das mit

    "`n`r"  oder

    "`n# # # # # # # # # #`n"

    irgendwie hinbekomme. :-(

    es is egal wo zwischen den Klammern ich das einsetze:

    Powershell gibt keinen Fehler aus und bei einfügen in Notepad wird nichts eingefügt.

    Konnte

    "`n`r"  oder

    "`n# # # # # # # # # #`n"

    zwar schon erfolgreich in meiner log datei einbauen aber ich habe keine Ahnung wie ich so etwas machen kann/muss wenn dies in Klammern passiert.

    Donnerstag, 3. März 2016 13:52
  • Vielleicht erstmal grundsätzlich: Notepad schreibt an dieser Stelle überhaupt nicht. Wenn, dann ist es eine Text-Ausgabe der PowerShell, die dann in Notepad geöffnet wird. Den Teil mit Notepad kannst du also eigentlich vergessen.

    Dann weiß ich nicht, was diese umständliche Konstruktion mit dem Here-String - das sind die @"..."@ - darstellen soll. Ein Here-String ist nichts anderes als ein String mit Zeilenumbrüchen und wird an dieser Stelle überhaupt nicht gebraucht.

    Dann brauchst du, zumindest für den kleinen Teil, den man hier sieht, nicht den Scope mit $script:... Da reicht auch $ListViewText.

    Bis jetzt habe ich nur Dinge gefunden, die du eigentlich alle nicht brauchst. Was willst du überhaupt insgesamt damit erreichen?

    Donnerstag, 3. März 2016 14:55
  • Ich weiß nicht was das CMDlet (oder ist's ne Funktion) out-notepad macht, aber sie ist ganz offensichtlich bestenfalls unnötig.
    Du erreichst das gleiche inkl. der Formatierung, nämlich auch ganz einfach z.b. so:
     
    $beispieltext = @"
    Property                  Value
    
    General:
    Computer Name:      LT-0840J-XXX
    User Logon:             02/03/2016 08:13:17
    Screensaver  Time    02/03/2016 08:13:16
    Last Restart:            02/03/2016 08:11:51
    
    ***********
    
    User:
    Name:                      domain\username
    Fullname:                 Max Muster
    LogonName:              musterma
    Department:              DGIS
    Office:
    
    ***********
    "@
    $textfile = "D:\tmp\test.txt"

    # Ausgabe in Notepad $beispieltext | Out-File $textfile & $textfile
     
    Die Frage ist natürlich auch, was für ein Format dein Text ursprünglich hat. Möglicherweise musst du ihn erst entsprechend deiner Wünsche vorformatieren.
    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    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.



    Donnerstag, 3. März 2016 14:56
    Moderator
  • Hallo Denniver,

    Du und Peter habt mir vor etwas über einem Jahr schone einmal sehr geholfen bei der gleichen powershell GUI mit einem code für's Drucken (deine Lösung mit dem System.Drawing... ).

    Diese Listview wird von vielen unterschiedlichen function gefüllt (Processes, Services, Users and groups ...etc) und es wäre etwas umständlich für all die unterschiedlichen Funktionen eine temporäre Textdatei zu erstellen.

    Ich möchte lediglich das ich die Listview anständig formatiert kopieren und in Notepad einfügen kann.

    Selbst mit

    $($lvMain.Items.SubItems.Text|Out-Notepad) 

    bekomme ich nur das folgende Ergebnis hin

             General
    Computer Name
    LT-0840J-XXX
    User Logon
    02/03/2016 08:13:17
    Screensaver Time
    02/03/2016 08:13:16
    Last Restart

    Donnerstag, 3. März 2016 16:08
  • Ups! Bin leider gestört worden.

    Nachtrag:

    Normallerweise sollte die Formattierung irgendwie mit "'n'r" (Zeilenumbruch etc.) funktionieren

    leider nicht in diesem Fall.

    Donnerstag, 3. März 2016 16:26
  •    

    Das meinte ich mit "möglicherweise vorformatieren".
    Du musst dich erst mal von der Vorstellung verabschieden, das nur weil die Daten im Listview so schön formatiert aussehen, du diese Ansicht auch ganz einfach im Notepad darstellen kannst.

    Die Texte der Listview-Items sind einfach einzelne Textfelder, die wenn du sie einfach über die Pipeline jagst, in keinerlei Zusammenhang mehr zueinander stehen. Das ist so als würdest du ein Puzzle auseinander nehmen, die Teile einzeln in eine Kiste werfen und erwarten das dort wieder das Puzzle entsteht.

    D.h. also, du musst dir die Ausgabe selbst zusammenbasteln.
    Ein Beispiel:
    Falls du z.b die Darstellung des Listview im Notepad replizieren willst, also alle Zellen einer Zeile des Listview jeweils hintereinander und alle Zeilen untereinander ausgeben wolltest, ginge das z.b. so:

    $textfile = "d:\tmp\test.txt"
    
    foreach ($line in $ListView.Items) {
        $outLine = ""
        foreach ( $item in $line.subitems ) {
    	   $outLine +=  $item.text + " "
    	}
    	$output += $outLine + "`r`n"
    }
    
    $output | Out-File $textfile 
    & $textfile
     
    $output kannst du dann wie vorher gezeigt einfach an out-file füttern.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    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.


    Donnerstag, 3. März 2016 17:02
    Moderator
  • Leider war ich mit als Antwort markieren etwas zu voreilig. :-(

    Dachte ich würde das mit deinen/euren Tips hinkriegen aber leider Fehlanzeige.

    Habe mit folgendem Code (unter anderen z.B. "'t" etc. was ich so gefunden habe) etwas herumgespielt aber die Ausgabe erscheint leider nicht so wie ich mir das wünsche.

            Function Set-ClipBoard{	
    
                $textfile = "C:\Users\sa_ringfri\AppData\Local\Temp\test.txt"
    
                foreach ($line in $lvMain.Items) {
                 $outLine = ""                                           # Verändert den linken Seitenabstand
                    foreach ( $item in $line.subitems ) {
    	               $outLine +=  $item.text +  "                        "   # Ändert den Abstand der Einträge zwischen den einzelnen Waagerechten Zellen
    	            }
    	            $output += $outLine + "`r`n" 
                }
    
                $output | Out-File $textfile
                & $textfile
    
    }

    Durch verändern der Zeilen:

    $outLine = "    "           # Verändert den linken Seitenabstand
    $outLine +=  $item.text +  "           "   # Ändert den Abstand der Einträge zwischen den einzelnen Waagerechten Zellen
    $output += $outLine + "`r`n" 

    habe ich leider nur einen nicht zufriedenstellenden kleinen Erfolg.

    Hättet ihr eventuell eine Hinweis wie der code"sein könnte damit nach jeder Zelle bzw. zwischen jeder Zelle ein Tab Abstand gemacht wird?

    Vorab vielen Dank!

    Friedrich



    • Bearbeitet 001fred Donnerstag, 10. März 2016 12:39
    Donnerstag, 10. März 2016 12:37
  • Es war eh falsch markiert, ist mir durchgerutscht. :) Wo wir gerade dabei sind: lies mal bitte hier und beherzige das bitte in der Zukunft.

    Was dein Formatproblem betrifft:
    Poste mal  bitte je ein Beispiel wo genau zu sehen ist wie es jetzt ist und wie es sein soll.
    Du weißt, das du es in Notepad auch mit noch so viel Format-Steuerzeichen nicht hinbekommen kannst, das Werte in einer Spalte gerade untereinander stehen? (Dafür müsstest du in jedem Notepad, in dem das funktionieren soll, einen nichtproportionalen Font einstellen.)
     
    Und dann würd ich doch echt gern mal wissen, wo immer diese ganzen geheimnisvollen CMDlets herkommen, die du in deinen Scripten benutzt, aber offenbar nie wie gewünscht funktionieren? :)
    im andern Script war's u.a. add-column, hier out-notepad...
      

    Gruß, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    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.

    Donnerstag, 10. März 2016 12:51
    Moderator
  • Hallo Denniver,

    ich habe das Tool in seiner ursprüngliche Form von Rich Prescott 2013 (Vorgängerversion von  https://social.technet.microsoft.com/profile/rich%20prescott/)  im Netz gefunden und seitdem beschäftige ich mich mit Powershell und erweitere es für meine Belange mit dem Wissen über Powershell was ich mir seitdem (und mit eurer Unterstützung ) angeeignet habe.

    Add-Column habe ich von Rich´s Code einfach so übernommen und out-Notepad habe ich über die verschiedenen Foren gefunden in denen ich nach diversen Lösungen gesucht habe.

    Die Beispiele habe ich von Anfang an in diesem Beitrag eingefügt. Siehe oben.

    Aber hier ein paar Screenshots:

    Konsole:

    CopyLV TC (copy listview to check) (TC weil es noch nicht so funktioniert wie ich mir das vorstelle. ;-)

    So wird es zur Zeit in Notepad angezeigt.

    So hätte ich es gerne. Da die Zellen der ListView unterschiedlich breit sind hätte ich gerne nach einer Zelle (natürlich der längsten der entsprechenden Reihe) einen Tabsprung

    Anzeige zur Zeit wenn ich die Abstandhalter im Code verändere:

    Wäre natürlich super wenn ich etwas finden (und natürlich lernen) kann wie ich diesen Tabsprung mit Powershell Code hinbekäme.

    Mit "'t", + "'r'n", 'r'n'n... etc., an den 3 stellen von deinem Code habe ich schon reichlich ausprobiert aber ich erziele nicht den gewünschten Effekt.

    Leider wird mir die Kopfzeile der listviews auch nicht angezeigt. (in diesem Beispiel)

    So wäre es perfekt.

    Danke

    Friedrich







    • Bearbeitet 001fred Freitag, 11. März 2016 20:24 Nachtrag
    Freitag, 11. März 2016 19:37
  • Schau mal hier: LINK.

     
    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    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.

    Freitag, 11. März 2016 22:42
    Moderator
  • Hallo Denniver,

    den link hatte ich auch schon gefunden hat aber leider nichts gebracht.

    Markiere die Frage jetzt als beantwortet.

    Vielen Dank!

    Grüsse,

    Friedrich


    PS: wenn ich eine Frage als beantwortet markiere habe ich anschliessend keine weiteren Optionen zur Verfügung ausser Antworten, Zitieren, Aufheben und Als Missbrauch melden.
    Montag, 14. März 2016 14:54
  • Lies bitte mal hier bezüglich der Antwortmarkierungen.

    Grüße, Denniver


    Blog: http://bytecookie.wordpress.com

    Kostenloser Powershell Snippet Manager v4: Link ! Neue Version !
    (Schneller, besser + komfortabler scripten.)

    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.

    Montag, 14. März 2016 15:13
    Moderator