PowerShell - 捕获错误不导出到 Out-File

PowerShell - Catching Error not exporting to Out-File

我有一个脚本可以列出远程机器上的权限。 try{} 完美无误地工作,这很好。然而,catch{} 却没有。脚本块如下:

Try{
    $group = get-wmiobject win32_group -ComputerName $CompName -Filter "LocalAccount=True AND SID='S-1-5-32-544'"
    $query = "GroupComponent = `"Win32_Group.Domain='$($group.domain)'`,Name='$($group.name)'`""
    $list = Get-WmiObject win32_groupuser -ComputerName $CompName -Filter $query
    $list | %{$_.PartComponent} | % {$_.substring($_.lastindexof("Domain=") + 7).replace("`",Name=`"","\")}-ErrorAction Stop| Out-File C:\AdminList$CompName\AdminListResults$CompName.txt
    Write-Host "Sequence Completed. Logs have been exported to $CompName folder." -ForegroundColor Cyan
}

catch{
    $Error[0]| Out-File C:\AdminList$CompName\ErrorLogs$CompName.txt
    Write-Host "Errors Found. See ErrorLogs for details" -ForegroundColor Yellow
}

我希望它做的是,如果 try{} 失败,它会捕获显示的错误,将其从控制台隐藏并将其导出到指定的位置,但这是不起作用的部分。当前发生的是 try{} 运行,错误显示在控制台中,并且出现 try{} 的写入主机,而不是 catch{} 写入主机。

任何建议都很好。我浏览 Stack 寻找答案,但找不到任何答案。我的最后一个问题已经结束,因为它太宽泛了,所以我希望这个问题有更多细节以便更好地理解。

谢谢!

您可能 运行 陷入非终止错误。这些类型的错误不会引发异常,但您可以手动执行。要验证,请将 -ErrorAction SilentlyContinue 附加到您的两个 Get-WmiObject 调用。如果没有报错,就是这种情况。为了捕获那些静止图像,您可以使用 -ErrorVariable 参数,然后将其放入文件中。

try
{
    Get-WmiObject -Class whatever -ErrorVariable err -ErrorAction SilentlyContinue
    if ($err)
    {
        throw $err  
    }
}
catch
{
    ## whatever you want to do here
}