PowerShell

【PowerShell】ログの処理方法について

こんにちは!SE ブログの相馬です。

 

 

 

今回は、PowerShell でログの処理方法について書いてみました。

 

 

何かの処理結果をログとして残す事は重要です。処理が成功したのか失敗したのか、その結果をログファイルとして PC やサーバー上の指定のフォルダ内に溜め込んでおくようなイメージです。

 

 

そこでログの出力などどのように書いたら良いのか、一つの例として参考になればという事で、皆さまのお役に立てれば良いと思います。

 

 

また、前提としてファイルやフォルダの操作する知識が必要ですので、もし分からないようであれば以下の記事を読んでいただいてから進んで頂く事をお勧めします。

 

 

 

 

サンプル処理内容

 

 

それではいきなりですがサンプルを見てみましょう。適当ではありますが情報ログ、警告ログ、エラーログという文字列をログファイルに入れて出力する内容です。

 

 

ログの内容を変数にどんどん格納してゆかなければなりませんので、変数は配列化しなければなりませんが、PowerShell は省略しても問題ないようですが、ここでは一応明示的に書いてあります。また、ログの内容は配列に += で追加で代入しなければなりません。= で書くと前のログが上書きされてしまいますので注意が必要です。

 

 

また、ログファイルにタイムスタンプを付けましょう。いつログが出力されたか後で分からないといけませんよね。

 

 

 

 

処理結果、以下のように D:\Log にファイル (log_yyyy-mm-dd) が出力されました。※PC の日付を和暦で設定しているので表示では 01 になっています。

 

 

 

ログの内容です。代入した文字列が全て入っていますね。

 

 

 

 

ログの出力方法

 

 

ログファイルですので、拡張子 .log を使います。また $Msg に溜め込んだログを Out-File コマンドレットでファイルとして保存する方法になります。

 

 

 

また、出力したログをパイプでファイル出力に渡しているので、その辺はパイプについて理解されていたほうが良いでしょう。

 

 

 

 

関数化してみる

 

 

ログの出力処理はスクリプト内で何度も使われる場合があります。というか使われます。

 

 

処理に成功したらログに出力する、失敗してもログに出力するのですが、処理内容の中で失敗した場合のほうが明らかに多いためにエラー処理の中で何度も再利用する事になります。

 

 

そのたびに上の処理内容をエラー処理の中に都度書くと処理内容が多くなってしまうばかりか、保守性によくありません。例えば、エラー処理毎にログの処理を書いているスクリプトをリリースした場合、その後にログの処理を変更する事になった場合、ログの処理を書いた分全てを修正しなければなりません。

 

 

これは労力が要りますし、時間の無駄でもあり、一部のログの内容を修正しわすれてしまって処理が失敗してしまったという人的ミスになりかねません。これは避けたいところですよね。

 

 

このように、処理を再利用しなければならない場合は関数化してしまえば 1 つの処理内容だけメンテナンスすれば良くなりますので効率的です。

 

 

関数について知識がまだ無い方は、以下の記事を理解してから進んで頂く事をお勧めします。

 

 

 

 

ここでは、テキストファイルの中にユーザー名があると仮定して、そのテキストファイルがあれば Import-Csv コマンドレットで読み込んでから ForEach-Object を使い繰り返し処理で AD のグループにユーザーを追加する処理を書いてみました。

 

 

 

 

まとめ

 

 

以上になります。いかがでしょうか。

 

 

スクリプトを書くにあたり、ログの処理は必須ですのでこの処理内容には慣れておくと良いでしょう。また関数に慣れて再利用できるようにもしておきましょう。

 

 

関数は慣れないとなかなか使えないと思います。私がそうでしたが最初は、function の関数と一緒に指定する引数が最初は分かりにくいのかなと思ったりします。あと、関数を実行する際に指定する引数についても分かりにくいと思います。

 

 

これは慣れるしかないので、コードを書いて実行する事を繰り返しやっていけば理解できるようになりますので心配ないと思います。とにかく継続してスクリプトを書いてみましょう。

 

 

それでは最後までお読みいただきありがとうございました!

 

  • この記事を書いた人

そーまん

セキュリティエンジニアやってます。
ブログ歴3年。PVは月15万PV程度。
趣味はボクシング、筋トレ、登山です。
穏やかで人見知りな性格です。

人気記事

1

こんにちは!そーまんです。 今回は、PC に適用されている GPO を確認する方法について書きました。 本題に入る前に、一応参考までにGPOの適用タイミングについての記事をここに貼りましたので、必要に ...

2

こんにちは!そーまんです。 今回は sysprep について、全体的に PC をセットアップする観点から書いてみました。長々と書いてあります。まずは前置きからです。 まずはじめに 組織では PC のラ ...

3

こんにちは!そーまんです。 今回は、グループポリシー (GPO) を使って、特定のコンピューターに対して、ドメインユーザーに ローカル管理者権限 (以下は特権と記載) を付与する方法について書きました ...

4

こんにちは!そーまんです。 今回は、Windows サインイン後に一時ユーザープロファイルが読み込まれてしまった場合の解決方法について書きました。 Windows 10 の検証環境をいじってたらサイン ...

5

こんにちは!そーまんです。 今回は、ユーザープロファイルを削除する方法について書いてみました。 企業の場合よくあることですが、1 台の PC を共有 PC として複数人で使ったり、また余り無いかもしれ ...

6

こんにちは!SE ブログの相馬です。       今回は、繰り返し文について書いてみました。PowerShell では他のプログラミング言語同様、繰り返し処理を行うことが ...

7

コマンドを使って CPU とメモリの使用率をデータで取得してみましたので、例えば PC のトラブルシューティングで問題を再現させる際にデータを取得しておくと、原因の特定に役立つ場合があるかと思います。

8

既存の PC と同じ構成で別のメーカーの PC でマスターイメージを作る際、インストールされているアプリを同一にする為に必要になるかと思います。

9

企業で多くの GPO が適用されている環境では、PC に GPO が適用されなかったりする問題が発生する場合があるかと思います。その中でも、コンピューターの構成またはユーザーの構成のどちらかで、...

10

こんにちは!そーまんです。 今回は、Windows Server 2019 で NTP サーバーと同期する方法について書きました。 NTP サーバーの必要性や時刻同期の重要性を理解することは社内のシス ...

-PowerShell
-,