4

编辑 2011 年 9 月 26 日:仍在寻找答案,如果您有任何想法,请发布并告诉我!

问题总结

当我对自己的计算机或附近的计算机运行 Get-EventLog 时,我看不到任何异常并且一切都按预期工作。

当我在更远的计算机上运行它时(平均 ping 108ms),它开始以我没想到的方式运行。每个返回的事件之间都有很长的停顿,并且需要很长时间才能完成。

这是我正在使用的命令:

Get-EventLog -ComputerName [computername] -LogName Application -newest 100

我希望该命令能够收集远程计算机上的所有信息,然后将其集中发送给我,但它似乎并没有这样做。

当我正常执行命令并使用类似在线秒表的东西进行粗略测量时,结果大约是 4 分 3 秒。

当我使用以下方法测量它时:

Measure-Command {Get-EventLog -ComputerName yanhong03 -LogName Application -newest 100}

结果大约是 31 秒(但没有打印出任何信息)。

所以,两个问题:

  • 为什么事件(似乎)一次检索一个?
  • 为什么使用 Measure-Command 实际上会改变命令完成所需的时间?

杂项细节:

我正在运行 powershell v2,并且正在使用 Powershell ISE 中的 shell 来执行这些命令。操作系统是 Windows XP。

4

1 回答 1

1

由于您使用的是 PowerShell 2,因此您可以利用远程处理。

尝试这个:

Invoke-Command -ComputerName atliis03 -ScriptBlock { Get-EventLog -LogName Application -newest 100 }

如果您正在做许多服务器,您可能希望将该进程作为后台作业启动:

$job = Invoke-Command -ComputerName atliis03 -ScriptBlock { Get-EventLog -LogName Application -newest 100 } -AsJob

然后,您可以返回并获取结果:

Receive-Job $job

Get-Job 命令将显示所有正在运行的作业的状态。

希望这可以帮助。

于 2011-04-25T18:50:09.480 回答