c20082005
Goto Top

Powershell: Vollständige Ausgabe Array in Datei, ohne dass Zeilen abgeschnitten werden

Hallo,

ich habe ein Array mit Strings von variabler Länge gefüllt.
Wenn ich nun das Array in eine Datei ausgeben will, so werden die Zeilen ab einer bestimmten Position abgeschnitten.
$Liste>$env:temp\170525_093250_.txt

Füge ich hinter diesen Befehl ein
$Liste | out-file $env:TEMP\170525_092746_.txt -width 160

so sind alle Zeilen vollständig, aber jede 160 Zeichen lang, was die Datei unnötig groß macht.

Könnt Ihr mir helfen:
Wie gebe ich das Array aus, damit alle Zeilen vollständig sind und alle nur so lang, wie nötig?

Gruß

Klaus

Content-Key: 338889

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

Ausgedruckt am: 19.03.2024 um 09:03 Uhr

Mitglied: 132895
132895 25.05.2017 aktualisiert um 10:16:25 Uhr
Goto Top
Benutze set-content (sc) statt out-file oder redirection:
$liste | sc datei.txt
https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powe ...

Der Grund: out-file /redirection gibt alles so aus wie es auf der Konsole erscheinen würde, und die Konsole hat per Default eine Längenbeschränkung (kann man zwar ändern ist hier aber unzweckmäßig), deswegen werden die Zeilen gekürzt. Anders bei set-content, da wird das Objekt selbst übermittelt ohne den Umweg über die Konsole.

Gruß
Mitglied: c20082005
c20082005 25.05.2017 um 14:58:57 Uhr
Goto Top
Vielen Dank!

Es hat (fast) geklappt - Problem ist jetzt:
Jeder Eintrag beginnt mit einem "@{FullName=".
Wie bekommt man das weg?


Und dies nur für diejenigen Suchenden, die das Problem auch haben sollten:
Mein Problem war noch, dass ich das Array mit
| Select-Object Fullname| Format-Table -AutoSize
gefüllt habe.

Der Befehl "Format-Table" war der Grund, warum in der Ausgabedatei nicht der Inhalt des Arrays stand, sondern:
...
Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
Microsoft.PowerShell.Commands.Internal.Format.FormatEntryData
...

Klaus
Mitglied: 132895
Lösung 132895 25.05.2017 aktualisiert um 16:41:30 Uhr
Goto Top
Dann hast du kein reines Array sondern ein Objekt mit Eigenschaften, also musst du das Objekt/Eigenschaft expandieren mit
$liste | select -Expand Fullname
Format-Table und Format-List geben keine Strings aus sondern ebenfalls Objekte wie du siehst. Willst du diese Objekte als String ausgeben musst du ein out-string hinterher in der Pipe platzieren.

Denke immer daran Powershell arbeitet Objektorientiert face-wink.
Mitglied: c20082005
c20082005 26.05.2017 um 07:31:37 Uhr
Goto Top
Vielen Dank!

Das hat funktioniert.
Hier zur Vollständigkeit noch mein Skript:
$Liste_Temp= @()
$Liste_Gesamt= @()

$ZielVerzeichnis="R:\"  
foreach ($i in (get-childitem $Zielverzeichnis -recurse | Select-Object Fullname))
{
    $Liste_Temp+=$i
}
$Liste_Gesamt+=($Liste_Temp | select -Expand Fullname | out-string)
$Liste_Gesamt>r:\k.txt