首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Try/Catch块实际上不执行get-eventlog。

Try/Catch块实际上不执行get-eventlog。
EN

Stack Overflow用户
提问于 2014-12-13 20:25:14
回答 2查看 659关注 0票数 0

出于某种原因,当我尝试使用安全选项时,它实际上并不执行get-eventlog,而是将它写入屏幕,就像引用了它一样。其他日志不使用try catch块,但是每当我用try catch块设置它们时,它们的作用仍然像cmdlet被引用一样。

代码语言:javascript
复制
$eventlogname = Read-Host "Which event log category do wish to view? Enter Application, Security, Setup, System, or Forwarded events"
$lognumber = Read-Host "Enter the number of logs you wish to retrieve"

switch 
    ($eventlogname)
{
     Security {
            $logseverity = Read-Host "What event severity do you wish to view? Enter Critical, Warning, Error, FailureAudit, SuccessAudit, or Information"
            $computernameeventlog = Read-Host "Please enter the hostname to query"

            if ($computernameeventlog -eq "localhost" )
            {
            try
                {
                    {
                    Get-EventLog -logname $eventlogname -EntryType $logseverity -Newest $lognumber -ErrorAction SilentlyContinue
                    }


                            }
                            catch [System.IO.IOException]
                            {
                                Write-Host "The hostname was incorrect or not available."
                            }
                            catch [System.InvalidOperationException]
                            {
                                Write-Host "The event log does not exist"
                            }
                    }
             else
                {

             try{
                    {
                        Get-EventLog -logname $eventlogname -EntryType $logseverity -ComputerName $computernameeventlog -Newest $lognumber -ErrorAction SilentlyContinue 
                    }
                        }
                            catch [System.IO.IOException]
                            {
                                Write-Host "The hostname was incorrect or not available."
                            }
                            catch [System.InvalidOperationException]
                            {
                                Write-Host "The event log does not exist"
                            }
                    }
                }

     "Forwarded events"
     {
        $computernamewinevent = Read-Host "Please enter the hostname to query"
        $logseverity = Read-Host "What event severity do you wish to view? Enter Critical, Warning, Error or Information"
        if ($computernamewinevent -eq "localhost")
        {
            Get-WinEvent -logname forwardedevents -MaxEvents $lognumber | where {$_.leveldisplayname -contains $logseverity}
        }
        else
        {
            Get-WinEvent -logname forwardedevents -MaxEvents $lognumber -ComputerName $computername | where {$_.leveldisplayname -contains $logseverity}
        }
    }
    default
    {
    $logseverity = Read-Host "What event severity do you wish to view? Enter Critical, Warning, Error or Information"
    $computernameeventlog = Read-Host "Please enter the hostname to query"

    if ($computernameeventlog -eq "localhost" )

        {
            Get-EventLog -logname $eventlogname -EntryType $logseverity -Newest $lognumber 
        }



    else
        {
            Get-EventLog -logname $eventlogname -EntryType $logseverity -ComputerName $computernameeventlog -Newest $lognumber
        }
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-13 20:35:27

在您的代码中,您用括号({ })包围了命令,如下所示:

代码语言:javascript
复制
{
Get-EventLog -logname $eventlogname -EntryType $logseverity -ComputerName $computernameeventlog -Newest $lognumber -ErrorAction SilentlyContinue 
}

这将产生一个脚本块,它不会执行,而是以字符串的形式输出。你想要的是去掉括号。

票数 2
EN

Stack Overflow用户

发布于 2014-12-14 16:05:46

如果您要修复Micky提到的各种括号问题,您的Catch块仍然不会运行。在Try块中,必须强制执行终止错误。您强迫它完全忽略错误:

代码语言:javascript
复制
#Note the changed error action:
Get-EventLog -logname $eventlogname -EntryType $logseverity -Newest $lognumber -ErrorAction Stop

#Get some help on the topic:
Get-Help about_Try_Catch_Finally

进一步阅读可能有助于:

  • 最后
  • PowerShell.org eBooks - PowerShell错误处理大书
  • PowerShell中的错误处理简介

最后,暂且考虑更具可读性的格式设置。一些流行的选择:

代码语言:javascript
复制
Try
{
    #Do something
}
Catch 
{
    #Catch
}

Try {
    #Do something
}
Catch {
    #Catch
}

许多人对这些和其他约定有强烈的感情,但只要你是一贯的,你就应该是好的。我看到了一些第一个例子,但有些情况下,您缩进了第一个卷曲括号,而不是用关键字对其进行排列。

干杯!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27463268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档