array mit einer bestimmten Grösse in PowerShell definieren?

2 Antworten

tausend Wege führen nach Rom:

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/new-object?view=powershell-7

$arr = New-Object -TypeName 'int[]' -ArgumentList 10000;
$arr.length
  #es  sind wirklich 10000 Felder...
Write-Host $arr

kurz:

$arr = New-Object 'int[]'10000;

oder in .Net-schreibweise:

$arr = [int[]]::new(10000);

Dies erzeugt ein streng typisiertes Array

Zuweisung mit falschem Typ zeigt "Rot"

$arr[1]='ein String'
Der Wert "ein String" kann nicht in den Typ "System.Int32" konvertiert werden. Fehler: "Die Eingabezeichenfolge hat das falsche Format."
In Zeile:1 Zeichen:1
+ $arr[1]='ein String'
+ ~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvalidCastFromStringToInteger

Einem untypisierten Array Array of Objects kann man alles Mögliche zuweisen

$arr=[object[]]::new(10)
$arr[1]='ein String'
$arr[2]=2
$arr

dito untypisiert:

$arr = @($null) * 10

echte Arrays haben immer eine feste vordefinierte Größe

[Array]$arr=5,7   #hier ist das Array 2 Zellen groß
for ($i = 0; $i -le 10; $i++) {
    $arr[$i]=$i  #und kann auch nicht darüberhinaus Indexiert werden (8x Rot)
}
$arr

Das was in folgendem Beispiel passiert ist eigentlich nur möglich, weil Powershell es mit dem Array nicht wirklich ernst nimmt und bei jeder Erweiterung das Array still und heimlich als Liste/Collection führt und es danach erst als Array speichert.

[Array]$arr=5,7
for ($i = 0; $i -le 10; $i++) {
    $arr+=$i 
}
$arr
Das alles hat jedoch nichts mit dem zu tun, was Du Dir in den Kommentaren aus der Nase hast ziehen lassen...
Ich will Werte in einem Array speichern und denn alles außer den letzen 3 oder so(Man kann auswählen) löschen.

Du brauchst kein vordefiniertes Array....

  #erzeuge einfach ein Array
for ($i = 0; $i -le 10; $i++) {
    $arr+="Ich bin Arrayzelle $i" 
}
$arr
'
Die letzten 3:'
  #mit select festlegen was wir behalten wollen
$arr=$arr|Select -last 3
$arr

...Select-Object ist eines der Cmd-lets welche schon eine Anfänger in der Werkzeukiste haben sollte....

https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/select-object?view=powershell-7

Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren

Soweit ich weiß gibt es keinen Weg in Powershell dem Array eine feste Größe zuzuordnen. Man kann immer um ein Feld erweitern. Wozu brauchst du denn die feste Größe?

Woher ich das weiß:Berufserfahrung

keeran 
Fragesteller
 31.03.2020, 11:40

Entschuldigung, habe aus versehen auf "Nicht hilfreich hilfreich" gedrückt. Ich will Werte in einem Array speichern und denn alles außer den letzen 3 oder so(Man kann auswählen) löschen.

0
Etter  06.04.2020, 06:11
@keeran

Wieso dann die Werte erstmal in ein Array schreiben und woher kommen die Werte?

0