2016-11-10 110 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