【发布时间】:2019-12-02 21:06:16
【问题描述】:
我喜欢认为我很擅长使用 PowerShell,但在这里我有点难过。
我有一个巨大的文件列表,我将在这些文件上运行此代码,这将为我提供一些必要的文件信息,我将在这些文件上运行分析。第一步只是获取文件列表。所以我运行这个。
Get-ChildItem $path -Recurse
这会返回一堆无用的信息,但它也给了我一片红海。有大量文件和文件夹无法找到并明确拒绝我。我想捕获所有这些错误,以便将它们解析为相关信息,因此我的直觉告诉我使用 Try/Catch。
通常您使用 Try/Catch 将错误消息存储在循环之外的某个循环中,这非常有效。但我实际上没有循环继续。我不知道现在该怎么办。这是我的源代码。
function Get-FileInfo {
Param(
[Parameter(Mandatory=$True,Position=0)]
[ValidateNotNull()]
[string]$path
)
$global:errorInfo = @()
Write-Host "I started!"
Try {
Write-Host "I started the Try Statement!"
$fileInfo = Get-ChildItem $path -Recurse -ErrorAction Stop
Write-Host "I finished the main pull!"
Return $fileInfo
}
Catch {
Write-Host "I started the Catch Statement!"
$errorObj = New-Object PSObject
Add-Member -inputObject $errorObj -memberType NoteProperty -name “Type” -value $_.Exception.Message
Add-Member -inputObject $errorObj -memberType NoteProperty -name “Item” -value $_.Exception.ItemName
$errorInfo += $errorObj
Continue
}
}
我确定您看到了问题所在。我想捕获在 Try 块中不可避免地发生的错误,但我实际上没有循环。我真的不知道如何将其设置为循环以使事情变得更好。
如果我运行这段代码,它会写出“我开始了!”之后几乎立即“我开始了 Try 语句”。然后它将工作大约一分钟。然后我得到一个“我开始了 Catch 声明!”它立即结束。为什么会发生这种情况是有道理的,但这显然不是预期的结果。
我只是想错了吗?
【问题讨论】:
标签: powershell try-catch