前提
オンプレミスWindowsServerでRemoteDesktopGatewayServer(RDGW)を運用しています。
RDGWはインターネット側環境から専用LANを通った先の閉域網環境のDMZに配置されています。ユーザはインターネット側環境からWindows標準のリモートデスクトップ接続クライアントを使い、このRDGWで認証を行い、閉域網上の個人のマシンにRemoteDesktop接続を行います。
運用管理者としてはこのRDGWに接続してきたユーザのログの一覧というのが欲しくなると思います。しかし、WindowsServerのRDマネージャやイベントログビューアで閲覧していてはとても内容解析や統計処理ができません。またイマドキ個々のイベントのxmlを集めて、さらにそこからそれをどうこうするというのもちょっとやる気が起きず…
今回の内容:RD接続ログのCSV出力
そこで、RD接続してきて認証を試行したユーザのID、接続元のIP、接続日時といった情報をPowerShellでCSV出力するスクリプトを作成しました。以下のスクリプトを任意の場所で実行すればその場所にログCSVが出力されます。
$hostname = hostname
$timestamp = Get-Date -Format "yyyyMMdd"
$filename = $hostname + "_" + $timestamp +".csv"
Get-WinEvent -LogName "Microsoft-Windows-TerminalServices-Gateway/Operational" | Where-Object{ $_.Id -eq 302 } | ForEach-Object{
$ipAddress = $_.Properties[1].Value
$date = $_.TimeCreated
$user = $_.Properties[0].Value
[PSCustomObject]@{
date = $date
ip = $ipAddress
user = $user
}
} | Export-Csv -Path .\$filename -NoTypeInformation -Encoding UTF8
目的に応じてイベントログ名、フィルタするイベントIDやCSVに出力する情報は修正してください。
イベントIDは300は認証され接続が許可されたことを示し、302は単に接続が試行されたことを示すらしいです。また、303は切断時のログです。ただし、イベントIDによってプロパティの構造は異なるかもしれません(未確認)。
【実行結果例:WindowsServer2016で実行】
"date","ip","user"
"2024/04/20 12:34:56","192.168.10.199","domain\tanaka"
"2024/04/20 12:46:57","192.168.10.234","domain\sato"
"2024/04/20 12:47:57","192.168.10.123","domain\yamada"
...