如何将不同的字符串行添加到新列和csv中的每一行?

时间:2017-05-03 14:08:09

标签: windows powershell csv logging

Image of the error log 我想得到"消息:" (在“常规”选项卡中)行到" CCIS_Error_Log_2017-05-03.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

这是我编写的用于执行上述方案的脚本的一部分。但相反映射到事件,它复制了所有"消息:"在每个事件中csv文件中的单行。

我希望我解释得很清楚 提前致谢

1 个答案:

答案 0 :(得分:0)

如果可以通过Timestamp将事件映射到错误CSV文件中的条目,那么这可能是一个解决方案(假设CSV中有一个Timestamp列):

$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