stuncloud
11/12/2014 - 8:38 AM

朝何時にログオンしたか知りたいことだってある

朝何時にログオンしたか知りたいことだってある

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
    }
}