Logging 远程收集windows事件日志的方法?

Logging 远程收集windows事件日志的方法?,logging,wmi,powershell-2.0,Logging,Wmi,Powershell 2.0,有没有比wmi更快的方法可以使用powershell远程收集windows事件日志? 如果没有,我们如何进行有效的多线程wmi查询以从多个主机收集日志?查看 Get-EventLog 您可以在作业中启动它以对其进行多线程处理: Start-Job -ArgumentList $HostName { return $(Get-EventLog -ComputerName "$($args[0])" -LogName Application -Source "Source Name") } 然后

有没有比wmi更快的方法可以使用powershell远程收集windows事件日志? 如果没有,我们如何进行有效的多线程wmi查询以从多个主机收集日志?

查看

Get-EventLog
您可以在作业中启动它以对其进行多线程处理:

Start-Job -ArgumentList $HostName { return $(Get-EventLog -ComputerName "$($args[0])" -LogName Application -Source "Source Name") }
然后收集所有数据:

$Logs = $(Get-Job | Wait-Job | Receive-Job)
看起来是这样的:

foreach($HostName in $Hosts) {
    Start-Job -ArgumentList $HostName { return $(Get-EventLog -ComputerName "$($args[0])" -LogName Application -Source "Source Name") }
}

$Logs = $(Get-Job | Wait-Job | Receive-Job)

get eventlog不提供凭据参数,因此我得到了“未经授权的尝试”错误。另一种方法是使用invoke命令,但它使用http,速度很慢。不幸的是,invoke命令将是最好的选择。如果并行运行它们,开销就不会那么明显了。您还可以使用WMI和多线程,以使用作业的相同方式使用它们。