2016-11-10 9 views
0

Ich habe das Problem, wenn ich versuche, ein Array aus einer Powershell-Funktion zurückzugeben.Powershell Funktion Array zurückgeben

Meine Funktion:

function filter-SWCluster { 
    param($Path, $FolderList) 
    $OldSWCluster = New-Object System.Collections.ArrayList 
    ForEach ($y in $FolderList) { 
     Get-ChildItem -Path $Path -Filter $y* | sort { [version]($_.Name -replace '^.*_(\d+(\.\d+){1,3})$', '$1') } -Descending | Select-Object -skip 3 | ForEach-Object { $OldSWCluster.Add($Path + "\" + $_) } 
    } 
    Write-Output $OldSWCluster 
} 

Der Funktionsaufruf:

$FilerSWCluster = filter-SWCluster $NetworkPath $SWCluster 

Die Ausgabe erhalte ich:

0 1 \\server.domain\C$\TEMP\Folders\Testcluster_1.0.2 \\server.domain\C$\TEMP\Folders\Testcluster_1.0.1 

Der Ausgang ich will und Notwendigkeit wäre:

\\server.domain\C$\TEMP\Folders\Testcluster_1.0.2 \\server.domain\C$\TEMP\Folders\Testcluster_1.0.1 

Ich brauche nur die Wege. Ich weiß, dass es schon einige Lösungen geben wird, aber entschuldigen Sie bitte, dass ich keinen gefunden habe, der für mich arbeitete oder ich zu dumm war, es richtig zu benutzen (könnte sein).

Ich hoffe, dass jemand von Ihnen mir helfen kann.

Dank

+1

ArrayList '' Add' Methode gibt den neuen Index zurück, Sie müssen es z '$ OldSWCluster.Add ($ Pfad +" \ "+ $ _)> $ null' – wOxxOm

+0

Mann du bist großartig, es hat perfekt funktioniert. Habe ich richtig verstanden, fügt die add-Methode nicht nur den Wert hinzu, sondern fügt auch einen Index hinzu. Und wenn ich die Variable zurück gebe, wird der Index auch weitergegeben? – Anetair

+0

1) Es fügt nur den Wert in das Array und 2) gibt den Index in den Standard-Ausgabestrom durch implizite Write-Output, die durch Umleiten auf $ null oder Casting auf [void] unterdrückt werden kann, wie die andere Antwort zeigt. – wOxxOm

Antwort

1

Sie auch mit [leer] Klasse Beschleuniger hinzufügen Verfahren wickeln konnte, wird es eine Ausgabe, wie dies verbergen:

1

wOxxOm already provided you a soltuion für Ihr Problem. Bedenken Sie jedoch, dass Sie den Pfad einfach mit einer einfachen Auswahl zurückgeben. Sie nicht auch den Weg zu betreten haben, da die FullName Eigenschaft bereits den vollständigen Pfad enthält:

function filter-SWCluster { 
    param($Path, $FolderList) 
    ForEach ($y in $FolderList) { 
     Get-ChildItem -Path $Path -Filter $y* | 
     sort { [version]($_.Name -replace '^.*_(\d+(\.\d+){1,3})$', '$1') } -Descending | 
     Select-Object -skip 3 | 
     select -ExpandProperty FullName 
    } 
} 
+0

Danke wäre auch eine Gelegenheit, aber ich kann es nicht in meinem Skript so implementieren. – Anetair