Share via


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 journalise les détails des opérations PowerShell. Par exemple, PowerShell journalise les opérations telles que le démarrage et l’arrêt du moteur, ainsi que le démarrage et l’arrêt des fournisseurs. Il journalise également les détails des commandes PowerShell.

L’emplacement des journaux PowerShell dépend de la plateforme cible. Sur Linux, les journaux PowerShell vers syslog et rsyslog.conf peuvent être utilisés. Pour plus d’informations, reportez-vous aux pages locales man de l’ordinateur Linux. Sur macOS, le système de journalisation os_log est utilisé. Pour plus d’informations, consultez os_log documentation pour les développeurs.

Affichage de la sortie du journal PowerShell sur Linux

Les journaux PowerShell vers syslog sur Linux et tous les outils couramment utilisés pour afficher le contenu de syslog peuvent être utilisés.

Le format des entrées de journal utilise le modèle suivant :

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
Champ Description
TIMESTAMP Date/heure à laquelle l’entrée du journal a été produite.
MACHINENAME Nom du système dans lequel le journal a été généré.
PID ID de processus du processus qui a écrit l’entrée de journal.
COMMITID git commit ID 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.
10 = Opérationnel, 11 = 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

Notes

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

Filtrage des entrées de journal PowerShell à l’aide de rsyslog

Normalement, les entrées de journal PowerShell sont écrites par défaut location/file pour syslog. Toutefois, il est possible de rediriger les entrées vers un fichier personnalisé.

  1. Create une conf pour la configuration des journaux PowerShell et fournissez un nombre inférieur à 50 (pour 50-default.conf), par 40-powershell.confexemple . Le fichier doit être placé sous /etc/rsyslog.d.

  2. Ajoutez l’entrée suivante au fichier :

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Assurez-vous qu’inclut /etc/rsyslog.conf le nouveau fichier. Il a souvent une instruction include générique qui ressemble à la configuration suivante :

    $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 correctement définis.

    -rw-r--r-- 1 root root   67 Nov 28 12:51 40-powershell.conf
    
  5. Définissez propriété sur root.

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

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

Affichage de la sortie du journal PowerShell sur macOS

La méthode la plus simple pour afficher la sortie du journal PowerShell sur macOS consiste à utiliser l’application Console .

  1. Recherche pour l’application Console et lancez-la.
  2. Sélectionnez le nom de la machine sous Appareils.
  3. Dans le champ Recherche, entrez pwsh comme binaire main PowerShell.
  4. Remplacez le filtre de recherche par AnyProcess.
  5. Effectuez les opérations.
  6. Si vous le souhaitez, enregistrez la recherche pour une utilisation ultérieure.

Pour filtrer sur un processus spécifique instance de PowerShell dans la console, la variable $pid contient l’ID de processus.

  1. Entrez le pid (ID de processus) dans le champ Recherche.
  2. Remplacez le filtre de recherche par PID.
  3. Effectuez les opérations.

Affichage de la sortie du journal PowerShell à partir d’une ligne de commande

La log commande peut être utilisée pour afficher les entrées de journal PowerShell à partir de la ligne de commande.

sudo log stream --predicate 'process == "pwsh"' --info

Persistance de la sortie du journal PowerShell

Par défaut, PowerShell utilise la journalisation en mémoire seule par défaut sur macOS. Ce comportement peut être modifié pour activer la persistance à l’aide de la log config commande .

Le script suivant active la journalisation et la persistance au niveau des informations :

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

La commande suivante rétablit la journalisation PowerShell à l’état par défaut :

log config --subsystem com.microsoft.powershell --mode=persist:default,level:default

Une fois la persistance activée, la log show commande peut être utilisée pour exporter des éléments de journal. La commande fournit des options pour l’exportation des N derniers éléments, des éléments depuis un moment donné ou des éléments dans un intervalle de temps donné.

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

log show --info --start "2018-04-05 09:00:00" --predicate "process = 'pwsh'"

Vous pouvez obtenir de l’aide pour log en exécutant log show --help pour plus d’informations.

Conseil

Lorsque vous exécutez l’une des commandes de journal à partir d’une invite ou d’un script PowerShell, utilisez des guillemets doubles autour de la chaîne de prédicat entière et des guillemets simples dans. Cela évite d’avoir à échapper des guillemets doubles dans la chaîne de prédicat.

