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
}
我在尝试从 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
我只需要路径。我知道已经有一些解决方案,但请原谅。我没有找到适合我的,或者我愚蠢地使用它(可能是)。
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
}