web-dev-qa-db-ja.com

トリガーされた電子メールWindows2012を介したイベントログコンテンツのレポート

PowerShellスクリプトを実行するタスクスケジューラアクションをトリガーするイベントログに基づいて電子メールを送信できます。しかし、私はこのイベントが運ぶ重要なデータのどれも渡すことができません。たとえば、[イベントビューア]> [カスタムビュー]> [サーバーロール]> [リモートデスクトップサービス]イベントは、ログインが成功したときに接続側のIPアドレスをログに記録します。これは、Windows2008で簡単に実行できます。

https://community.spiceworks.com/scripts/show/2056-email-rdp-successful-logonhttps://blogs.technet.Microsoft.com/otto/2007/ 11/09/reference-the-event-that-triggered-your-task /

しかし、2012年に電子メールオプションが減価償却されて以来、イベントログで利用可能な値を渡す明確な方法を見つけることができません。例として、Windows 2008で電子メールを介して報告できる値を次に示します。RDPログイン成功イベントID:$(eventRecordID)システム:$(WorkstationName)差出人:$(IpAddress)作成者:$(TargetUserName)

これらをアクションプロパティの[引数の追加]フィールドの下に引数として渡してみました(powershellをプログラム/スクリプトとして使用): "-noprofile -executionpolicy override -file C:\ Windows\System32\email.successful.rdp.login .ps1 $(IpAddress) "

誰かがWindows2012でこれを達成する方法について何かアイデアがありますか?最後のイベントを照会してファイルとしてエクスポートし、それを結果の電子メールに添付することは可能だと思いますが、データを抽出するより洗練された方法があると思います。 2008年にできるので、2012年になると思います。

[1]:

1
mart

これは少し長いものになるでしょう、うまくいけばそれは理にかなっています。

テスト環境で4625の監査を行っていません。この例では、代わりにイベントID4624を使用します。 4625と1142は同じである必要があります。

イベントログを取得するには、以下を使用しています

[dc1]: PS C:\Users\Administrator\Documents> Get-WinEvent -FilterHashtable @{LogName ='security'; ID = 4624}

ProviderName: Microsoft-Windows-Security-Auditing

TimeCreated                     Id LevelDisplayName Message
-----------                     -- ---------------- -------
17/01/2018 7:43:23 PM         4624 Information      An account was successfully logged on....
17/01/2018 7:42:23 PM         4624 Information      An account was successfully logged on....
17/01/2018 7:41:36 PM         4624 Information      An account was successfully logged on...

また、Select-First 1を使用して、最初のイベントオブジェクトのみを使用しています。これらのイベントのいずれかでGet-Memberを実行すると、メソッド、プロパティのMemberTypeと、必要なものNotePropertyが提供されます。

[dc1]: PS C:\Users\Administrator\Documents> Get-WinEvent -FilterHashtable @{LogName ='security'; ID = 4624} | Select-Object -First 1 | Get-Member
TypeName: System.Diagnostics.Eventing.Reader.EventLogRecord
Name                 MemberType   Definition
----                 ----------   ----------
Dispose              Method       void Dispose(), void IDisposable.Dispose()
Equals               Method       bool Equals(System.Object obj)
FormatDescription    Method       string FormatDescription(), string 
FormatDescription(System.Collections.Generic.IEnumerable[System.Object] values)     
GetHashCode          Method       int GetHashCode()
GetPropertyValues    Method       System.Collections.Generic.IList[System.Object] 
GetPropertyValues(System.Diagnostics.Eventing.Reader.EventLogPropert...
GetType              Method       type GetType()
ToString             Method       string ToString()
ToXml                Method       string ToXml()
**Message              NoteProperty string Message=An account was successfully logged on....**                                                               
ActivityId           Property     System.Nullable[guid] ActivityId {get;}
Bookmark             Property     System.Diagnostics.Eventing.Reader.EventBookmark Bookmark {get;}

これを変数に割り当てて、情報を抽出できるようにします。

[dc1]: PS C:\Users\Administrator\Documents> $event = Get-WinEvent -FilterHashtable @{LogName ='security'; ID = 4624} | Select-Object -First 1

これに対してGet-Memberを実行すると、TypeName:System.Stringになり、文字列として使用できます。

[dc1]: PS C:\Users\Administrator\Documents> $event.Message | Get-Member
   TypeName: System.String

この場合の$ event.messageには、ほとんどのイベントID情報が含まれています。小さなスニペットを以下に示します。

dc1]: PS C:\Users\Administrator\Documents> $event.Message
An account was successfully logged on.

Subject:
    Security ID:        S-1-0-0
    Account Name:       -
    Account Domain:     -
    Logon ID:       0x0

Logon Information:
    Logon Type:     3
    Restricted Admin Mode:  -
    Virtual Account:        No
    Elevated Token:     Yes

Impersonation Level:        Impersonation

New Logon:
   Security ID:     S-1-5-18
   Account Name:        DC1$
   Account Domain:      TIMHAINTZ.COM

$ event.messageのすべてを電子メールで送信したくない場合は、RegExを使用して必要なビットを選択できます。アカウントドメイン:セクションを取得する例を以下に示します。

[dc1]: PS C:\Users\Administrator\Documents> $regexevent = ([regex]::Matches( $event.Message, '(?<=Account\sDomain:\s\s).+').value)
[dc1]: PS C:\Users\Administrator\Documents> $regexevent
-
TIMHAINTZ.COM

上記の例では、Account Domain:が2回表示されるため、RegExはそれを2回検出します。 -およびTIMHAINTZ.COM。

マートのコメントによる Evend ID 1149の正しいログを取得するには、以下のコードを参照してください。

Get-WinEvent -FilterHashtable @{LogName ='Microsoft-Windows-TerminalServices-RemoteConnectionManager/‌​Operational'; ID = 1149}

お役に立てれば。

ありがとう、ティム。

1
Tim Haintz