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.
- Valeurs :
-
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
.
- Valeurs :
-
LogLevel
- Valeurs :
Always
, ,Critical
,Error
Warning
,Informational
,Verbose
Debug
- 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
.
- Valeurs :
-
LogKeywords
- Valeurs :
Runspace
,Pipeline
Protocol
Transport
, ,Host
Cmdlets
Serializer
Session
ManagedPlugin
- Description : Les mots clés permettent de limiter la journalisation à des composants spécifiques dans PowerShell. Par défaut, tous les mots clés sont activés et cette valeur n’est utile que pour la résolution des problèmes spécialisés.
- Valeurs :
-
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.conf
fichier 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
.
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 quenano
. 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 est50-default.conf
.sudo nano /etc/rsyslog.d/40-powershell.conf
Ajoutez les informations suivantes au
40-powershell.conf
fichier ::syslogtag, contains, "powershell[" /var/log/powershell.log & stop
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.
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 :Définissez la propriété sur la racine.
sudo chown root:root /etc/rsyslog.d/40-powershell.conf
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
Redémarrez le service rsyslog .
sudo systemctl restart rsyslog.service
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.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. Vous devez utiliser l’outil log
pour interroger le système de journalisation unifié pour les événements de journalisation PowerShell. Les événements de journal PowerShell n’apparaissent pas dans l’application console sur macOS. L’application console est conçue pour l’ancienne journalisation syslog qui précède le système de journalisation unifié.
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 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 --predicate "subsystem == 'com.microsoft.powershell'" --level info
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, 2022
:
log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'"
Pour plus d’informations, exécutez log show --help
pour afficher l’aide de la log show
commande.
Vous pouvez également générer les données de journal au format JSON, ce qui vous permet de convertir les données d’événement en objets PowerShell. L’exemple suivant génère les événements au format JSON. L’applet ConvertFrom-Json
de commande est utilisée pour convertir les données JSON en objets PowerShell sont stockées dans la $logRecord
variable.
log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
ConvertFrom-Json | Set-Variable logRecord
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.
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
Voir aussi
- Pour les informations syslog et rsyslog.conf Linux, reportez-vous aux pages locales
man
de l’ordinateur Linux - Pour plus d’informations sur la journalisation macOS, consultez la documentation des développeurs d’Apple sur la journalisation
- Pour Windows, consultez about_Logging_Windows
- Intégration SIEM générique