PowerShell-捕获未导出到输出文件的错误

PowerShell-捕获未导出到输出文件的错误,powershell,error-handling,catch-block,Powershell,Error Handling,Catch Block,我有一个脚本来列出远程计算机上的权限。try{}工作正常,没有错误,这很好。但是,捕获{}没有。脚本块如下所示: 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)'`,Na

我有一个脚本来列出远程计算机上的权限。try{}工作正常,没有错误,这很好。但是,捕获{}没有。脚本块如下所示:

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{}写入主机

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


谢谢大家!

您可能遇到了非终止错误。这些类型的错误不会引发异常,但您可以手动执行。为了验证,将-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
}

编辑的代码如下:
Try{$group=get wmiobject win32_group-ComputerName$CompName-Filter“LocalAccount=True和SID='S-1-5-32-544'”-ErrorVariable$Red-ErrorAction SilentlyContinue if($Red){throw$Red}$query=“GroupComponent=
”win32_group.Domain='$($group.Domain)
,Name='$($group.Name)
“$list=Get WmiObject win32_groupuser-ComputerName$CompName-Filter$query-ErrorVariable$Red-ErrorAction SilentlyContinue if($Red){throw$Red}`现在没有显示错误,这是好消息,但原始代码中的捕获仍然不起作用。有什么想法吗?请记下我的最后一个响应。对我的结尾做了一些更改,@adam bertman发布的内容非常有效!!谢谢!好消息!很高兴我能帮上忙。