“ロギングを始める”シリーズでは、c#、Java、Python、Ruby、Ruby on Rails、Nodeなど、多くの言語とフレームワークのロギングについてすでに取り上げています。js、Symfony、Kotlin、Flask、Angular、およびLaravel。 今日は、このシリーズに別のものを追加します:PowerShell。PowerShellはスクリプト言語であり、他のものは完全なアプリケーションプログラミング言語またはフレームワークと見なすことができます。
リストに追加する, まだユーで十分に強力できることをシステム複合体および重要な保証す。
ユーくを用いて行う重要なメンテナンス作業コンピュータやサーバー 管理者は、これらのスクリプトがうまく実行されたかどうかを知ることが重要です。
独自のロギング関数を記述することにより、PowerShellで非常に基本的な方法でログを記録する方法を見ていきます。 次に、PowerShellからのログ記録が便利な理由について説明します。 また、何を記録すべきか、何を記録すべきではないかについても説明します。, 最後に、我々はあなたのログの生活を容易にする二つの異なるオプションを見ていきます。
シンプルなPowerShellスクリプト
この非常に単純なPowerShellスクリプトから始めましょう。
この基本的なスクリプトは入力として整数を取ります。 次に、その数字の桁数の合計を作成します。 結果が一桁よりも長い場合は、一桁になるまで操作を再度実行します。,
物事を明確にするためのいくつかの例は次のとおりです。
45->4+5=9
397-> 3 + 9 + 7 = 19 ->1+9=10->1+0=1
3->3
このスクリプトをテキストファイルに入れ、recursiveSum.ps1として保存します。例えば45, 出力は9になります:
これは、例として機能するのに十分なシンプルなスクリプトですが、いくつかのロギングに興味がある もちろん、実際のPowerShellスクリプトははるかに複雑になり、さらにロギングの必要性が保証されます。
PowerShellにログインする最も簡単な方法
各ステップの結果をコンソールに書き込みましょう。 すでにWrite-Output文を使用してコンソールに何かを書き込んでいるので、再び簡単に使用できます。, ここで実行すると、次のような出力が表示されます。
それは素晴らしいことです! いくつかのロギングが進行中です。 ただし、これらのログ文は常に表示されます。 より複雑なプログラムで意味を示すものでない限りユーザーが知りたいのです。 おそらく、ユーザーに表示される詳細の量を制御できるようにすることも役に立ちます。 これがログレベルの出番です。,
PowerShellのログレベル
PowerShellには、次のような従来のログレベルにマップされるWrite-*ステートメントがいくつかあります。
Write-Verbose
Write-Debug
Write-Information
Write-Warning
Write-Error
Verbose
まずWrite-Verboseを見てみましょう。 中間ステップに関するメッセージをWrite-Verboseを使用するように変更できます。, ここでスクリプトを実行すると、中間ステップは表示されません。
しかし、-Verboseフラグを追加すると、ログが再び表示されます。
debug、information、およびwarning
debug、information、およびwarningのログレベルは、他の言語の従来のログフレームワークとは少し異なります。, 最初にいくつかの余分なステートメントを追加しましょう:
Write-Debug "This is a debug statement"Write-Information "This is an info statement"Write-Warning "This is a warning statement"
Write-Debugは、-Debugフラグを追加したときにのみ表示されます。 また、スクリプトの実行を停止し、続行するための確認を求めます。 これは、スクリプトをステップごとに実行するのに便利です。
しかし、警告と情報メッセージを表示するかどうかを制御できます。 Write-WarningおよびWrite-Informationコマンドは、-WarningActionおよび-InformationActionフラグを使用して制御できます。,seフラグは、警告メッセージのみが表示されます。
情報メッセージを表示したい場合は、-InformationAction Continueフラグを追加することで行うことができます。
警告を非表示にする場合は、-warningaction silentlycontinueオプションを使用できます。
error
最後に、write-errorがどのように機能するかを見てみましょう。, このようなステートメントをスクリプトに追加することができます。
Write-Error "Something went wrong"
このステートメントが実行されると、PowerShellはスクリプトの実行を停止し、役に立つかもしれないいくつかの詳細とともにエラーをコンソールに書き込みます。
アプリケーションロギングとは何ですか?
PowerShellスクリプトから一歩踏み出して、アプリケーションロギングが正確に何であるかを見てみましょう。, 私たちのシリーズの最初の投稿はそれをうまく定義しました:
アプリケーションロギングには、アプリケーションのランタイム動作に関する情報をより永続的なメディアに記録することが含まれます。
私たちはすでに最初の部分をやっています:言い換えれば、アプリケーションのランタイム動作に関する情報をキャプチャします。 私たちはプロセスの中間結果を示しています。 しかし、私たちは第二部をやっていません。 私たちはこの情報を永続的な媒体に記録していません。 PowerShellセッションを閉じると、この情報が失われました。 まずはそれをしましょう。,
ファイルへのロギング
このログ関数をスクリプトファイルに追加します。
Function Log { param( $msg ) Add-Content log.txt $msg}
文字列を取り込んでログに追加します。txtファイル。,P>
Log "Intermediate result: $($sum)"
これでスクリプトを実行でき、中間ステップを含むファイルが作成されます。
iv id=”7e59274407″しかし、スクリプトを複数回実行すると、ステートメントの長いリストになります。 行がいつログに記録されたかを知る方法はありません。 複数のスクリプトを含むより複雑なシナリオでは、ログ行がどこから来たのかを知る方法もありません。,、ps1ファイルから。 ログに記録できる情報がもっとあります。
ここでも、一歩下がって、ロギングで何を達成しようとしているのかを見てみましょう。
なぜログを記録するのですか?
PowerShellは、退屈でエラーが発生しやすい特定のタスクを自動化およびスクリプト化するためによく使用されます。 自動化は、より複雑なタスクに適用されると、実際に価値を提供し始めます。 しかし、これらの複雑なスクリプトは、サービスが応答しなかったり、マシン構成が変更されたりする可能性があります。,
インインなしでは難しい場合はスクリプトを駆細はまったく違います。 だって間違っているのは、ログインすがなぜでした。 アプリケーションログは、スクリプトのどの部分が最も使用されているか、またはパフォーマンスが向上する可能性がある場所についての洞察
何をログに記録してはいけませんか?
ロギングステートメントを記述するときは、機密データまたは個人データを除外してください。, 例としては、
パスワードとアクセストークン
クレジットカード番号または銀行口座番号
社会保障番号
電子メールアドレス
ストリートアドレス
暗号キー
社会保障番号
ロギングに関するOWASPチートシートには、読みやすいデータを除外するためのセクションがあります。 これは本格的なアプリケーションを目的としていますが、PowerShellスクリプトにも役立ちます。 想像できますシナリオがPowerShellスクリプトを扱うメールアドレスまたは特定のAPIの鍵となります。,
そのような個人を特定できる情報(またはPII)を記録することは危険です。 ほとんどの国でユーザーからの明示的な同意が必要なだけでなく、データが漏洩した場合、あなたまたはあなたの会社は責任を負う可能性があります。 それが本当に必要でない場合は、このデータを省略する方が良いでしょう。
何をログに記録する必要がありますか?
Rubyロギング入門に関する私たちの記事は、大きなポイントを作ります:
ログエントリはイベントとして考えるべきです—あなたのアプリケーションにとって興味深いものです。,
これは、少なくとも、タイムスタンプとイベントの説明が必要であることを意味します。 説明には関連データも含めることができます。 これは常に事前に決定することは容易ではありません。 正常に実行できなかったスクリプトをトラブルシューティングするために必要なもの また、後で問題を修正するためにさらに情報が必要になる状況に遭遇した場合は、次回のログ記録に追加してください。,
あまり明らかではありませんが、非常に便利なのは、ログレベルを含めることです。
最低レベルでは、デバッグステートメントは、PowerShellスクリプトの実行されたフローを追跡するのに役立ちます。
レベルアップは、スクリプトの機能的側面に関する情報メッセージです:何が実行されたのか、なぜ、どのデータで実行されましたか?
次に、警告のレベルもあります:正常ではなく、潜在的に有害ではありませんが、スクリプトが継続するのを妨げないもの。
最後に、スクリプトをクラッシュさせたエラーを記録するためのエラーレベルのメッセージがあります。,
これらのレベルをすべてログに記録するか、特定のレベル以降のみログに記録することができます(警告やエラーなど)。 次に、より多くの情報が必要なときに、次の実行の詳細を記録するようにスクリプトを構成できます。
私たち自身の単純なロギング関数にはログレベルは含まれていませんでした。 タイムスタンプも追加しませんでした。 またビジネス地区にあるこの機能はもちろん、もののその他を作成してもログインのイントロダクションです。
ロギングスクリプトを入力します
TechnetにはWrite-Logというシンプルで便利なスクリプトがあります。, これをダウンロードすると、スクリプトを次のように変更できます。
Function-Write-Log.ps1ファイルをインクルードし、Log関数を削除し、呼び出しをWrite-Log呼び出しに置き換えました。 私たちは、メッセージ、レベル、およびパスを渡すことができます。 レベルはInfo、Warn、Errorのいずれかになります。 このスクリプトにはデバッグレベルがないことに注意してください。 ただし、スクリプトはMITライセンスの下でリリースされているため、変更を許可しているため、簡単に変更できます。,
このスクリプトを使用すると、ログは次のようになります。
2019-08-20 09:18:29 INFO: Intermediate result: 512019-08-20 09:18:29 INFO: Intermediate result: 6
タイムスタンプ、ログレベル、メッセージを含む明確なログ行があります。 ことになりうお願いいたしました。 これはあなたのニーズには十分かもしれませんが、さらに一歩踏み出して、別のオプションを見てみましょう:PSFramework。
ロギングフレームワークを入力します
PSFrameworkは、いくつかの便利なユーティリティを含むPowerShellフレームワークです。 我々は唯一のロギングの部分を見るつもりです。,
PSFrameworkを使い始めるには、まずPowerShellでInstall-Module PSFrameworkを実行してインストールする必要があります。 (PowerShellコンソールを管理者として実行する必要がある場合があります)。 次に、Write-PSFMessageスクリプトを呼び出して、ログファイルに書き込むことができます。 この場合、次のようになります。
Write-PSFMessage -Level Output -Message "Intermediate result: $($sum)"
情報レベルを使用していないことに注意してください。 代わりに、Outputを使用しています。 これは、PSFrameworkが、PowerShellがデフォルトで持つさまざまな出力ストリーム(Verbose、Host、Output、Warning、Errorなど)とよりうまく一致するログレベルを使用するためです。,
このログファイルには、ファイル名にタイムスタンプが含まれ、ヘッダー行が含まれます。
このログファイルには、ファイル名にタイムスタンプが含まれ、ヘッダー行が含まれます。
このログファイルには、ファイル名にタイムスタンプが含まれ、ヘッダー行が含まれます。
これは、PSFrameworkのデフォルトのログプロバイダはヘッダー行を追加しませんが、ログファイルプロバイダは追加します。, ログファイルは次のようになります。
これには、スクリプトのファイル名、ロギングが行われた行、スクリプトを実行しているユーザーのユーザー名など、多くの有用な情報が含まれるようになりました。 PSFrameworkによるロギングのもう一つの大きな利点は、非同期にログを記録することです。 ログに記録してもスクリプトは遅くなりません。 最後に、ログも自動的にクリーンアップされます。 デフォルトでは、七日後または100メガバイトを超えるとログファイルが削除されます。,
比較
Function-Write-Logスクリプトは、多くのアプリケーションプログラマが慣れ親しんでいるものとより一致します。 この標準ログレベル(デバッグ)を書き込みログファイルのような多くのログイン枠組み”:タイムスタンプは、ログレベルのメッセージ。
ただし、ログのクリーンアップ、非同期ロギング、スクリプト、行番号、実行ユーザーなどの追加の技術情報など、重要な機能がいくつか欠けています。,
PSFrameworkロギングはこれらの機能を提供しますが、フレームワーク全体をインストールする必要があります。 これは本当の問題ではありませんが、心に留めておくべきことです。 PSFrameworkでは、これまでとは異なるロギングレベルも使用されます。 ただし、これらはPowerShellの出力ストリームと密接に一致します。 こちより自然な味付けにユーユーザー
次は何ですか?
PowerShellにログインする簡単な方法を見てきました。 また、より良いスクリプト(Function-Write-Log.ps1)を使用し、PSFrameworkに含まれるロギングを使用することによって、独自のソリューションを改善しました。,
私を襲ったことの一つは、PowerShellでのログインがまだかなり基本的であるということでした。 私たちが見たオプションが悪いか欠けているわけではありません。 しかし、複数のログレベル、非同期ログ、ログクリーンアップ、そして最も重要なのは複数のログ宛先を含む単一のログスクリプトまたはモジュールは見つ
メールアドレスにエラーを送信したい場合はどうすればよいですか? または何をしていくために、どのようなログデータベース? 私が見る限り、PSFrameworkはここでほとんどのオプションを提供しますが、電子メールやデータベースは含まれていません。 ただし、独自に作成してPSFrameworkに登録することは可能かもしれません。,
これは、PowerShellの世界がアプリケーション開発の世界とは異なるためかもしれません。 PowerShellスクリプトが、よりカスタムされた特定のシナリオ、構成別に複数のイントロダクションです。
しかし、特に定期的に実行され、一定レベルの複雑さを持つスクリプトでは、ロギングは重要なままです。 PowerShellは、多数のタスクを自動化するための強力な言語です。 ような課題を知りたいか、どの先でいかに修理してください。 ログはこの情報を提供します。,
次のステップアップとして、ログの集計と管理を確認することができます。 Scalyrはこのための素晴らしいツールです。 Scalyrにログイベントを送信するさまざまなオプションについては、Scalyr APIを見てください。 ここで簡単に呼び出すことができるユーおよび効力の監視およびトユーイントロダクションです。
この投稿はPeter Morlionによって書かれました。, Peterは情熱的なプログラマーで、特にレガシーコードベースで、人々や企業がコードの品質を向上させるのを助けます。 彼はしっかりと業界のベストプラクティスは、この目標に向かって作業する際に非常に貴重であると信じており、彼の専門分野はTDD、DI、および固体
コメントを残す