
ってことで、下のようなsample.txtがあったとして・・
こんな感じで出力させます。

というわけで以下、ソース
<#
.SYNOPSIS
ログを視覚化
.DESCRIPTION
Loginを時間ごとにデータから取得し、#でグラフを作る
.LINK
.NOTES
グラフを作るおともに。
.EXAMPLE
#>
function get-logmater {
param ($logdata)
$result=0..23 | % {
$tlogin=$null
$tlogout=$null
$tLogin= $logdata | Select-String -Pattern "^.* $_\:.*Login$"
$tLogout= $logdata | Select-String -Pattern "^.* $_\:.*Logout$"
if (($tlogin -ne $null) -or ($tlogout -ne $null)){
$output = New-Object psobject
$output | Add-Member noteproperty time $_
$output | Add-Member noteproperty login $tLogin
$output | Add-Member noteproperty logout $tLogout
$output
}
}
function get-count {
param($source)
if($source.count -eq $null) {
write-output 0
}else{
$source.count
}
}
$logincount=0..$($result.count-1) | % {
get-count @($result[$_].login)
}
$logoutcount=0..$($result.count-1) | % {
get-count @($result[$_].logout)
}
$a=$logincount | Measure-Object -Maximum -Average
$b=$logoutcount | Measure-Object -Maximum -Average
0..$($logincount.count-1) | % {
"{0:00}時 In {1:00}回 {2}" -F $($result[$_].time),$($logincount[$_]),$("#"*$($logincount[$_]/2))
"{0:00}時 Out {1:00}回 {2}" -F $($result[$_].time),$($logoutcount[$_]),$("*"*$($logoutcount[$_]/2))
}
write-output "【 Login MAX $($a.maximum) 回/時 】【Logoff MAX $($b.maximum) 回/時】"
}
function get-check {
param($ckdata)
if(-not $ckdata) {
Write-Output "データはありません"
}else {
get-logmater $ckdata
}
}
Write-Output "ログ結果"
#$tday=$(Get-Date).adddays(-1).tostring("yyyy/MM/dd")
#$data=gc C:\Users\buso\Desktop\wdirary\aa\sample.csv | ? { $_ -like "$tday*" }
$data=gc C:\Users\buso\Desktop\wdirary\aa\sample.txt
get-check $data
そのまま数をメーターに反映させると、メーターが長くなりすぎるので、1/2の長さとなるよう調整。今回は、sample.txtだけを読み込みましたが、使い方によっては複数のファイルを読み込んでアクセスログの合算をメーター化させることも可能です。
スポンサーリンク