1

運用環境から定期的に Windows イベント ログを CSV にエクスポートする必要があります。

イベントが必要なマシンのリストと、取得する必要があるイベント ID のリストを含む単純な XML 構成ファイルがあります。

ここから、各マシン名を順番にループし、次に各イベント ID をループしてログを取得し、CSV にエクスポートします。実行ごとにマシンごとに 1 つの CSV が必要です。

すべての変数を計算したら、PS コマンドで 1 つのイベント 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 回実行してアピー​​ルするのではなく、1 つのステートメントを実行することを好みますが、これを行う方法がわかりません。

残念ながら、この時点で Google は私をぐるぐる回しています。

4

2 に答える 2

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]]]"
}
于 2013-08-25T16:38:33.473 に答える
-1

Failed to export log Security が表示されるのはなぜですか。指定されたクエリは無効です。これは、イベント ログの種類 (システム、アプリケーションなど) ごとに取得します。これは、evtx エクスポートでのみ発生します。私はcsvファイルを取得します....

于 2015-02-04T10:21:29.170 に答える