Vous pouvez également envisager d’enregistrer les journaux des événements dans un emplacement plus sécurisé, tel qu’un collecteur central des journaux d’événements ou un agrégateur SIEM . Vous pouvez configurer SIEM dans Azure. Pour plus d’informations, consultez Intégration SIEM générique.

Configuration de la journalisation sur un système non-Windows

Sur Windows, la journalisation est configurée en créant des écouteurs de trace ETW ou en utilisant la observateur d'événements pour activer la journalisation analytique. Sur Linux et macOS, la journalisation est configurée à l’aide du fichier powershell.config.json. Le reste de cette section traite de la configuration de la journalisation PowerShell sur un système non Windows.

Par défaut, PowerShell active la journalisation des informations dans le canal opérationnel. Cela signifie que toute sortie de journal produite par PowerShell marquée comme opérationnelle et dont le niveau de journalisation (trace) est supérieur à celui des informations. Parfois, les diagnostics peuvent nécessiter une sortie de journal supplémentaire, comme une sortie de journal détaillée ou l’activation de la sortie du journal analytique.

Le fichier powershell.config.json est un fichier au format JSON résidant dans le répertoire PowerShell $PSHOME . Chaque installation de PowerShell utilise sa propre copie de ce fichier. Pour un fonctionnement normal, ce fichier reste inchangé. Bien que cela puisse être utile, pour modifier certains des paramètres du fichier, pour le diagnostic ou pour distinguer plusieurs versions de PowerShell sur le même système ou même plusieurs copies de la même version (voir LogIdentity dans le tableau ci-dessous).

Le code suivant est un exemple de configuration :

{
  "Microsoft.PowerShell:ExecutionPolicy": "RemoteSigned",
  "PowerShellPolicies": {
    "ScriptExecution": {
      "ExecutionPolicy": "RemoteSigned",
      "EnableScripts": true
    },
    "ScriptBlockLogging": {
      "EnableScriptBlockInvocationLogging": true,
      "EnableScriptBlockLogging": true
    },
    "ModuleLogging": {
      "EnableModuleLogging": false,
      "ModuleNames": [
        "PSReadline",
        "PowerShellGet"
      ]
    },
    "ProtectedEventLogging": {
      "EnableProtectedEventLogging": false,
      "EncryptionCertificate": [
        "Joe"
      ]
    },
    "Transcription": {
      "EnableTranscripting": true,
      "EnableInvocationHeader": true,
      "OutputDirectory": "F:\\tmp\\new"
    },
    "UpdatableHelp": {
      "DefaultSourcePath": "f:\\temp"
    },
    "ConsoleSessionConfiguration": {
      "EnableConsoleSessionConfiguration": false,
      "ConsoleSessionConfigurationName": "name"
    }
  },
  "LogLevel": "verbose"
}

Les propriétés de configuration de la journalisation PowerShell sont répertoriées dans le tableau suivant. Les valeurs marquées d’un astérisque, comme Operational*, indiquent la valeur par défaut quand aucune valeur n’est fournie dans le fichier.

Propriété Valeurs Description
LogIdentity (nom de chaîne) Nom à utiliser lors de la journalisation. Par défaut,
Powershell* powershell est l’identité. Cette valeur peut être
utilisé pour faire la différence entre deux
instances d’une installation PowerShell, telles que
en tant que version finale et bêta. Cette valeur est
également utilisé pour rediriger la sortie du journal vers un
fichier distinct sur Linux. Voir la discussion sur
rsyslog ci-dessus.
LogChannels Opérationnel* Canaux à activer. Séparer les valeurs
Analytiques avec une virgule lors de la spécification de plusieurs.
LogLevel Toujours Spécifiez une valeur unique. La valeur active
Critique elle-même et toutes les valeurs au-dessus dans le
Erreur à gauche.
Avertissement
Information*
Commentaires
Débogage
LogKeywords Instance d'exécution Les mots clés permettent de limiter la journalisation
Pipeline à des composants spécifiques dans PowerShell. par
Protocol par défaut, tous les mots clés sont activés et changent
Transport cette valeur n’est utile que pour les
Host résolution des problèmes spécialisés.
Applets de commande
serializer
session
ManagedPlugin

Voir aussi