ja-JP/about_Logging_Non-Windows.help.txt

TOPIC
    about_Logging_Non-Windows

簡単な説明
    PowerShell は、エンジン、プロバイダー、コマンドレットの内部操作を記録し
    ます。

詳細な説明
    PowerShell は、エンジンの開始と停止、プロバイダーの開始と停止など、
    PowerShell の操作に関する詳細を記録します。また、PowerShell コマンドに関
    する詳細も記録します。

    Windows PowerShell 5.1 でのログ記録については、about_Logging を参照してく
    ださい。

    PowerShell ログの場所は、対象のプラットフォームによって異なります。

    - Linux では、PowerShell は systemd ジャーナルに記録します。これは syslog
      サーバーに転送できます。詳しくは、お使いの Linux ディストリビューション
      の man ページを参照してください。
    - macOS では、Apple の統合ログシステムが使われます。詳しくは、Apple のロ
      グ記録に関する開発者向けドキュメントを参照してください。

    PowerShell は、2 つのカテゴリのログ記録の構成をサポートしています。

    - モジュールログ記録 - 指定したモジュールのメンバーについて、パイプライン
      の実行イベントを記録します。モジュールログ記録は、セッションと特定のモ
      ジュールの両方で有効にする必要があります。このログ記録の構成について詳
      しくは、about_PowerShell_Config を参照してください。

      構成によってモジュールログ記録が有効になっている場合は、モジュールの
      LogPipelineExecutionDetails プロパティの値を設定することで、セッション
      内の特定のモジュールについてログ記録を有効または無効にできます。

      たとえば、PSReadLine モジュールのモジュールログ記録を有効にするには次の
      ようにします。

          $psrl = Get-Module PSReadLine
          $psrl.LogPipelineExecutionDetails = $true
          Get-Module PSReadLine |
              Select-Object Name, LogPipelineExecutionDetails

          Name LogPipelineExecutionDetails
          ---- ---------------------------
          PSReadLine True

    - スクリプトブロックログ記録 - 対話的に呼び出されたか、自動化を通じて呼び
      出されたかにかかわらず、コマンド、スクリプトブロック、関数、スクリプト
      の処理を記録します。

      スクリプトブロックログ記録を有効にすると、PowerShell は処理するすべての
      スクリプトブロックの内容を記録します。有効にすると、新しい PowerShell セ
      ッションがこの情報を記録します。

      メモ: 診断目的以外でスクリプトブロックログ記録を使う場合は、保護された
      イベントログ記録を有効にすることをお勧めします。詳しくは、
      about_PowerShell_Config を参照してください。

  Linux または macOS でログ記録を構成する

    Linux と macOS でのログ記録の構成は、powershell.config.json ファイルに格
    納されます。powershell.config.json ファイルは、PowerShell の $PSHOME ディ
    レクトリにある JSON 形式のファイルです。この構成ファイルが存在しない場合
    は、既定の設定を変更するために作成する必要があります。PowerShell の各イン
    ストールでは、このファイルの独自のコピーが使われます。

    既定では、PowerShell は Operational チャネルへの Informational ログ記録を
    有効にします。詳細なログ出力が必要な場合や、分析ログ出力を有効にする場合
    などは、構成を変更できます。

    次のコードは構成の例です。

        {
            "ModuleLogging": {
                "EnableModuleLogging": false,
                "ModuleNames": [
                    "PSReadLine",
                    "PowerShellGet"
                ]
            },
            "ScriptBlockLogging": {
                "EnableScriptBlockInvocationLogging": true,
                "EnableScriptBlockLogging": true
            },
            "LogLevel": "verbose"
        }

    次に、PowerShell のログ記録を構成するためのプロパティの一覧を示します。プ
    ロパティが構成に記載されていない場合、PowerShell は既定値を使います。

    - LogIdentity
      - 値: <文字列名>、powershell
      - 説明: ログ記録時に使う名前です。既定の ID は powershell です。この値
        は、リリース版とベータ版など、PowerShell インストールの 2 つのインスタ
        ンスを区別するために使えます。この値は、ログ出力を別のファイルにリダ
        イレクトするためにも使われます。
    - LogChannels
      - 値: Operational、Analytic
      - 説明: 有効にするチャネルです。複数指定する場合は、値をコンマで区切り
        ます。既定値は Operational です。
    - LogLevel
      - 値: Always、Critical、Error、Warning、Informational、Verbose、Debug
      - 説明: 単一の値を指定します。値は詳細度の昇順で並んでいます。選択した
        値は、その値とそれより前のすべての値を有効にします。既定値は
        Informational です。
    - LogKeywords
      - 値: Runspace、Pipeline、Protocol、Transport、Host、Cmdlets、
        Serializer、Session、ManagedPlugin
      - 説明: キーワードを使うと、ログ記録を PowerShell 内の特定のコンポーネ
        ントに限定できます。既定ではすべてのキーワードが有効になっており、こ
        の値の変更は専門的なトラブルシューティングのときにのみ役立ちます。
    - PowerShellPolicies
      - 説明: PowerShellPolicies 設定には、ModuleLogging、
        ProtectedEventLogging、ScriptBlockLogging の各オプションが含まれます。
        詳しくは、共通の構成設定を参照してください。

  Linux で journald の PowerShell ログデータを表示する

    PowerShell は、Ubuntu や Red Hat Enterprise Linux (RHEL) などの Linux ディ
    ストリビューションでは、journald デーモンを使って systemd ジャーナルに記
    録します。

    journald デーモンは、ログメッセージをバイナリ形式で格納します。
    journalctl ユーティリティを使って、PowerShell エントリのジャーナルログを
    照会します。

        journalctl --grep powershell

    journald デーモンは、ログメッセージを System Logging Protocol (syslog) サ
    ーバーに転送できます。Linux システムで syslog ログ記録を使う場合は、
    /etc/systemd/journald.conf の journald 構成ファイルで ForwardToSysLog オ
    プションを有効にします。これは多くの Linux ディストリビューションの既定の
    構成です。

  Linux で syslog の PowerShell ログデータを表示する

    Linux システムで syslog ログ記録を使う場合は、お使いの Linux ディストリビ
    ューションのパッケージマネージャーを使って、rsyslog などの syslog サーバ
    ーをインストールします。Ubuntu など一部の Linux ディストリビューションで
    は、rsyslog が事前インストールされています。

    syslog プロトコルは、ログメッセージを標準化されたテキスト形式で格納しま
    す。任意のテキスト処理ユーティリティを使って、syslog の内容を照会または表
    示できます。

    既定では、syslog はログエントリを次の場所に書き込みます。

    - Ubuntu を含む Debian ベースのディストリビューション: /var/log/syslog
    - RHEL ベースのディストリビューション: /var/log/messages

    次の例では、cat コマンドを使って Ubuntu の PowerShell の syslog エントリを
    照会します。

        cat /var/log/syslog | grep -i powershell

  syslog メッセージの形式

    syslog メッセージの形式は次のとおりです。

        TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
          [EVENTID:TASK.OPCODE.LEVEL] MESSAGE

    - TIMESTAMP - ログエントリが生成された日時です。
    - MACHINENAME - ログが生成されたシステムの名前です。
    - PID - ログエントリを書き込んだプロセスのプロセス ID です。
    - COMMITID - ビルドの生成に使われた git コミット ID またはタグです。
    - TID - ログエントリを書き込んだスレッドのスレッド ID です。
    - CID - ログエントリの 16 進チャネル識別子です。
      - 0x10 = Operational
      - 0x11 = Analytic
    - EVENTID - ログエントリのイベント識別子です。
    - TASK - イベントエントリのタスク識別子です。
    - OPCODE - イベントエントリの opcode です。
    - LEVEL - イベントエントリのログレベルです。
    - MESSAGE - イベントエントリに関連付けられたメッセージです。

    EVENTID、TASK、OPCODE、LEVEL は、Windows イベントログに記録するときと同じ
    値です。

  PowerShell のログメッセージを別のファイルに書き込む

    PowerShell のログエントリを別のファイルにリダイレクトすることもできます。
    PowerShell のログエントリが別のファイルにリダイレクトされると、既定の
    syslog ファイルには記録されなくなります。

    次の手順では、Ubuntu で PowerShell のログエントリを powershell.log という
    名前のログファイルに書き込むように構成します。

    1. nano などのテキストエディターを使って、/etc/rsyslog.d ディレクトリに
       PowerShell ログ構成用の構成 (conf) ファイルを作成します。ファイル名の
       先頭には、既定値より小さい数字を付けます。たとえば、既定が
       50-default.conf の場合は 40-powershell.conf とします。

           sudo nano /etc/rsyslog.d/40-powershell.conf

    2. 40-powershell.conf ファイルに次の情報を追加します。

           :syslogtag, contains, "powershell[" /var/log/powershell.log
           & stop

    3. /etc/rsyslog.conf に新しいファイルの include ステートメントがあること
       を確認します。次のような汎用ステートメントで include されている場合が
       あります。

           $IncludeConfig /etc/rsyslog.d/*.conf

       含まれていない場合は、include ステートメントを手動で追加する必要があり
       ます。

    4. 属性とアクセス許可が適切に設定されていることを確認します。

           ls -l /etc/rsyslog.d/40-powershell.conf

           -rw-r--r-- 1 root root 67 Nov 28 12:51 40-powershell.conf

       40-powershell.conf ファイルの所有権やアクセス許可が異なる場合は、次の
       手順を実行します。

       1. 所有権を root に設定します。

              sudo chown root:root /etc/rsyslog.d/40-powershell.conf

       2. アクセス許可を設定します。root には読み取り/書き込み、users には読み
          取りを与えます。

              sudo chmod 644 /etc/rsyslog.d/40-powershell.conf

    5. rsyslog サービスを再起動します。

           sudo systemctl restart rsyslog.service

    6. pwsh を実行して、ログに記録する PowerShell 情報を生成します。

           pwsh

       メモ: /var/log/powershell.log ファイルは、rsyslog サービスが再起動さ
       れ、PowerShell がログに記録する情報を生成するまで作成されません。

    7. powershell.log ファイルを照会して、PowerShell 情報が新しいファイルに記
       録されていることを確認します。

           cat /var/log/powershell.log

  macOS で PowerShell ログデータを表示する

    PowerShell は、Apple の統合ログシステムに記録します。これは、システムログ
    とアプリケーションログを一元化された 1 つの場所に収集して格納できる macOS
    の機能です。

    Apple の統合ログシステムは、ログメッセージをバイナリ形式で格納します。
    PowerShell ログイベントを統合ログシステムから照会するには、log ツールを使
    う必要があります。PowerShell ログイベントは、macOS の Console アプリケーシ
    ョンには表示されません。Console アプリは、統合ログシステムより前の古い
    syslog ベースのログ記録向けに設計されています。

  macOS でコマンドラインから PowerShell ログデータを表示する

    macOS でコマンドラインから PowerShell ログデータを表示するには、ターミナル
    やその他のシェルホストアプリケーションで log コマンドを使います。これらの
    コマンドは、PowerShell、Z Shell、Bash から実行できます。

    次の例では、log コマンドを使って、リアルタイムで発生しているシステム上のロ
    グデータを表示します。process パラメーターは、ログデータを pwsh プロセスの
    みにフィルター処理します。複数の pwsh インスタンスが実行されている場合、
    process パラメーターはプロセス ID を値として受け取ることもできます。level
    パラメーターは、指定したレベル以下のメッセージを表示します。

        log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info

    log show コマンドを使うと、ログ項目をエクスポートできます。log show コマン
    ドには、最後の N 項目、指定した時刻以降の項目、指定した時間範囲内の項目を
    エクスポートするためのオプションがあります。

    たとえば、次のコマンドは 2022 年 4 月 5 日午前 9 時以降の項目をエクスポー
    トします。

        log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'"

    詳しくは、log show --help を実行して log show コマンドのヘルプを表示してく
    ださい。

    ログデータを JSON 形式で出力することもできます。これにより、イベントデータ
    を PowerShell オブジェクトに変換できます。次の例では、イベントを JSON 形式
    で出力します。ConvertFrom-Json コマンドレットを使って JSON データを
    PowerShell オブジェクトに変換し、$logRecord 変数に格納します。

        log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
            ConvertFrom-Json | Set-Variable logRecord

    Security Information and Event Management (SIEM) アグリゲーターなど、よりセ
    キュリティが高い場所にログを保存することも検討してください。

  macOS での PowerShell ログデータのモードとレベル

    既定では、PowerShell サブシステムは macOS で info レベルのメッセージをメモ
    リ (モード) に、default レベルのメッセージをディスク (永続化) に記録しま
    す。この動作は、log config コマンドを使って別のモードとレベルのログ記録を
    有効にすることで変更できます。

    次の例では、PowerShell サブシステムの info レベルのログ記録と永続化を有効
    にします。

        sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info

    reset パラメーターを使うと、PowerShell サブシステムのログ設定を既定値に戻
    せます。

        sudo log config --subsystem com.microsoft.powershell --reset

関連項目
    Linux の syslog および rsyslog.conf については、Linux コンピューターの
    ローカル man ページを参照してください
    macOS のログ記録については、Apple のログ記録に関する開発者向けドキュメント
    を参照してください
    Windows については、about_Logging_Windows を参照してください

----
原文: PowerShell-Docs (CC BY 4.0) の翻訳 / PSHelpJaJP