Powershell-ファイルへのログ

こんにちは、ユーザー名$



画面への情報の通常の出力やファイルへの書き込みの代わりに使用する関数を共有したいと思います。



この関数は、情報が画面とログ(テキスト)の両方に表示されるように作成されており、標準の書き込みホストを置き換えることを目的としています。





グッズから:





この関数はグローバルに宣言されます。つまり、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つの欠点しかありません。「同期」です。つまり、同時にログファイルに書き込む問題を処理しません。 これを変更する方法を知っている人はコメントしてください。



All Articles