about_Logging_Non-Windows

Description courte

PowerShell journalise les opérations internes à partir du moteur, des fournisseurs et des applets de commande.

Description longue

PowerShell enregistre les détails des opérations PowerShell, telles que le démarrage et l’arrêt du moteur et le démarrage et l’arrêt des fournisseurs. Il enregistre également des détails sur les commandes PowerShell.

Pour plus d’informations sur la journalisation dans Windows PowerShell 5.1, consultez about_Logging.

L’emplacement des journaux PowerShell dépend de la plateforme cible.

  • Sur Linux, PowerShell se connecte au journal système qui peut être transféré vers un serveur syslog . Pour plus d’informations, consultez les man pages de votre distribution Linux.
  • Sur macOS, le système de journalisation unifié d’Apple est utilisé. Pour plus d’informations, consultez la documentation des développeurs d’Apple sur la journalisation.

PowerShell prend en charge la configuration de deux catégories de journalisation :

  • Journalisation des modules : enregistrez les événements d’exécution de pipeline pour les membres des modules spécifiés. La journalisation des modules doit être activée pour la session et les modules spécifiques. Pour plus d’informations sur la configuration de cette journalisation, consultez about_PowerShell_Config.

    Si la journalisation des modules est activée par le biais de la configuration, vous pouvez activer et désactiver la journalisation pour des modules spécifiques dans une session en définissant la valeur de la propriété LogPipelineExecutionDetails du module.

    Par exemple, pour activer la journalisation des modules pour le module PSReadLine :

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Journalisation des blocs de script : enregistrez le traitement des commandes, des blocs de script, des fonctions et des scripts, qu’ils soient appelés de manière interactive ou via l’automatisation.

    Lorsque vous activez la journalisation des blocs de script, PowerShell enregistre le contenu de tous les blocs de script qu’il traite. Une fois activée, toute nouvelle session PowerShell enregistre ces informations.

    Remarque

    Il est recommandé d’activer la journalisation des événements protégés lors de l’utilisation de la journalisation de blocs de script à des fins autres que les diagnostics. Pour plus d’informations, consultez about_PowerShell_Config.

Configuration de la journalisation sur Linux ou macOS

La configuration de la journalisation sur Linux et macOS est stockée dans le powershell.config.json fichier. Le powershell.config.json fichier est un fichier au format JSON résidant dans le répertoire PowerShell $PSHOME . Si ce fichier de configuration n’existe pas, vous devez le créer pour modifier les paramètres par défaut. Chaque installation de PowerShell utilise sa propre copie de ce fichier.

Par défaut, PowerShell active Informational la journalisation sur le Operational canal. Vous pouvez modifier la configuration si vous avez besoin d’une sortie de journal supplémentaire, telle que détaillée ou activation de la sortie du journal analytique.

Le code suivant est un exemple de configuration :

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

Voici une liste de propriétés pour la configuration de la journalisation PowerShell. Si la propriété n’est pas répertoriée dans la configuration, PowerShell utilise la valeur par défaut.

  • LogIdentity
    • Valeurs : <string name>, powershell
    • Description : nom à utiliser lors de la journalisation. L’identité par défaut est powershell. Cette valeur peut être utilisée pour indiquer la différence entre deux instances d’une installation PowerShell, comme une version release et une version bêta. Cette valeur est également utilisée pour rediriger la sortie du journal vers un fichier distinct.
  • LogChannels
    • Valeurs : Operational, Analytic
    • Description : canaux à activer. Séparez les valeurs par une virgule lors de la spécification de plusieurs valeurs. La valeur par défaut est Operational.
  • LogLevel
    • Valeurs : Always, , Critical, WarningError, Informational, VerboseDebug
    • Description : Spécifiez une valeur unique. Les valeurs sont répertoriées en ordre croissant de détail. La valeur que vous choisissez active elle-même et toutes les valeurs avant celle-ci. La valeur par défaut est Informational.
  • LogKeywords
    • Valeurs : Runspace, PipelineProtocolTransport, , SessionHostCmdletsSerializerManagedPlugin
    • Description : Les mots clés permettent de limiter la journalisation à des composants spécifiques dans PowerShell. Par défaut, toutes les mot clé sont activées et cette valeur n’est utile que pour la résolution des problèmes spécialisés.
  • PowerShellPolicies
    • Description : le paramètre PowerShellPolicies contient les options ModuleLogging, ProtectedEventLogging et ScriptBlockLogging. Pour plus d’informations, consultez Paramètres de configuration courants.

