powershell需要很长时间才能关闭连接?

时间:2014-03-21 16:01:53

标签: powershell

我正在尝试在多个远程网络服务器上运行此PowerShell脚本,但是完成任务并转移到下一个任务需要很长时间。

这是一个基本脚本,它将查询单个远程服务器并以快速方式返回我想要的数据,但需要很长时间才能完成整个脚本。

    Get-EventLog -ComputerName WebServer1 -LogName System -EntryType Error -After ((Get-Date).Date.AddDays(-1))

我通过Powershell ISE和Powershell中的命令行运行它,两者都有相同的行为。

任何帮助表示赞赏! 感谢

1 个答案:

答案 0 :(得分:0)

至于原因:mjolinor概述了 - Get-EventLog解析整个日志文件,然后过滤输出以满足您的参数。我们现在要做的是在条件为真时从最新的条目中逐个解析事件日志。

$i = 0
$EventParser =  do 
{
Get-EventLog -ComputerName Localhost -LogName System -EntryType Error -Newest $i; $i++ 
}
while 
(
(Get-EventLog -ComputerName Localhost -LogName System -EntryType Error -Newest $i | Select -Last 1).TimeWritten -ge ((Get-Date).Date.AddHours(-24))
)
$EventParser|Where-Object { $_.TimeWritten -ge ((Get-Date).Date.AddHours(-24)) } | Sort-Object -Property Index -Descending | Get-Unique -OnType

我测量了你的命令和我写的循环 - 这是我机器的输出

$ EventParser:

TotalMilliseconds:634,6669

对于您的命令(我将webserver1更改为localhost)

TotalSeconds:14,3049668

我希望上面的脚本能够加速日志解析。

PS。

我遇到了一件我无法弄清楚的事情。如你所见,我实际上是在过滤输出两次,我相信,条件相同(!)。如果我删除最后一行Where-Object语句,我会收到35个机器的条目,它甚至从4天前列出输出? (通常我从我和原始命令中收到19个条目)。令我惊讶的是,我不得不重新应用过滤器以获得所需的范围。您可以在评论中提供帮助,还是应该发布一个问题?

编辑:

现在问题不会发生。编辑:我稍微调整了一下代码,我注意到在某些情况下它可能会返回重复的条目。

祝你好运, AlexP