【问题标题】:Get the last 10 events in Eventlog(Application, Secuirty, System) in PowerShell在 PowerShell 中获取事件日志(应用程序、安全性、系统)中的最后 10 个事件
【发布时间】:2017-10-11 14:04:36
【问题描述】:

我正在尝试同时获取 «EventLog» 日志 «Application»、«Security» 和 «System» 中的最后 10 个事件。我收到一条错误消息:

Get-EventLog : 无法将 'System.Object[]' 转换为参数 'LogName' 所需的类型 'System.String'"

运行脚本时。该脚本在仅使用日志名称“Application”运行时有效。

Get-Eventlog -Newest 10 -LogName "Application","Security","System"

【问题讨论】:

  • 这是因为 LogName 需要一个字符串,而您正在放入一个数组

标签: powershell


【解决方案1】:
"Application","Security","System" | ForEach-Object { 
    Get-Eventlog -Newest 10 -LogName $_ 
}

这将为您提供每个日志中的 10 个最新事件。如果您希望将所有三个日志中的 10 个最近事件汇总在一起,则需要执行以下操作:

"Application","Security","System" | ForEach-Object { 
    Get-Eventlog -Newest 10 -LogName $_ 
} | Sort-Object -Property Time -Descending | Select-Object -First 10

【讨论】:

    【解决方案2】:

    您不能按照您尝试的方式进行操作,因为 -LogName 需要一个字符串并且您正在传递一个数组。

    您可以通过将数组传递到ForEach-Object 并一次查看一个日志来完成您的任务。 %{} 是 ForEach-Object 的别名

    "Application","Security","System" | %{Get-Eventlog -Newest 10 -LogName $_}
    

    【讨论】:

    • 嗨,谢谢。如何使用 ScheduledJob 每天在 powershell 中重新启动 Print Spooler?我尝试使用:Restart-Service -Name Spooler -Force
    • 嘿 :) 可悲的是,这不是 StackOverflow 的工作方式。您需要创建一个新问题并展示您尝试过的内容,以便其他人可以帮助您。它有点像一个学习/或排除故障的地方,但它不是一个我们只回答与主要问题无关的问题的地方。我会再次提出一个新问题,并展示您尝试过的内容以及失败的原因。
    【解决方案3】:

    Get-eventlog 已被 get-winevent 取代。您仍然必须使用 foreach 才能获得 10 个。按 logname 而不是 providername 分组可能不那么烦人。

    echo Application,Security,System | % { get-winevent $_ -maxevents 10 } | 
      ft -groupby logname
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-24
      • 1970-01-01
      • 1970-01-01
      • 2023-02-20
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      相关资源
      最近更新 更多