将Windows事件日志导出为CSV - Powershell 2.0

时间:2013-01-31 15:45:57

标签: powershell-v2.0 event-log

我需要定期从我们的生产环境中将Windows事件日志导出为CSV。

我有一个简单的XML Config文件,其中包含我需要事件的机器列表,以及我需要检索的事件ID列表。

从这里依次循环遍历每个机器名,然后每个事件ID检索日志然后导出为CSV。我想每次执行一台机器一个CSV。

一旦我解决了所有变量,PS Command就很容易检索一个事件ID的日志

foreach ($machine in $config.Configuration.Machines.Machine)
{
    $csvname=$outputlocation + $machine.Value + "_" + $datestring + ".csv"

    foreach ($eventid in $config.Configuration.EventIds.EventId)
    {
        Get-WinEvent -ComputerName $machine.Value -ErrorAction SilentlyContinue -FilterHashTable @{Logname='Security';ID=$eventid.Value} | where {$_.TimeCreated -gt $lastexecutiondate} | export-csv -NoClobber -append $csvname
    }
}

Execpt我每次都无法附加到CSV,PS 2.0显然不支持此功能。我曾尝试一次性提取所有事件ID但这似乎有点长,现在可能允许使用配置文件,但我对PowerShell相当新,所以我没有太多运气。

我还需要指定多个LogNames(系统,安全性和应用程序),并且更愿意运行一个语句而不是相同的语句3次,但我不确定如何执行此操作。

不幸的是,谷歌让我在圈子里跑。

2 个答案:

答案 0 :(得分:1)

以下是我一起挑选的内容,允许我为选择的事件日志导出先前24小时的事件 - 我将创建一个计划任务,因此它每天都会提取。 希望这有助于其他人...

$eventLogNames = "Application", "Security", "System", "Windows PowerShell"
$startDate = Get-Date
$startDate = $startDate.addDays(-1).addMinutes(-15)

function GetMilliseconds($date)
{
    $ts = New-TimeSpan -Start $date -End (Get-Date)
    [math]::Round($ts.TotalMilliseconds)
}

$serverName = get-content env:computername
$serverIP = gwmi Win32_NetworkAdapterConfiguration |
    Where { $_.IPAddress } | # filter the objects where an address actually exists
    Select -Expand IPAddress | # retrieve only the property *value*
    Where { $_ -notlike '*:*' }
$fileNameDate = Get-Date -format yyyyMMddhhmm
$endDate = Get-Date
$startTime = GetMilliseconds($startDate)
$endTime = GetMilliseconds($endDate)

foreach ($eventLogName in $eventLogNames)
{
    Write-Host "Processing Log: " $eventLogName

<# - Remove comment to create csv version of log files  
    $csvFile = $fileNameDate + "_" + $serverIP +"_" + $eventLogName + ".csv"
    Write-Host "Creating CSV Log: " $csvFile
    Get-EventLog -LogName $eventLogName -ComputerName $serverName -After $startDate -ErrorAction     SilentlyContinue | Sort MachineName, TimeWritten | Select MachineName, Source, TimeWritten, EventID, EntryType, Message | Export-CSV $csvFile #ConvertTo-CSV #Format-Table -Wrap -Property Source, TimeWritten, EventID, EntryType, Message -Autosize -NoTypeInformation
#>
    $evtxFile = $fileNameDate + "_" + $serverIP + "_" + $eventLogName + ".evtx"
    Write-Host "Creating EVTX Log: " $evtxFile
    wevtutil epl $eventLogName $evtxFile /q:"*[System[TimeCreated[timediff(@SystemTime) >=   $endTime] and TimeCreated[timediff(@SystemTime) <= $startTime]]]"
}

答案 1 :(得分:0)

为什么导出日志安全失败?指定的查询无效。我为每种类型的事件日志(系统,应用程序等)都得到了这个。这只发生在evtx导出中。我得到了csv文件tho` ....