PowerShell Array ind String umwandeln und in Textdatei ausgeben
Hallo,
folgende Thematik habe ich heute vor mir. Ich habe ein Array mit Integer-Werten. Die Größe des Array ist unterschiedlich - mal sind 3 Werte mal 20 und im Extremfall auch mal 120 oder 200. Die Werte aus dem Array landen in einem String, der dann an eine Textdatei übergeben wird. Der Inhalt der Textdatei wird anschließend kontrolliert und via Copy&Paste in eine SSH Session übergeben. Das Problem dabei ist, dass die SSH Session nicht 120 Werte aus dem Array annimmt, weil die Hardware die den String erhält nur eine begrenzte Anzahl von Zeichen erlaubt. Aus diesem Grund möchte ich das Array für den String x mal teilen. Und genau darin besteht nun meine Frage.
Ich kann die Länge des Array mit .length oder .count zählen lassen. Nach meiner Vorstellung sollte nach 50 Werten ein neuer String entstehen. Anschließend würde ich eine Schleife erstellen, die dann die bis zum Wert 50 in den String schreibt, danach die nächsten 50 Werte usw. Was ist aber wenn ich nur 120 Werte habe.
Gibt es für dieses Problem vielleicht einen Ein Zeiler oder muss es wie von mir vermutet via Schleife realisiert werden?
Gruß
derhoeppi
folgende Thematik habe ich heute vor mir. Ich habe ein Array mit Integer-Werten. Die Größe des Array ist unterschiedlich - mal sind 3 Werte mal 20 und im Extremfall auch mal 120 oder 200. Die Werte aus dem Array landen in einem String, der dann an eine Textdatei übergeben wird. Der Inhalt der Textdatei wird anschließend kontrolliert und via Copy&Paste in eine SSH Session übergeben. Das Problem dabei ist, dass die SSH Session nicht 120 Werte aus dem Array annimmt, weil die Hardware die den String erhält nur eine begrenzte Anzahl von Zeichen erlaubt. Aus diesem Grund möchte ich das Array für den String x mal teilen. Und genau darin besteht nun meine Frage.
Ich kann die Länge des Array mit .length oder .count zählen lassen. Nach meiner Vorstellung sollte nach 50 Werten ein neuer String entstehen. Anschließend würde ich eine Schleife erstellen, die dann die bis zum Wert 50 in den String schreibt, danach die nächsten 50 Werte usw. Was ist aber wenn ich nur 120 Werte habe.
Gibt es für dieses Problem vielleicht einen Ein Zeiler oder muss es wie von mir vermutet via Schleife realisiert werden?
Gruß
derhoeppi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 279156
Url: https://administrator.de/forum/powershell-array-ind-string-umwandeln-und-in-textdatei-ausgeben-279156.html
Ausgedruckt am: 25.04.2025 um 03:04 Uhr
8 Kommentare
Neuester Kommentar

Moin,
ganz einfach, du teilst die Array Länge durch die gewünschte Teilmenge(50) und nimmst davon nur den ganzen Teil ohne den Rest nach dem Komma.
Dann ermittelst du mit dem MOD Operator (%) den übrig geblieben Rest. Dann läufst du mit einer Schleife über den "ganzen" Wert den du ermittelt hast und gibst die entsprechenden Array-Werte in die Dateien aus.
Zum Schluss dann noch den Rest in eine weitere Datei, fertig.
So wie nach diesem Muster:
3000 Dateien automatisch in 150 stückeln?
Gruß grexit
ganz einfach, du teilst die Array Länge durch die gewünschte Teilmenge(50) und nimmst davon nur den ganzen Teil ohne den Rest nach dem Komma.
Dann ermittelst du mit dem MOD Operator (%) den übrig geblieben Rest. Dann läufst du mit einer Schleife über den "ganzen" Wert den du ermittelt hast und gibst die entsprechenden Array-Werte in die Dateien aus.
Zum Schluss dann noch den Rest in eine weitere Datei, fertig.
So wie nach diesem Muster:
3000 Dateien automatisch in 150 stückeln?
Gruß grexit
Wenn man's weiß wie der Herr es haben will, ist's natürlich einfacher.
Naja kleine Änderung meines Scripts, und alles landet in einer Datei die Blöcke getrennt mit einem Strich:
Grüße Uwe
Bitte dann noch ein gelöst hinten dran. Merci.
#BeispielArray
$a = 1..120
$intCount = 50
$full = [math]::Floor($a.length / $intCount)
0..($full) | %{($a[($intCount * $_)..(($intCount * $_)+$intCount-1)] -join "`r`n") + "`r`n-------------"} | add-content "C:\temp\output.txt"
Bitte dann noch ein gelöst hinten dran. Merci.
Hallo derhoeppi,
Die Variable mit folgendem Inhalt
Ist kein Array ! Sondern ein einzelner integer Wert. Deswegen erhältst du auch keine Ausgabe.
Wenn dann muss das schon ein Array sein:
Dann klappt das auch.
Also bei sowas immer vorher den Typ der Variablen checken:
Bei $a = 1 sieht der Typ der Variablen so aus
und bei $a = @(1):
Man erkennt klar den Unterschied.Das ist der Grund warum du bei deiner Variante keine Ausgabe erhältst. Denn wenn der Datentyp stimmt geht obiger Code einwandfrei auch mit nur einem einzelnen Element.
Es wird immer wieder gerne vergessen das Powershell nicht Batch ist, sondern im Hintergrund eine objektorientierte Sprache mit expliziten Typen (.NET), nur vergisst man das leicht, weil einem die Powershell durch "Typ-Casting" sehr viel davon abnimmt, aber eben nicht alles. Deswegen ist es immer wichtig die Datentypen zu kennen, oder explizit anzugeben [string]/[bool] etc.. was man auch durch voranstellen des Typs erreichen kann
Z.B. macht das aus einer einzelnen Zahl ein Array:
Die Variante von oben @(1,2,3) ist ein spezielles Powershell-Konstrukt für ein Array, ist aber im Hintergrund das selbe wie mit der expliziten Angabe von [array].
Hoffe das war soweit verständlich für dich.
Grüße Uwe
Folgendes Problem habe ich nun mit der Mathematischen Berechnung festgestellt.
das ist so leider nicht richtig, du übersiehst hier ein kleines aber feines Detail !Die Variable mit folgendem Inhalt
$a = 1
Wenn dann muss das schon ein Array sein:
$a = @(1)
Also bei sowas immer vorher den Typ der Variablen checken:
$a.getType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Int32 System.ValueType
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object System.Array
Es wird immer wieder gerne vergessen das Powershell nicht Batch ist, sondern im Hintergrund eine objektorientierte Sprache mit expliziten Typen (.NET), nur vergisst man das leicht, weil einem die Powershell durch "Typ-Casting" sehr viel davon abnimmt, aber eben nicht alles. Deswegen ist es immer wichtig die Datentypen zu kennen, oder explizit anzugeben [string]/[bool] etc.. was man auch durch voranstellen des Typs erreichen kann
Z.B. macht das aus einer einzelnen Zahl ein Array:
[array]1
Hoffe das war soweit verständlich für dich.
Grüße Uwe