powershellスクリプトでイベントログから勤務時間を知る

いつもイベントビューアで見ているのだが、
ちゃっとスクリプトで表示できないかなと

powershellを起動

管理者として

スクリプト実行はデフォルトで許可されていないので

Set-ExecutionPolicy RemoteSigned

y


---
$month=1
$lastday=30

$month=[int]$Args[0]

if($month -eq (1 -or 3 -or 5 -or 7 -or 8 -or 10 -or 12)){
        $lastday=31
}else{
        if($month -eq 2){
                $lastday =28
        }else{
                $lastday=30
        }
}

$LogName = "System"

$StartTime = New-Object System.DateTime 2019,$month,01,00,00,00,00

$EndTime = New-Object System.DateTime 2019,$month,$lastday,23,59,59,59

$EventsList = Get-WinEvent -FilterHashTable @{LogName=$LogName; StartTime = $StartTime; EndTime = $EndTime}

$EventsList = $EventsList |Where-Object {($_.Id -eq 12 -and $_.ProviderName -eq "Microsoft-Windows-Kernel-General") -or ($_.Id -eq 109)}

$EventsList | Format-Table -Property TimeCreated
---

eve.ps1 というファイル名にし、月を指定する。

実行例

PS C:\users\taro> .\eve.ps1 3

TimeCreated
-----------
2019/03/28 19:00:30
2019/03/28 19:00:09
2019/03/23 6:02:26
2019/03/23 6:02:05
2019/03/21 18:23:56
2019/03/21 18:23:31
2019/03/14 17:22:30
2019/03/14 17:22:10
2019/03/13 21:50:36
2019/03/13 21:50:16
2019/03/13 12:39:06
2019/03/13 12:38:46
2019/03/13 2:31:16
2019/03/13 2:31:00
2019/03/12 17:37:02
2019/03/12 17:36:44
2019/03/11 8:46:52
2019/03/11 8:46:32
2019/03/10 15:42:36
2019/03/10 15:42:13
2019/03/10 4:02:14
2019/03/10 4:01:50
2019/03/10 3:51:38


並び順が降順なのと、終了時間が2回出るのがアレ

月を指定しないとエラーになるのもアレ

うるう年未対応、月末日の求め方がアレ

年が固定で書いてあるのがアレ


まあ、イベントビューアを見るのとあまり変わらないけど、
PowerShellでいろいろできることがわかった。