2017-05-03 5 views
1

Image of the error log 対応するイベントをマッピングする新しい列の「CCIS_Error_Log_2017-05-03.csv」に「Messages:」(「Generals」タブ内)行を表示する必要があります。新しい列とcsvの各行に異なる文字列行を追加する方法は?

(Get-WinEvent -FilterHashTable @{logname = 'CCIS'; } | where {$_.LevelDisplayName -eq "Error"}|select Message)|Set-Content -Path "C:\Logs\temp.txt" 

Import-Csv C:\CCIS_Error_Log_2017-05-03.csv|select-object *,@{Name="Messages";Expression={select-string C:\Logs\temp.txt -pattern "Message:" | foreach {$_.Line}}} | Export-Csv C:\Logs\CCIS_Error_Log_2017-05-03.csv -notypeinformation 

これは、上記のシナリオを実行するために書いたスクリプトのセグメントです。イベントにマッピングする代わりに、各イベントのすべての「Messages:」をcsvファイル内の単一の行にコピーします。

私はタイムスタンプがあることを前提として(私はそれがタイムスタンプで正確にエラーCSVファイルのエントリにイベントをマッピングすることが可能である場合は、事前

+0

どのようにCSVファイル内の行をイベントログのイベントにマップできますか。たとえば、タイムスタンプや他のIDキーは同じですか? CSVファイルのサンプルエントリが役立ちます。 –

+0

"Id、TimeCreated、LevelDisplayName、ProviderName"これらは列名 – oneGAWDabv

+0

です。タイムスタンプが同じ形式で正確に一致する場合にのみ、TimeCreatedを使用できます。イベントログまたは別のソースからのCSVのイベントですか? –

答えて

0

でよく おかげで、これは解決策になる可能性があり、それを説明願っていますCSVの列):

$Events = Get-WinEvent -FilterHashTable @{logname = 'CCIS'} | Where {$_.LevelDisplayName -eq "Error"} 
$ErrorLog = Import-Csv C:\CCIS_Error_Log_2017-05-03.csv 

$ErrorLog | ForEach-Object { 

    $LogEntry = $_ 
    $Event = $Events | Where {$_.Id -eq $LogEntry.Id} 

    If ($Event){ 
     Write-Output ($LogEntry | Select *,@{Name='Message';Expression={$Event.Message}}) 
    }Else{ 
     Write-Warning "Could not locate a matching message for $LogEntry" 
    } 

} | Export-CSV C:\Logs\CCIS_Error_Log_2017-05-03.csv -NoTypeInformation 
+0

問題は「id」でも「タイムスタンプ」(アプリケーション時間が別のタイムゾーンにある間はサーバー時間はローカル時間です)は一意ですので、クエリをマップできません。 – oneGAWDabv

+0

私はこれを行う別の方法です 私はスクリーンショットを添付しました http://imgur.com/a/tM5jZ – oneGAWDabv