質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

1回答

6888閲覧

powershellでセキュリティログからTargetUserName等を抽出する

nu---ta

総合スコア6

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2020/04/21 06:48

evtx形式で保存された各セキュリティログの要素から以下の要素を抜きだしたいと考えています

前提・実現したいこと

powershellにてセキュリティログから以下の要素を抜き出したいと考えております。

1.ID(4624のみ)
2.日付
3.TargetUserName
4.TargetDomainName
5.ログオンタイプ(2、3、8)

その中でも3.TargetUserNameと4.TargetDomainNameをメッセージ内のものではなく
そのものを抽出できないか奮闘しておりますがそのようなことは可能なのでしょうか?

|ID|日付|TargetUserName|TargetDomainName|ログオンタイプ|
|:--|:--:|--:|
|4624|2020/4/21|hoge|hogehoge|2|

このようにメッセージ内表示ではなく単独で抜き出したい

発生している問題・エラーメッセージ

Get-WinEvent : 指定した選択条件に一致するイベントが見つかりませんでした。 発生場所 行:1 文字:1 + Get-WinEvent -Path C:\hogehoge\Security.evtx -filt ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : ObjectNotFound: (:) [Get-WinEvent], Exception + FullyQualifiedErrorId : NoMatchingEventsFound,Microsoft.PowerShell.Comma nds.GetWinEventCommand

該当のソースコード

powershell

1get-winevent -path hogehoge -filterxpath 2 "*[System[Provider[@Name='Microsoft-Windows-Security-Auditing'] 3and (EventID='4624')]] and *[EventData[Data[@Name='TargetUserNmae'] 4and (@Name='TargetDomainName')]]"

試したこと

イベントビュアーにてフィルターの部分をxmlに変換したものを参考にしていますがうまくいきません

補足情報(FW/ツールのバージョンなど)

PSVersion         5.1.18362.145
PSEdition     Desktop
PSCompatibleVersions {1.0, 2.0, 3.0, 4.0...}
BuildVersion 10.0.18362.145
CLRVersion 4.0.30319.42000
WSManStackVersion 3.0
PSRemotingProtocolVersion 2.3
SerializationVersion 1.1.0.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mitarai

2020/04/22 12:52 編集

少し曖昧なのでお伺いします。抽出するとはその条件(TargetUserName=hogeなど)でフィルタリングしてイベントレコードを取得したいのか、もしくはすでに取得したイベントレコードから値(hogeなど)を取り出したいのかどちらでしょうか。
nu---ta

2020/04/24 01:57

ご指摘有難うございます。 また曖昧なお聞き方をしてしまい申し訳ありません。 現在したいのは、すでに取得済みのイベントレコード(.evtx)から値を抜き出したいと考えております。 そもそも可能なのかどうかがわからなかったので調べながらの質問になり容量が得ない点があるかもしれません。申し訳ございません、宜しくお願い致します。
guest

回答1

0

ベストアンサー

Get-WinEventの出力の”EventLogRecord”オブジェクトはToXml()メソッド持っているのでXMLに変換できます。
するとそれぞれのオブジェクトは以下のようなXMLに変換されます。

XML

1<Event xmlns='http://schemas.microsoft.com/win/2004/08/events/event'> 2 <System> 3 <Provider Name='Microsoft-Windows-Security-Auditing' Guid=''/> 4 <EventID>0000</EventID> 5 . 6 .(省略) 7 </System> 8 <EventData> 9 <Data Name='SubjectUserSid'>aaa</Data> 10 <Data Name='SubjectUserName'>bbb</Data> 11 <Data Name='SubjectDomainName'>ccc</Data> 12 <Data Name='SubjectLogonId'>ddd</Data> 13 <Data Name='TargetUserSid'>eee</Data> 14 <Data Name='TargetUserName'>fff</Data> 15 <Data Name='TargetDomainName'>ggg</Data> 16 <Data Name='TargetLogonId'>hhh</Data> 17 <Data Name='LogonType'>iii</Data> 18 . 19 .(省略) 20 </EventData> 21</Event> 22

私もここら辺の仕様は知らないのですが、この<Data>ノードの値は”EventLogRecord”オブジェクトのPropertiesプロパティからこの順番通りに取得できるようです。

これが正しければ単純にPropertiesプロパティから値を取得すればよいので以下のようになります。

PowerShell

1Get-WinEvent -Path hogehoge | foreach { 2 [pscustomobject]@{ 3 ID = $_.ID 4 Date = $_.TimeCreated 5 TargetUserName = $_.Properties[5].Value 6 TargetDomainName = $_.Properties[6].Value 7 LogonType = $_.Properties[8].Value 8 } 9} | Format-Table

投稿2020/04/24 20:31

mitarai

総合スコア223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nu---ta

2020/04/30 08:32

mitarai様 つたない質問に対して丁寧に回答してくださり有難うございます。 また回答が遅くなってしまい申し訳ございません。 お答えいただいたものが望んでいたものだったのですが、 自分のスキルにできるようきちんと把握しツールを完成させたいと思います。 回答いただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問