如何在错误捕获期间返回简单的"Access Denied"消息,而不是整个错误堆栈?



>我有一个脚本,它遍历服务器列表并检查DNS条目是否设置为特定值。

当我进行 WMI 调用以捕获任何错误并将它们写入屏幕和文本文件时,我设置了一个环境变量。 它正在除"拒绝访问"之外的所有内容上编写错误的截断版本(这是我想要的(。 在该错误上,它会转储整个堆栈。

我的问题是,如何将"访问被拒绝"错误堆栈简化为仅报告访问被拒绝之类的内容。(HRESULT的例外:0x80070005(E_ACCESSDENIED((。

奇怪的是,当我运行脚本然后键入$err并按回车键时,我得到以下内容:

PS C:\myScripts> $err访问被拒绝。(HRESULT的例外:0x80070005(E_ACCESSDENIED((

当我尝试写入主机$err或添加内容$err时,我得到了整个错误堆栈。(如果你愿意,我可以发布它...只是想节省空间。

脚本:

$ErrorActionPreference = "SilentlyContinue"
Clear-Content C:myScriptsiofilesdns.txt
$servers = Get-Content "C:myScriptsiofileshosts.txt" 
#Set the DNS values to check for
$newDNS1 = "1.1.1.1" #placeholder value 
$newDNS2 = "1.1.1.2" #placeholder value 

ForEach($server in $servers){
    Write-Host ""
    Write-Host "Checking" $server -ForegroundColor Cyan
    $wmi = Get-WmiObject -Class Win32_NetworkAdapterConfiguration -ComputerName $server -filter "ipenabled='true'" -ea "SilentlyContinue" -ev err
    $primaryDNS = $wmi.DNSServerSearchOrder[0]
    $secondaryDNS = $wmi.DNSServerSearchOrder[1]
    if ($err.count -gt 0) {
        Add-Content C:myScriptsiofilesdns.txt "$server - $err"
        Write-Host "Error on $name $err" -ForegroundColor Red
    }else{
        if ($primaryDNS -ne $newDNS1) {
        Add-Content C:myScriptsiofilesdns.txt "$server - Primary DNS incorrectly set - $primaryDNS"
        Write-Host "Primary DNS incorrectly set: " -ForegroundColor Yellow -NoNewline; Write-Host $primaryDNS -ForegroundColor Red
        }else{
            Write-Host "Primary DNS Correct" -ForegroundColor Green
        }if ($secondaryDNS -ne $newDNS2) {
        Add-Content C:myScriptsiofilesdns.txt "$server - Secondary DNS incorrectly set - $secondaryDNS"
        Write-Host "Secondary incorrectly set: " -ForegroundColor Yellow -NoNewline; Write-host $secondaryDNS -ForegroundColor Red
        }else{
            Write-Host "Secondary DNS correct" -ForegroundColor Green
            }
        }
}#END ForEach                   

您可能遇到与DCOM相关的错误:

0x80070005 – E_ACCESS_DENIED:DCOM 安全拒绝访问。

用户没有通过 DCOM 远程访问计算机的权限。 通常,DCOM 错误发生在连接到远程计算机时 不同的操作系统版本。

在 中向用户授予"远程启动"和"远程激活"权限 dcomcnfg.右键单击"COM 安全性"下的"我的计算机>属性"。 单击两个部分的"编辑限制"。为您想要远程的用户提供远程 访问、远程启动和远程激活。然后转到DCOM配置, 找到"Windows Management Instrumentation",并提供您想要的用户 远程启动和远程激活。有关详细信息,请参阅 在不同操作系统之间连接

相关内容

最新更新