PowerShell 中的函数 return 数组

Function return array in PowerShell

我在尝试从 PowerShell 函数 return 数组时遇到问题。

我的函数:

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})$', '') } -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

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

你的问题。但是,请考虑使用简单的 select 仅 return 路径。您也不必加入路径,因为 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})$', '') } -Descending |
        Select-Object -skip 3 |
        select -ExpandProperty FullName
   }
}

您还可以使用 [void] class 快捷键包装 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})$', '') } -Descending | Select-Object -skip 3 | ForEach-Object { [void]$OldSWCluster.Add($Path + "\" + $_) }
   }
   Write-Output $OldSWCluster
}