PowershellによるWindowsログのクエリ方法
2022-01-04 04:16:43
フォーラムで誰かが監査ログにファイルの変更を問い合わせるためにPowershellスクリプトを使用する方法を尋ねました。ビーンサーバーはこの機能を開いていませんでしたが、私はログを照会して対応するxmlコンテンツを出力する同様のスクリプトを書くことを試みました。
基本はget-wineventで、対応するeventidを指定してリストを取得します。このイベントの詳細を取得したい場合は、イベントの種類によってxmlの内容を変える必要があります。
例えば
$Events = Get-WinEvent -ComputerName syddc01 -FilterHashtable @{Logname='Security';Id=4771} -MaxEvents 1
$eventXML = [xml]$Event.ToXml()
$eventxml.event.event.data
これに伴い、4771の最新20件のイベントログを取得し、その結果を出力したい場合
$Events = Get-WinEvent -ComputerName syddc01 -FilterHashtable @{Logname='Security';Id=4771} -MaxEvents 20
# Parse out the event message data
ForEach ($Event in $Events) {
# Convert the event to XML
$eventXML = [xml]$Event.ToXml()
# Iterate through each one of the XML message properties
For ($i=0; $i -lt $eventXML.Event.EventData.Data.Count; $i++) {
# Append these as object properties
Add-Member -InputObject $Event -MemberType NoteProperty -Force -Name $eventXML.Event.EventData.Data[$i].name -Value $eventXML.Event. EventData.Data[$i].' #text'
}
}
$events | select Message, TargetUserName, ipaddress,timecreated | Out-GridView
イベント数が多く、その時間に制限をかけたいときがある。whereobjectでフィルタリングしないと、時間切れまで結果が出ないことがある。
ハッシュテーブルでフィルタリングする必要がある
$endtime=get-date
$starttime=$endtime.addminutes(-1)
$eventcritea = @{logname='security';id=4740;starttime=$starttime;endtime=$endtime}
ログをフィルタリングするもう一つの一般的な方法は、xmlfilter を使用することです。
まず、イベントビューアーでxpathをカスタマイズします。
別のイベントなので、彼のeventdataの結果も違うので、少し変更しました。
[xml]$xmlFilter = @"
<QueryList>
<Query Id="0" Path="Application">
<Select Path="Application">*[System[(EventID=1002) and TimeCreated[timediff(@SystemTime) <= 604800000]]]</ Select>
</Query>
</QueryList>
"@
#Get-WinEvent -ComputerName $DC.DC -LogName Security -FilterXPath "*[System[(EventID=529 or EventID=644 or EventID=675 or EventID=676 or EventID=681 or EventID=4625) and TimeCreated[timediff(@SystemTime) <= 86400000]]]" #-MaxEvents 50
$Events = Get-WinEvent -ComputerName syddc01 -FilterXML $xmlFilter
ForEach ($Event in $Events) {
# Convert the event to XML
$eventXML = [xml]$Event.ToXml()
# Iterate through each one of the XML message properties
For ($i=0; $i -lt $eventXML.Event.EventData.Data.Count; $i++) {
# Append these as object properties
Add-Member -InputObject $Event -MemberType NoteProperty -Force -Name "App" -Value $eventXML.Event.EventData.Data[5]
}
}
$Events | select Message, App, providerName, timecreated | Out-GridView
結果は次のようになります。
最後に、ロックアウトしたユーザーとロックアウトされた場所についての情報を取得したいのですが、このログについては、4771または4740を参照します。4771はログが多すぎてクエリに時間がかかるので、ここでは4740を例にとっています。
eventcritea = @{logname='security';id=4740}
$Events = get-winevent -ComputerName (Get-ADDomain).pdcemulator -FilterHashtable $eventcritea
#$Events = Get-WinEvent -ComputerName syddc01 -Filterxml $xmlfilter
# Parse out the event message data
ForEach ($Event in $Events) {
# Convert the event to XML
$eventXML = [xml]$Event.ToXml()
# Iterate through each one of the XML message properties
For ($i=0; $i -lt $eventXML.Event.EventData.Data.Count; $i++) {
# Append these as object properties
Add-Member -InputObject $Event -MemberType NoteProperty -Force -Name $eventXML.Event.EventData.Data[$i].name -Value $eventXML.Event. EventData.Data[$i].' #text'
}
}
$events | select TargetUserName,timecreated, targetdomainname | Out-GridView -Title LockOutStatus
break;
Search-ADAccount -LockedOut | ForEach-Object {Unlock-ADAccount -Identity $_.distinguishedname }
この記事は、「麻婆豆腐」ブログから転載しています。
関連
-
SQL SERVERデータベースに接続して操作するためのPowerShellコード
-
What-ifのためのPowershellエラー処理
-
PowerShellで現在実行中のスクリプトのパスを取得する方法
-
PowerShell は、現在のスクリプトランタイムによって消費されるメモリの動的フェッチを実装しています。
-
PowerShellでパイプラインを終了させる方法
-
PowerShellでファイル名の一括変更
-
PowerShell ローカルアカウントスクリプト共有の追加
-
レジストリからローカルに関連するファイルの拡張子を取得するPowershell
-
Powershellが文字列をインターセプトして省略記号を追加する例
-
PowerShellスクリプトファイルをcmdで直接実行する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PowerShell スクリプト ランダムパスワードジェネレータ (ps random password generator)
-
PowerShellでは配列のフィルタリングにmatch演算子を使用する
-
Win Server 2008 R2のためのPowerShellマネジメント
-
CMDとWin powershellの違い
-
PowerShellを使用して、現在のホストメモリ使用量と合計を取得する方法
-
Powershellは2つのフォルダの差分を比較する
-
PowerShellでregularとValidateSetを使用してパラメータを検証する
-
PowerShellによる印刷ジョブのクエリと削除のコード例
-
PowerShell ISEオートメーションの簡単な例
-
PowerShellでWindowsの機能オプションを表示する方法