Powershell - 获取项目序列 # ForEach-Object 进行错误处理

Powershell - 获取项目序列 # ForEach-Object 进行错误处理

我想传递序列计数以用于 Try/Catch 错误处理。如果我的代码捕获到错误,我希望能够返回类似“4 个文件中的第 2 个失败”的内容,而不会归咎于序列变量。到目前为止,我有以下内容:

($hash = @(Get-ChildItem C:\Dir -Recurse -Include *.txt) | Where {$_.length -gt 0}) | ForEach-Object {
    Write-Host $_.BaseName
    Write-Host $hash.IndexOf($_)
}
"Array Count = $($hash.Count)"

这将输出:

File1
0
File2
1
Array Count = 2

我不确定如何在循环外获取索引号。

答案1

答案:使用全局变量。

在语句中添加ForEach-Object如下内容:

$x = $hash.IndexOf($_);

当循环停止时,变量$x将包含索引号。

答案2

实际上只是更多相同的内容(以及对 PowerShell 格式支持的测试)。

($Hash = Get-ChildItem C:\Dir -Force -Include *.txt -Recurse -ErrorAction SilentlyContinue | Where-Object -FilterScript { $_.Length -gt 0 }) |
    ForEach-Object -Begin { "There are $($Hash.Count) non-zero length items.`r`n" } -Process { '{0:000} {1}' -f ($Hash.IndexOf($_) + 1), $_.Name }

可能会输出:

There are 3 non-zero length items.

001 This.txt
002 That.txt
003 And The Other Thing.txt

相关内容