2

からの以下の出力の「ログオンに失敗したアカウント」セクションの「アカウント名」を取得するにはどうすればよいGet-EventLogですか? 私はそれが置換文字列を含むことを知っていますが、これはそれを取得していません:

Get-EventLog -ComputerName fs2 -Logname security |
  ? {$_.eventid -eq "4625"} |
  select machinename, eventid, @{n='AccountName';e={$_.ReplacementStrings[2]}},
         entrytype, message |
  Export-Csv 1.csv -NoTypeInformation

イベントログ エントリの例:

作成時間 : 2016/5/18 8:55:43 AM
ProviderName : Microsoft-Windows-Security-Auditing
ID : 4625
メッセージ : アカウントがログオンに失敗しました。

               主題:
                   セキュリティID:S-1-5-21-1287344763-2688370722-3395302928-19873
                   アカウント名: service_adfs
                   アカウント ドメイン: DOMAIN
                   ログオン ID: 0xD62E4

               ログオンの種類: 3

               ログオンに失敗したアカウント:
                   セキュリティID:S-1-0-0
                   アカウント名: user.thatiwant@DOMAIN.com
                   アカウント ドメイン:

編集:なぜ彼らが私の投稿を編集して従来のコマンドレットを含めるようになったのかわかりませんが、新しいコマンドレット get-winevent で問題なく動作します。正規表現は私には機能しません。これはうまくいくようですが。

get-winevent -computername fs1 -FilterHashtable @{Logname='Security';Id='4625'} |select timecreated, message, machinename, eventid, @{n='AccountName';e={$_.ReplacementStrings[5]}}
4

1 に答える 1

2

Messageプロパティで正規表現を使用できます。

Account For Which Logon Failed.* Account Name:.+?\b(.*?)\s

デモ

そしてここにあなたのスクリプト:

$regex = 'Account For Which Logon Failed.* Account Name:.+?\b(.*?)\s'

get-eventlog -computername fs2 -logname security | 
    ?{$_.eventid -eq "4625"} |  
    select machinename,eventid,@{n='AccountName';e={[regex]::Match($_.Message,$regex,[System.Text.RegularExpressions.RegexOptions]::Singleline).Groups[1].Value}},entrytype,message | 
    export-csv 1.csv -NoTypeInformation
于 2016-05-18T14:15:39.957 に答える