勤怠管理をごにょごにょする

Windowsのイベントログから一ヶ月の日ごとのPC開始時間・終了時間を取得し、表示するスクリプトです。
※注　このスクリプトを使用し生じる結果に対し、私stofuは一切の責任を負いかねます。自己責任で使用してください。

<pre>
PS *:\*********> .\Get-TimesAboutComputerPower.ps1 11
2015/11/01(日) no data
2015/11/02(月) **:**:** **:**:**
2015/11/03(火) no data
2015/11/04(水) **:**:** **:**:**
2015/11/05(木) **:**:** **:**:**
2015/11/06(金) **:**:** **:**:**
2015/11/07(土) no data
2015/11/08(日) no data
2015/11/09(月) **:**:** **:**:**
2015/11/10(火) **:**:** **:**:**
2015/11/11(水) **:**:** **:**:**
2015/11/12(木) **:**:** **:**:**
2015/11/13(金) **:**:** **:**:**
2015/11/14(土) no data
2015/11/15(日) no data
2015/11/16(月) **:**:** **:**:**
2015/11/17(火) **:**:** **:**:**
2015/11/18(水) **:**:** **:**:**
2015/11/19(木) **:**:** **:**:**
2015/11/20(金) **:**:** **:**:**
2015/11/21(土) no data
2015/11/22(日) no data
2015/11/23(月) no data
2015/11/24(火) **:**:** **:**:**
2015/11/25(水) **:**:** **:**:**
2015/11/26(木) **:**:** **:**:**
2015/11/27(金) **:**:** **:**:**
2015/11/28(土) no data
2015/11/29(日) no data
2015/11/30(月) **:**:** **:**:**
</pre>



```powershell:Get-TimesAboutComputerPower.ps1
[CmdletBinding()]
Param(
   [Parameter(Position=0)]
      [string]$Month = (Get-Date).Month ,
   
   [Parameter(Position=1)]
      [string]$Year  = (Get-Date).Year
)

function Get-DaysOfMonth($month , $year){
   $firstDay = Get-Date -Year   $year  `
                        -Month  $month `
                        -Day    1
   $lastDay  = Get-Date -Year   $year  `
                        -Month  $month `
                        -Day    $firstDay.AddMonths(1).AddDays(-1).Day
   1..($lastDay.Day) | % {
#-Millisecond<Int32>
#Specifies the milliseconds in the date. 
#Enter a value from 0 to 999. 
#The default is the current number of milliseconds.
#This parameter is introduced in Windows PowerShell 3.0. 
#Win7_PSVersion2.0だと-Millisecond<Int32>に対応していません。
      if($PSVersionTable.PSVersion -eq "2.0") {
         Get-Date -Year        $year  `
                  -Month       $month `
                  -Day         $_     `
                  -Hour        0      `
                  -Minute      0      `
                  -Second      0 
      } else {
         Get-Date -Year        $year  `
                  -Month       $month `
                  -Day         $_     `
                  -Hour        0      `
                  -Minute      0      `
                  -Second      0      `
                  -Millisecond 0
      }
   }
}
function Get-TimesAboutComputerPower($month , $year){
   $event = Get-EventLog -LogName System
   
   Get-DaysOfMonth $month $year | % {
      $today = $_
      $nextday = $today.AddDays(1)
      $todaysEvent = $event | ? {
         # 今日 <= 当該イベント書き込み時間 < 明日
         $today -le $_.TimeWritten -and $_.TimeWritten -lt $nextday
      }
      if($todaysEvent -ne $null) {
          # PC開始・終了時間表示（イベントログは降順なので終端から取得）
            $today.ToString("yyyy/MM/dd(ddd)") `
          + " " + $todaysEvent[-1].TimeWritten.ToString("HH:mm:dd") `
          + " " + $todaysEvent[0].TimeWritten.ToString("HH:mm:dd")
      } else {
            $today.ToString("yyyy/MM/dd(ddd)") + " no data"
      }
   }
}

## Entry Point
#$year = 2015
#$month = 11

Get-TimesAboutComputerPower $month $year
```