Powershell Wieso ist meine Variable voller als gedacht?
Hi zusammen.
Ich befülle über Pipeline ein Array.
In dieser Pipeline befülle ich eine WinForms Listbox.
Nur seltsamer weise wenn ich dies tue wird mein Array um das doppelte größer.
Kann mir dies vielleicht jemand erklären?
Zum Code:
$file_list = @( Get-ChildItem -Path $source -Filter $filter -Recurse -File |
where-object {$_.LastAccessTime -le (get-date).AddMinutes($DelTime)} |
ForEach-Object -Begin {$i = 0} -process {
$i++
$TextBox_Output.AppendText([System.Environment]::NewLine + $_.FullName) #TODO Nur für TEST
write-host "Datei-Nr.: $i -- heißt:" $_.Name #TODO Nur für TEST
$ListBox.Items.Add("Maschinen-Nr.: $(Split-Path $_.Directory -Leaf) // Programm-Name: $($_.Name)")
write-host "$_.Fullname"
$_.FullName
}
)
Wenn ich so
$file_list.count
ausgebe dann sind da 6 Items drinnen.
Wenn ich aber die die Zeile
$ListBox.Items.Add("Maschinen-Nr.: $(Split-Path $_.Directory -Leaf) // Programm-Name: $($_.Name)")
auskommentiere, dann sind wie gewünscht nur noch 3 Items im Array.
Kann mir vielleicht jemand erklären wieso mir diese Zeile ins Array schreibt, obwohl sie (meiner Meinung nach) nur in eine Listbox erstellen soll.
Bzw. hat jemand einen Verbesserungsvorschlag?
Wie immer Vielen Dank im Vorraus für die Mithilfe.
1 Antwort
Ich bin leider unterwegs und kann nicht nachschauen was, wo drin ist...
Wenn ich so ... $file_list.count ...
...und was ist Drin, wenn du einfach mal:
$file_list = @(
...all der kladderadatsch...
)
$file_list
dann siehst Du was drin ist. ich mach mal einen Schuss ins blaue
0
ein Pfad
1
ein Pfad
...
ListBox.Items.Add ist nicht void ... https://docs.microsoft.com/de-de/dotnet/api/system.windows.forms.listbox.objectcollection.add?view=windowsdesktop-6.0#gibt-zur-ck
Wenn Du den Rückgabewert nicht brauchst schicke ihn ins Nirvana:
#am schnellsten
$Null= funktion mit Rückgabewert
#speed looser
funktion mit Rückgabewert >$Null
[void]funktion mit Rückgabewert
funktion mit Rückgabewert|Out-Null
Hi. Wiedermal vielen Dank für Hilfe.
Und ja richtig. Es wurde 0, 1 und 2 hinzugefügt (was ich nicht haben wollte).
Hab es mit dem [void] gelöst und hab somit auch gleich das [void] am Ende meines Scripts verstanden mit dem die WinForms GUI aufgerufen wird.