Powershell函数返回数组

时间:2016-11-10 09:14:30

标签: arrays powershell return-value

我遇到的问题是,当我尝试从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

我只需要路径。我知道会有一些解决方案,但是请原谅我没有找到一个适合我的方法,或者我笨拙地使用它(可能)。

我希望有人能帮助我。

由于

2 个答案:

答案 0 :(得分:2)

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
   }
}

答案 1 :(得分:2)

您还可以使用[void]类加速器包装Add方法,它将隐藏任何输出,如下所示:

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
}