String Powershell获取事件日志对象输出问题

String Powershell获取事件日志对象输出问题,string,powershell,object,output,String,Powershell,Object,Output,在脚本中使用变量的输出作为输入时,我遇到了一个问题 当我运行此命令时: $listoflogs = Get-EventLog -List | Select "Log" $listoflogss | % { Get-EventLog -LogName $_ | Where-Object {$_.EntryType -Match "Error"} } 我得到了下面的错误,我知道它没有将对象作为输入处理 Get-EventLog : The event log '@{Log=System}' o

在脚本中使用变量的输出作为输入时,我遇到了一个问题

当我运行此命令时:

$listoflogs = Get-EventLog -List | Select "Log"


$listoflogss | % { Get-EventLog -LogName $_ | Where-Object {$_.EntryType -Match "Error"} }
我得到了下面的错误,我知道它没有将对象作为输入处理

Get-EventLog : The event log '@{Log=System}' on computer '.' does not exist. At line:5 char:31
+ $listoflogs | % { Get-EventLog <<<<  -LogName $_ | Where-Object {$_.EntryType -Match "Error"} }
    + CategoryInfo          : NotSpecified: (:) [Get-EventLog], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.GetEventLogCommand
Get-EventLog : The event log '@{Log=ThinPrint Diagnostics}' on computer '.' does not exist. At line:5 char:31
+ $listoflogs | % { Get-EventLog <<<<  -LogName $_ | Where-Object {$_.EntryType -Match "Error"} }
    + CategoryInfo          : NotSpecified: (:) [Get-EventLog], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.GetEventLogCommand
Get-EventLog : The event log '@{Log=Windows PowerShell}' on computer '.' does not exist. At line:5 char:31
+ $listoflogs | % { Get-EventLog <<<<  -LogName $_ | Where-Object {$_.EntryType -Match "Error"} }
    + CategoryInfo          : NotSpecified: (:) [Get-EventLog], InvalidOperationException
    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.PowerShell.Commands.GetEventLogCommand
获取事件日志:计算机“.”上的事件日志“@{log=System}”不存在。第5行字符:31

+$listoflogs |%{Get EventLog试试这样的方法

  Get-EventLog -list | where {$_.Entries.Count -gt 0} | %{ $_.Entries } | where EntryType -EQ "Error"  

经过一点测试,我想我了解您想要实现的目标:

Get-EventLog -List | ForEach-Object {

    $logName = $_.Log

    Get-EventLog $logName |
        Where-Object { $_.EntryType -Match "Error" } |
        Select-Object *, @{ n = "LogName"; e = { $logName } }
}
Select Object
cmdlet允许您动态创建一个属性来显示它(此处需要将日志名添加到显示的结果中)

*
表示所有原始属性,
n
e
名称
表达式
的缩写,用于描述我们需要的附加属性。这称为

在您的原始代码中,
-ExpandProperty
有帮助,因为您正在通过管道将对象集合传送到
获取事件日志
,而没有指定您在
日志
属性之后。但是
选择
保留属性也意味着您将从正在收集的对象中删除所有其他对象

您也可以像这样抑制错误:

$listoflogss |
    ForEach-Object {
        Get-EventLog -LogName $_.Log |
        Where-Object { $_.EntryType -Match "Error" }
    }

您好,请尝试
$listoflogs=Get EventLog-List | Select Object-ExpandProperty Log
-ExpandProperty似乎正在工作,但输出没有告诉我哪个错误属于哪个日志。例如,我要的输出是LogName:Application、EntryType、Time等。不幸的是,我只得到了一个属于不同日志的错误列表ogs.ESPERNTO57:抱歉,它没有产生任何结果,我仍在试图弄清楚它在这个案例中是如何工作的。$\u Entries.Count???可能我遗漏了一些东西
Get EventLog-List
列出了
日志
s,然后你必须为每个
日志
再次运行
Get EventLog
来获取事件。如果你不进行测试“$\u0.Entries.Count-gt 0"当日志的分类中没有条目时,您将出错。我已修改了我的代码。达维洛:您是一个天才。这正是我所寻找的,但最重要的是,您的解决方案提供了灵活性,可以提供所有属性,或者我可以选择我想要查看的内容。因此,非常感谢您的帮助,并解释了它的功能每个比特都有。最后一件事,你可以给我指一个网站,或者你可以向我解释这个,我会很高兴。你能告诉我下面的比特是做什么的吗…@{n=“LogName”;e={$LogName}}谢谢
$listoflogss |
    ForEach-Object {
        Get-EventLog -LogName $_.Log |
        Where-Object { $_.EntryType -Match "Error" }
    }