Benutzer mit den meisten Antworten
Ausgabe an/in Notepad formatieren

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\usernameIch 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.- Bearbeitet Denniver ReiningMVP, Moderator Donnerstag, 3. März 2016 17:06
- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 14. März 2016 15:15
Donnerstag, 3. März 2016 17:02Moderator -
Schau mal hier: LINK.
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.- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 14. März 2016 15:15
Freitag, 11. März 2016 22:42Moderator
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.
- Bearbeitet Denniver ReiningMVP, Moderator Donnerstag, 3. März 2016 15:02
Donnerstag, 3. März 2016 14:56Moderator -
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 RestartDonnerstag, 3. März 2016 16:08 -
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.- Bearbeitet Denniver ReiningMVP, Moderator Donnerstag, 3. März 2016 17:06
- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 14. März 2016 15:15
Donnerstag, 3. März 2016 17:02Moderator -
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.- Bearbeitet Denniver ReiningMVP, Moderator Donnerstag, 10. März 2016 13:00
Donnerstag, 10. März 2016 12:51Moderator -
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.
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.- Als Antwort markiert Denniver ReiningMVP, Moderator Montag, 14. März 2016 15:15
Freitag, 11. März 2016 22:42Moderator -
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.- Als Antwort markiert 001fred Montag, 14. März 2016 14:54
- Bearbeitet 001fred Montag, 14. März 2016 14:57 Korrektur
- Tag als Antwort aufgehoben Denniver ReiningMVP, Moderator Montag, 14. März 2016 15:11
- Als Antwort markiert 001fred Montag, 14. März 2016 16:20
- Tag als Antwort aufgehoben Denniver ReiningMVP, Moderator Donnerstag, 12. Mai 2016 00:53
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.- Als Antwort markiert 001fred Montag, 14. März 2016 16:20
- Tag als Antwort aufgehoben Denniver ReiningMVP, Moderator Montag, 14. März 2016 16:31
Montag, 14. März 2016 15:13Moderator