2016-12-02 32 views
0

我是一個SQL數據庫管理員,要的n00b PowerShell的,此刻PowerShell的Get_EventLog爲多臺服務器

我需要在我的服務器查詢錯誤日誌中的錯誤和警告具有sysadmin的職責任務。

用我自己的谷歌福,並從this線程我能得到這個工作幫助:

$computers = Get-Content "C:\Servers\ServerList_Short.txt"; 

# QUERY COMPUTER SYSTEM EVENT LOG 
foreach($computer in $computers) 

{   
    Get-EventLog -ComputerName $computer -LogName System -EntryType "Error","Warning" -After (Get-Date).Adddays(-7) ` 
    | Select-Object -Property machineName, EntryType, EventID, TimeGenerated, Message ` 
    | Format-Table -Property MachineName, TimeGenerated, EntryType, Source, Message -AutoSize ; 

} 

我所目前缺少的是如何在我的.txt文件的陷阱的服務器處於脫機狀態,請忽略它並轉到下一個。在那之後,我將努力這一切轉儲到一個SQL表,RESULTS.TXT等

感謝所有幫助:)]

Kevin3NF

回答

1

有幾種不同的方式處理這個問題,但我會建議一個Test-ConnectionTry/Catch相結合,在Test-Connection將使它所以你只嘗試查詢其響應ping,然後Try/Catch將處理可能一起去任何其他錯誤服務器。

foreach($computer in $computers) 

{   
if(Test-Connection $computer -Quiet -Count 1){ 
    Try { 
     Get-EventLog -ComputerName $computer -LogName System -EntryType "Error","Warning" -After (Get-Date).Adddays(-7) ` 
    | Select-Object -Property machineName, EntryType, EventID, TimeGenerated, Message ` 
    | Format-Table -Property MachineName, TimeGenerated, EntryType, Source, Message -AutoSize 
    } Catch { 
     Write-Verbose "Error $($error[0]) encountered when attempting to get events from $computer" 
    } 
} else { 
    Write-Verbose "Failed to connect to $computer" 
} 

} 
+0

的感謝!我有一個3服務器列表進行測試,一個不存在。得到了良好的效果後,這一回:測試連接:在參數「計算機名」無法驗證的說法。參數爲空或空。提供一個參數不是null或空,然後再次嘗試 命令。 – Kevin3NF

+1

錯誤意味着你必須在你的文件的最後一個空行,你可以通過chaning嵌套河畔把'測試connection'裏面的'嘗試/ catch'克服它,還是確保您的文件不具有最後的空白行,無論是在前端還是通過執行'$ computers = $ computers |當對象{$ _}'它會從你的陣列elminate空值 –

+0

完美......必須有一個CR; LF ...刪除了,撞了我的全部服務器列表和它的工作...謝謝! – Kevin3NF