Affichage des données de journal PowerShell dans journalisation sur Linux

Les journaux PowerShell dans le journal système à l’aide du démon journal sur des distributions Linux telles que Ubuntu et Red Hat Enterprise Linux (RHEL).

Le démon journalise les messages de journal dans un format binaire. Utilisez l’utilitaire journalctl pour interroger le journal des entrées PowerShell.

journalctl --grep powershell

Le démon journalise peut transférer les messages de journalisation vers un serveur syslog (System Logging Protocol). Activez l’option ForwardToSysLog dans le /etc/systemd/journald.conffichier de configuration journal si vous souhaitez utiliser la journalisation syslog sur votre système Linux. Il s’agit de la configuration par défaut pour de nombreuses distributions Linux.

Affichage des données de journal PowerShell dans syslog sur Linux

Utilisez le gestionnaire de package pour votre distribution Linux pour installer un serveur syslog tel que rsyslog si vous souhaitez utiliser la journalisation syslog sur votre système Linux. Certaines distributions Linux telles que la préinstallation d’Ubuntu rsyslog.

Le protocole syslog stocke les messages de journal dans un format de texte standardisé. Vous pouvez utiliser n’importe quel utilitaire de traitement de texte pour interroger ou afficher le contenu syslog .

Par défaut, syslog écrit les entrées de journal à l’emplacement suivant :

  • Sur les distributions Debian, notamment Ubuntu : /var/log/syslog
  • Sur les distributions basées sur RHEL : /var/log/messages

L’exemple suivant utilise la cat commande pour interroger les entrées syslog PowerShell sur Ubuntu.

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

Format du message Syslog

Les messages Syslog ont le format suivant :

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
  • TIMESTAMP : date/heure à laquelle l’entrée du journal a été générée.
  • MACHINENAME : nom du système où le journal a été produit.
  • PID : ID de processus du processus qui a écrit l’entrée du journal.
  • COMMITID : ID de validation git ou balise utilisé pour produire la build.
  • TID : ID de thread du thread qui a écrit l’entrée de journal.
  • CID : identificateur de canal hexadécimal de l’entrée de journal.
    • 0x10 = Opérationnel
    • 0x11 = Analytique
  • EVENTID : identificateur d’événement de l’entrée de journal.
  • TASK - Identificateur de tâche pour l’entrée d’événement
  • OPCODE - Opcode pour l’entrée d’événement
  • LEVEL : niveau de journal pour l’entrée d’événement
  • MESSAGE : message associé à l’entrée d’événement

EVENTID, TASK, OPCODE et LEVEL sont les mêmes valeurs que celles utilisées lors de la journalisation dans le journal des événements Windows.

Écrire un message de journal PowerShell dans un fichier distinct

Il est également possible de rediriger les entrées du journal PowerShell vers un fichier distinct. Lorsque les entrées du journal PowerShell sont redirigées vers un fichier distinct, elles ne sont plus journalisées dans le fichier syslog par défaut.

Les étapes suivantes configurent les entrées de journal PowerShell sur Ubuntu pour écrire dans un fichier journal nommé powershell.log.

  1. Créez un fichier de configuration (conf) pour la configuration du journal PowerShell dans le répertoire à l’aide /etc/rsyslog.d d’un éditeur de fichier texte tel que nano. Préfixez le nom de fichier avec un nombre inférieur à la valeur par défaut. Par exemple, 40-powershell.conf où la valeur par défaut est 50-default.conf.

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. Ajoutez les informations suivantes au 40-powershell.conf fichier :

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Vérifiez qu’il /etc/rsyslog.conf contient une instruction Include pour le nouveau fichier. Il peut avoir une instruction générique qui l’inclut, par exemple :

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

    Si ce n’est pas le cas, vous devez ajouter une instruction Include manuellement.

  4. Vérifiez que les attributs et les autorisations sont définis de manière appropriée.

    ls -l /etc/rsyslog.d/40-powershell.conf
    
    -rw-r--r-- 1 root root   67 Nov 28 12:51 40-powershell.conf
    

    Si votre 40-powershell.conf fichier dispose d’une propriété ou d’autorisations différente, procédez comme suit :

    1. Définissez la propriété sur la racine.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Définir les autorisations d’accès : la racine a en lecture/écriture, les utilisateurs ont lu.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. Redémarrez le service rsyslog .

    sudo systemctl restart rsyslog.service
    
  6. Exécutez pwsh pour générer des informations PowerShell à journaliser.

    pwsh
    

    Remarque

    Le /var/log/powershell.log fichier n’est pas créé tant que le service rsyslog n’est pas redémarré et que PowerShell génère des informations à consigner.

  7. Interrogez le powershell.log fichier pour vérifier que les informations PowerShell sont enregistrées dans le nouveau fichier.

    cat /var/log/powershell.log
    

