2011-04-15 52 views
4

編輯2011/9/26:仍在尋找答案,如果您有任何想法,請發佈並讓我知道!Powershell Get-EventLog一次返回一個事件

摘要的問題

當我運行Get-事件日誌對我自己的電腦或附近的電腦,我看不出有什麼異常,一切按預期工作。

當我在距離較遠的計算機上運行它時(平均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外殼執行這些命令。操作系統是Windows XP。

+0

我剛剛注意到我沒有回答你的任何問題,我真的只能猜測。我在想,遠程獲取這些信息只是一個糟糕的選擇,告訴遠程計算機做這項工作,然後發回(我的例子)只是更高效。我懷疑測量指令掩蓋了顯示結果和返回去的時間,並可能讓遠程機器繼續推動結果。 – 2011-04-25 20:18:24

+0

沒關係,謝謝你提供了一種替代方法來獲得這些!我仍然對這些問題的具體答案感興趣,所以我現在仍然保留這個問題,但是我很欣賞這些信息。 – 2011-04-27 21:19:28

回答

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命令將顯示所有正在運行的作業的狀態。

希望這會有所幫助。

+0

這絕對是一個非常好的選擇,所以謝謝你!對於像我這樣對Powershell來說是新手的人,你需要在目標機器上做兩件事情來實現它:首先安裝powershell,然後運行'Enable-PsRemoting'命令。 – 2011-04-27 21:17:11

相關問題