朝何時にログオンしたか知りたいことだってある
function Get-FirstLogonTime {
[CmdletBinding()]
param(
[parameter(Mandatory=$false,Position=0,ValueFromPipelineByPropertyName)]
[DateTime[]] $Date = $(Get-Date)
)
begin {
if (-not $IsAdmin) {
Write-Error '管理者特権で実行してください'
break
}
$InstanceId = 4624 # ログオンのInstanceId
$result = @()
}
process {
foreach ($d in $Date) {
# 検索範囲を指定
$After = $d.Date
$Before = $After.AddDays(1)
$LogonEvent = Get-EventLog -LogName Security -InstanceId $InstanceId -After $After -Before $Before | ? {
$_.Message -match ('アカウント名:\s+' + $env:USERNAME + '\s+')
}
if ($LogonEvent.Length -gt 0) {
Write-Verbose "$($After.ToShortDateString())の$($env:USERNAME)によるログオンレコードが$($LogonEvent.Length)件見つかりました"
$result += $LogonEvent[-1].TimeWritten
} else {
Write-Verbose "$($After.ToShortDateString())の$($env:USERNAME)によるログオンレコードが見つかりませんでした"
}
}
}
end {
if ($result.Length -gt 0) {
return $result
}
Write-Error 'ログオンレコードが見つかりませんでした'
return $null
}
}