Affichage des données du journal PowerShell sur macOS

Les journaux PowerShell vers le système de journalisation unifié d’Apple, une fonctionnalité de macOS qui permet la collecte et le stockage des journaux système et d’application dans un emplacement centralisé unique.

Le système de journalisation unifié d’Apple stocke les messages de journalisation au format binaire. Utilisez l’application console ou l’outil de journalisation pour interroger le système de journalisation unifié pour les entrées PowerShell.

Affichage des données de journal PowerShell dans l’application console sur macOS

L’application console sur macOS est un utilitaire qui fournit une interface utilisateur graphique permettant d’afficher les données de journal. L’application console est incluse dans macOS par défaut et est accessible en ouvrant le dossier Utilitaires dans le dossier Applications.

Pour afficher les données de journal PowerShell dans l’application console sur macOS, procédez comme suit :

  1. Recherchez l’application console et lancez-la.
  2. Sélectionnez le nom de l’ordinateur sous Appareils.
  3. Dans le champ De recherche , entrez le fichier binaire principal PowerShell et appuyez pwsh sur Retour.
  4. Remplacez le filtre de recherche par AnyProcess.
  5. Cliquez sur Start.
  6. Exécutez pwsh pour générer des informations PowerShell à journaliser.

L’ID de processus d’une instance en cours d’exécution de PowerShell est stocké dans la $PID variable. Utilisez les étapes suivantes pour filtrer sur une instance de processus spécifique de PowerShell dans l’application console .

  1. Exécutez une instance de pwsh.
  2. Exécutez $PID dans l’instance de PowerShell démarré à l’étape précédente pour déterminer son ID de processus.
  3. Entrez l’ID de processus dans pwsh le champ De recherche , puis appuyez sur Retour.
  4. Remplacez le filtre de recherche par AnyPID.
  5. Cliquez sur Start.
  6. Générez des informations PowerShell pour vous connecter à partir de l’instance de PowerShell démarrée à la première étape.

Pour plus d’informations, consultez afficher les messages de journal dans la console sur Mac.

Affichage des données du journal PowerShell à partir de la ligne de commande sur macOS

Pour afficher les données de journal PowerShell à partir d’une ligne de commande sur macOS, utilisez la log commande dans le terminal ou dans une autre application hôte shell. Ces commandes peuvent être exécutées à partir de PowerShell, Z shell (Zsh) ou Bash.

Dans l’exemple suivant, la log commande est utilisée pour afficher les données de journal sur votre système en temps réel. Le paramètre de processus filtre les données du journal uniquement pour le pwsh processus. Si vous avez plusieurs instances en cours d’exécution pwsh , le paramètre de processus accepte également un ID de processus comme valeur. Le paramètre de niveau affiche les messages au niveau spécifié et inférieur.

log stream --process pwsh --level info

Modes et niveaux de données de journal PowerShell sur macOS

Par défaut, le sous-système PowerShell enregistre les messages de niveau d’informations en mémoire (mode) et les messages de niveau par défaut sur disque (persistance) sur macOS. Ce comportement peut être modifié pour activer un mode et un niveau de journalisation différents à l’aide de la log config commande.

L’exemple suivant active la journalisation et la persistance au niveau des informations pour le sous-système PowerShell :

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

Utilisez le paramètre de réinitialisation pour rétablir les paramètres de journal aux valeurs par défaut du sous-système PowerShell :

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

La log show commande peut être utilisée pour exporter des éléments de journal. La log show commande fournit des options pour exporter les derniers N éléments, éléments depuis une heure donnée ou les éléments dans un intervalle de temps donné.

Par exemple, la commande suivante exporte les éléments depuis 9am on April 5 of 2022:

log show --info --start "2022-04-05 09:00:00" --process pwsh

Pour plus d’informations, exécutez log show --help pour afficher l’aide de la log show commande.

Vous pouvez également envisager d’enregistrer les journaux dans un emplacement plus sécurisé, tel que l’agrégateur SIEM (Security Information and Event Management). À l’aide de Microsoft Defender pour le cloud Apps, vous pouvez configurer SIEM dans Azure. Pour plus d’informations, consultez Intégration SIEM générique.

Voir aussi