画面への情報の通常の出力やファイルへの書き込みの代わりに使用する関数を共有したいと思います。
この関数は、情報が画面とログ(テキスト)の両方に表示されるように作成されており、標準の書き込みホストを置き換えることを目的としています。
グッズから:
- イベントの正確な日付と時刻
- イベントの種類
- エラーと警告を数える
- カラーでの情報出力(イベントのタイプに応じて)
- ログ形式はCSVと互換性があります([TAB]で区切られます)
この関数はグローバルに宣言されます。つまり、1つのセッション内で一度初期化するだけで十分です-ファイルを読み取ります。
ユースケース:
write-log "Hello !"
14.07.2011 00:22:15 info Hello !
write-log -message "Hello !" -type warning
write-log -message "Hello !" -type error -silent
, :
write-log -message "Hello !" -type CustomType logfile c:\enter\your\path\here.log
エラーと警告の数(セッション全体または変数が手動でリセットされるまで)は、 $ errorcountと$ warningcountに保存されます。
個人的には、この関数はset-functions.ps1ファイルに保存されており、スクリプトでは次のように呼び出しています。
私のスクリプト(必要な場合)の始まり:
$ver="0.1" $ProgrammName="SomeScriptName" try { # ./Set-Functions.ps1 # $global:logfilename = "log`\"+ $ProgrammName +".log" write-log "$ProgrammName (ver $ver) started." } catch { return "Error loading functions Set-Functions.ps1" }
書き込みログ関数の本体:
$ver = "0.4" $dt=Get-Date -Format "dd-MM-yyyy" New-Item -ItemType directory log -Force | out-null # $global:logfilename="log\"+$dt+"_LOG.log" [int]$global:errorcount=0 # [int]$global:warningcount=0 # function global:Write-log # - . {param($message,[string]$type="info",[string]$logfile=$global:logfilename,[switch]$silent) $dt=Get-Date -Format "dd.MM.yyyy HH:mm:ss" $msg=$dt + "`t" + $type + "`t" + $message #: 01.01.2001 01:01:01 [tab] error [tab] Out-File -FilePath $logfile -InputObject $msg -Append -encoding unicode if (-not $silent.IsPresent) { switch ( $type.toLower() ) { "error" { $global:errorcount++ write-host $msg -ForegroundColor red } "warning" { $global:warningcount++ write-host $msg -ForegroundColor yellow } "completed" { write-host $msg -ForegroundColor green } "info" { write-host $msg } default { write-host $msg } } } }
この例には1つの欠点しかありません。「同期」です。つまり、同時にログファイルに書き込む問題を処理しません。 これを変更する方法を知っている人はコメントしてください。