社内SEの徒然なる日記

powerShellでログ出力関数を作ってみた

死活監視のスクリプトに、ログの出力機能が欲しくなりました。バッチで作ってた時は、リダイレクト(>>)を使ってたんですけどpowerShellではどうしようかなぁ。

まず、ファイル出力する方法を調べました。どうやら、Out-Fileコマンドレットを使うことでファイル出力が可能なようです。

下記は、C:\My Documents\test.txt に 'test'を書き込むサンプルです。
'test' | out-file 'C:\My Documents\test.txt'


問題は、文字コードがUnicodeで作成されることです。そこで-Encodingで文字コードを指定します。選択できるのは、Unicode、UTF7、UTF8、UTF32、ASCII、BigEndianUnicode、Default、OEM です。
'test' | out-file 'C:\My Documents\test.txt' -Encoding ASCII


ログ出力なので、追記で書き込みたいです。それは、-appendを指定すれば可能のようです。
'test' | out-file 'C:\My Documents\test.txt' -Encoding Default -append


ここまでの事を踏まえて、ログ出力用の関数を作るとこんな感じになりました。

# ----------------------
# ログ出力用関数
# ----------------------
# 【機能概要】
# メッセージを、画面とテキストファイルに追加書込みします。
# 出力時に日時を追加表示することも可能です。
# 【引数】
# msg 表示するメッセージ
# file 出力するテキストファイルの完全パス
# dspTimeFlag メッセージへの日時に追加出力(0:追加しない, 1:追加する)

function msgOutput([String]$msg, [String]$file, [boolean]$dspTimeFlag) {
 if ($dspTimeFlag) {
  $WkLogTimeMsg = Get-Date -format yyyy/MM/dd-HH:mm:ss
  Write-Host ($msg + ' : ' + $WkLogTimeMsg)
  Write-Output ($msg + ' : ' + $WkLogTimeMsg) | out-file $file Default -append
 } else {
  Write-Host $msg
  Write-Output $msg | out-file $file Default -append
 }
}


んで、使い方はこんな感じ。標準出力とログファイルの両方に出力できるようになりました。
# msgOutput関数で、ログと画面への出力を同時に行います。
msgOutput '□□□□□□□□□□□□□□□□□□□' $LogName $LogDateFalse
msgOutput 'ListWorksのバックアップを開始します。' $LogName $LogDateTrue
msgOutput '□□□□□□□□□□□□□□□□□□□' $LogName $LogDateFalse


投稿記事の一覧:http://harikofu.web.fc2.com/

--- blog end ---

スポンサードリンク

PageTop

コメント


管理者にだけ表示を許可する