0

我有一个脚本来列出远程机器上的权限。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 以寻找答案,但找不到任何答案。我的最后一个问题已关闭,因为它太宽泛了,所以我希望这有更多细节以便更好地理解。

谢谢你!

4

1 回答 1

0

您可能会遇到非终止错误。这些类型的错误不会引发异常,但您可以手动执行。要进行验证,请将 -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
}
于 2016-03-09T17:06:27.083 回答