2016年10月11日火曜日

【PowerShell】Windows起動、終了時刻を表示

■Win10
Get-EventLog -LN System |
    % EventID -in (7001, 7002) |
    select TimeWritten, EventID, Message -F 20
Read-Host "Input Key"
Read-Host "Input Key"

※高速スタートアップが有効だと、6005,6006は起動、終了時に記録されないとのこと。そのため、ログオン・ログオフ時刻を表示する。
また、Read-Host×2は-Fが非同期になってしまう対策。

◆Windowsの起動・終了時刻を表示するスクリプト(正確にはイベントログ開始・終了時刻)。
①Win10 PowerShell5.1.1※1
Get-EventLog -LogName System |
    where {($_.EventID -eq 6005) -or ($_.EventID -eq 6006)} |
    select -First 10 |
    foreach { Write-Host $_.TimeWritten, $_.Message }

Read-Host "Enterキーを入力して下さい。"

②Win10 PowerShell5.1.1(別解)※1
Get-EventLog -LogName System |
    where EventID -in (6005, 6006) |
    select -First 10 |
    foreach { Write-Host $_.TimeWritten, $_.Message }

Read-Host "Enterキーを入力して下さい。"

③PowerShell3.0、4.0、5.0※2(①~④中で一番簡単な方法)
Get-EventLog -LN System |
    where EventID -in (6005, 6006) |
    select TimeWritten, Message -F 10 

Read-Host "Enterキーを入力して下さい。"

④PowerShell2.0
Get-EventLog -LogName System |
    where {($_.EventID -eq 6005) -or ($_.EventID -eq 6006)} |
    select TimeWritten, Message -First 10 

Read-Host "Enterキーを入力して下さい。"

◆①、②の実行結果


■③、④の実行結果


※1 select TimeWritten, Message -First 10は実行できるはずだが、実行すると何故かRead-Hostが先に実行され、その後イベントログが表示されてしまう。仕方無く、foreachとWrite-Hostを使っている。しかし、PowerShell3.0以下ではselect TimeWritten, Message -First 10が動作する。

※2 動作するバージョンと動作しないバージョンがある。Win10が駄目っぽい。

  • ×Win10(2016/10/18現在) PowerShell5.1.14393.206
  • ×Win10 PowerShell5.0.10240.16384
  • 〇Win8 PowerShell3.0
  • 〇Win7 PowerShell5.0.10586.117
  • 〇Win7 PowerShell4.0

0 件のコメント:

コメントを投稿