2016-11-10 155 views
0

我有問題,當我試圖從Powershell函數返回一個數組。Powershell函數返回數組

我的功能:

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 
} 

函數調用:

$FilerSWCluster = filter-SWCluster $NetworkPath $SWCluster 

輸出我得到:

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

我想和輸出的需求將是:

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

我只需要路徑。我知道已經有了一些解決方案,但是請原諒我,我沒有找到一個爲我工作的人,或者我愚蠢地使用它(可能)。

我希望有人能幫助我。

謝謝

+1

ArrayList的'Add'方法返回新的索引,你需要隱藏它,例如'$ OldSWCluster.Add($ Path +「\」+ $ _)> $ null' – wOxxOm

+0

你是偉大的人,它的工作完美。我的理解是否正確,添加方法不僅僅是增加了值,還增加了一個索引。當我傳回變量時,索引也會傳遞? – Anetair

+0

1)它只是將值添加到數組中,2)通過使用隱式寫入輸出將該索引發送到默認輸出流中,可以通過重定向到$ null或將其轉換爲[void]來抑制其他答案。 – wOxxOm

回答

1

你也可以換添加法[空]類加速器,它會隱藏任何輸出,這樣的:

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 { [void]$OldSWCluster.Add($Path + "\" + $_) } 
    } 
    Write-Output $OldSWCluster 
} 
1

wOxxOm already provided you a soltuion到您的問題。但是,請考慮使用簡單的選擇返回路徑。您還沒有加入的路徑,因爲FullName屬性已經包含了完整的路徑:

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

感謝也是一個機會,但我不能在這樣的腳本中實現它。 – Anetair