PowerShellを使用して、共有フォルダへのアクセスログをCSV形式で出力する方法について解説します。特定の条件に基づいてログを取得し、不要なデータを除外する方法も紹介します。
PowerShellで共有フォルダのアクセスログを取得する
PowerShellを使って、指定した条件に基づく共有フォルダのアクセスログをCSV形式で出力する方法を説明します。ここでは、アクセス日時、IPアドレス、ユーザー名、フォルダ名などの情報を取得します。
ステップ1:ログの取得方法
まず、Windowsイベントログから共有フォルダへのアクセスを取得する必要があります。イベントログには、ファイル共有に関する情報が記録されています。PowerShellを使って、これらのログを検索し、必要な情報を抽出します。
Get-WinEvent -LogName Security | Where-Object {$_.Id -eq 5140} | Select-Object TimeCreated, Message
このコマンドは、共有フォルダへのアクセスログ(イベントID 5140)を取得し、時間とメッセージを表示します。
ステップ2:フィルタリングと重複の削除
同一IPおよびユーザーでアクセス先フォルダが重複している場合、これを削除するために、PowerShellの「Group-Object」コマンドを使用します。
Get-WinEvent -LogName Security | Where-Object {$_.Id -eq 5140} | Group-Object -Property @{Expression={$_.Message}} | Select-Object Name, Count
このコマンドで、同一のメッセージ(フォルダ)について重複を削除できます。
ステップ3:ユーザー名のフィルタリング
特定のユーザー名(例えば、techやadministrator)を除外するには、「Where-Object」を使用してフィルタリングします。
Get-WinEvent -LogName Security | Where-Object {$_.Id -eq 5140 -and $_.Message -notmatch 'tech|administrator'} | Select-Object TimeCreated, Message
これにより、「tech」や「administrator」というユーザー名を含むログを除外できます。
ステップ4:結果をCSVとして出力
最終的に、取得したデータをCSV形式で保存するために、「Export-Csv」を使用します。
Get-WinEvent -LogName Security | Where-Object {$_.Id -eq 5140 -and $_.Message -notmatch 'tech|administrator'} | Select-Object TimeCreated, Message | Export-Csv -Path 'C:\Logs\access_log.csv' -NoTypeInformation
これにより、指定したパスにCSVファイルが作成されます。
ステップ5:拒否されたアクセスの処理
アクセスが拒否された場合、イベントログではローカルアドレスが表示されることがありますが、共有名で統一する方法は、ログに記録されたローカルアドレスを解析して、手動で共有名を補完する必要があります。
まとめ
PowerShellを使用して、共有フォルダへのアクセスログを効率的に取得し、CSV形式で保存する方法を紹介しました。特定のユーザーの除外や重複の削除、拒否されたアクセスの処理も含め、さまざまなカスタマイズが可能です。


コメント