Windows PowerShellの勉強その8です。
前回の勉強その7で特定のイベントログの件数をカウントするときに、先頭に@を付けて配列として扱いました。
これ→@(Get-EventLog ・・・).length
実際にやってみるとわかるのですが、(Get-EventLog ・・・).lengthで件数カウントした結果がゼロ件の場合、何も値が返ってこないことがありました。
その場合でも先頭に@を付けて配列の1つ目の値として扱うと、ゼロが返ってきました。
この辺の理屈はよくわからないのですが、先頭に@を付けた方が安全のようです。
システムイベントログの過去24時間のソース:Kernel-Powerの件数をカウントします。
Microsoft-Windows-Kernel-Powerはコンピュータをスリープ状態にするときに記録されます。
Windows 7 x64 SP1のWindows PowerShellのコマンド画面です。
先頭に@を付けないと、何も結果が表示されずにプロンプト(PS C:\>)に戻ってしまいます。
PS C:\> (Get-EventLog -logname system | Where-Object { $_.TimeGenerated -gt (get-date).addhours(-24)} | Where-Object { $_.Source -eq "Microsoft-Windows-Kernel-Power" }).length PS C:\> |
Windows 7 x64 SP1のWindows PowerShellのコマンド画面です。
先頭に@を付けると、0(ゼロ)が結果として返ってきます。
PS C:\> @(Get-EventLog -logname system | Where-Object { $_.TimeGenerated -gt (get-date).addhours(-24)} | Where-Object {$_.Source -eq "Microsoft-Windows-Kernel-Power" }).length 0 PS C:\> |
同じことを最新OSである、Windows 8 Consumer Perviewでやってみます。
Windows 8 x64 ConsumerpreviewのWindows PowerShellのコマンド画面です。
先頭に@を付けなくても、ちゃんとゼロ件と表示されます。
PS C:\> (Get-EventLog -logname system | Where-Object { $_.TimeGenerated -gt (get-date).addhours(-24)} | Where-Object { $_.Source -eq "Microsoft-Windows-Kernel-Power" }).length 0 PS C:\> |
Windows 8 x64 ConsumerpreviewのWindows PowerShellのコマンド画面です。
先頭に@を付けても、もちろんゼロ件と表示されます。
PS C:\> @(Get-EventLog -logname system | Where-Object { $_.TimeGenerated -gt (get-date).addhours(-24)} | Where-Object {$_.Source -eq "Microsoft-Windows-Kernel-Power" }).length 0 PS C:\> |
Windows 7 SP1のPowerShellで先頭に@を付けないと、意図した値が返って来なう場合があるのは、これはOS(PowerShell)の問題なのかな。
まあ、やはり@付きで配列として扱った方が安全のようですね。
PowerShellで@付きの配列については、ここがわかりやすかったです。
http://ufcpp.net/study/powershell/array.html・++C++; //未確認飛行 C > Windows PowerShell > 配列