このブログを検索

ラベル イベントログ の投稿を表示しています。 すべての投稿を表示
ラベル イベントログ の投稿を表示しています。 すべての投稿を表示

2019/04/16

powershellでイベントログから勤務時間を知る (改良版)

年を自動取得 月は指定可、指定がなければ前月 うるう年対応
echo ("args: " + $args.Length)

$myyear = (Get-Date).year

echo ("myyear: " + $myyear)

if ($args.Length -lt 1) {
        $lastday=(Get-Date -Day 1).AddDays(-1).day
        $lastmonth=(Get-Date -Day 1).AddDays(-1).month
}
Else {
        $mymonth = [Int]$args[0]
        $nextmonth=(Get-Date -Year $myyear -Month $mymonth -Day 1).AddMonths(1).Month
        $lastday=(Get-Date -Year $myyear -Month $nextmonth -Day 1).AddDays(-1).day
        $lastmonth=$mymonth
}



echo ("lastday: " + $lastday)

echo ("lastmonth: " + $lastmonth)


$LogName = "System"

$StartTime = New-Object System.DateTime $myyear,$lastmonth,01,00,00,00,00

$EndTime = New-Object System.DateTime $myyear,$lastmonth,$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

$EventsList | Format-List -Property  LogName, MachineName, LevelDisplayName, TimeCreated, ProviderName, Id, UserId, Message

↓ もっと簡単な方法
 https://monqy.blogspot.com/2019/04/windows.html

2019/04/06

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でいろいろできることがわかった。