Powershell を使用して、Windows イベント ログからログオンおよびログオフ イベントを読み取り、Active Directory から各ユーザーの対応する情報を取得するにはどうすればよいですか?
8545 次
2 に答える
6
次のスクリプトは、システム ログから Winlogon イベントを読み取り、各ユーザーの SID に基づいて AD から情報を取得し、生成された HTML ページに結果を表示します。各 AD ルックアップの結果は、AD サーバーへの不要なラウンドトリップを防ぐためにキャッシュされます。
# event id 7001 is Logon, event id 7002 is Logoff
function WinlogonEventIdToString($EventID) {switch($EventID){7001{"Logon";break}7002{"Logoff";break}}}
# look up SID in Active Directory and cache the results in a hashtable
$AdUsers = @{}
function SidToAdUser($sid) {
$AdUser = $AdUsers[$sid]
if ($AdUser -eq $null) {
$AdUser = $AdUsers[$sid] = [adsi]("LDAP://<SID=" + $sid + ">")
}
return $AdUser
}
$outputFilename = [System.IO.Path]::GetTempPath() + "DisplayLatestLogonEvents.html"
# the first Select extracts the SID from the event log entry and converts the event id to a descriptive string
# the second Select is responsible for looking up the User object in Active Directory, using the SID
# the final Select picks the various attribute data from the User object, ready for display in the table
# to retrieve only recent log entries, one can use something like this in Get-EventLog: -After (Get-Date).AddDays(-14)
Get-Eventlog -Logname "System" -Source "Microsoft-Windows-Winlogon" -InstanceId 7001,7002 `
| Select TimeGenerated, @{n='Operation';e={WinlogonEventIdToString $_.EventID}}, @{n='SID';e={$_.ReplacementStrings[1]}} `
| Select TimeGenerated, Operation, @{n='AdUser';e={(SidToAdUser $_.SID)}} `
| Select TimeGenerated, Operation, `
@{n='Username';e={$_.AdUser.sAMAccountName}}, `
@{n='Full name';e={$_.AdUser.firstname + " " + $_.AdUser.lastname}}, `
@{n='Title';e={$_.AdUser.title}}, `
@{n='Department';e={$_.AdUser.department}}, `
@{n='Company';e={$_.AdUser.company}} `
| ConvertTo-HTML -Head "<style>td, th { border:1px solid grey }</style>" | Out-File $outputFilename
# this will open the default web browser
Invoke-Expression $outputFilename
于 2014-05-29T13:33:29.103 に答える