Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Brève description
PowerShell enregistre les opérations internes du moteur, des fournisseurs et des cmdlets.
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.
- Sous Linux, PowerShell journalise dans le journal systemd, qui peut transférer les journaux vers un serveur syslog. Pour plus d’informations, consultez les pages
manpour votre distribution Linux. - Sur macOS, le système de journalisation unifié d’Apple est utilisé. Pour plus d’informations, veuillez consulter la section documentation développeur 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 via 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 LogPipelineExecutionDetails propriété 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, LogPipelineExecutionDetailsName LogPipelineExecutionDetails ---- --------------------------- PSReadLine TrueJournalisation 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 fichier powershell.config.json. Le fichier powershell.config.json 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 la journalisation Informational dans le canal Operational. Vous pouvez modifier la configuration si vous avez besoin de journaux supplémentaires, tels que des journaux détaillés ou l’activation de la sortie des journaux analytiques.
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 verbosité. 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 changer cette valeur n’est utile que pour la résolution de problèmes spécialisés.
- Valeurs :
-
PowerShellPolicies
- Description : le paramètre
PowerShellPolicies contient les optionsModuleLogging, ProtectedEventLogging etScriptBlockLogging . Pour plus d’informations, consultez paramètres de configuration courants.
- Description : le paramètre
Affichage des données de journal PowerShell dans journalisation sur Linux
PowerShell journalise dans le journal systemd en utilisant le démon journald sur des distributions Linux telles qu’Ubuntu et Red Hat Enterprise Linux (RHEL).
Le démon journald stocke les messages de journal dans un format binaire. Utilisez l’utilitaire journalctl pour interroger le journal des entrées PowerShell.
journalctl --grep powershell
Le daemon journald peut transférer les messages de journal à un serveur utilisant le protocole de journalisation système (syslog). Activez l’option ForwardToSysLog dans le fichier de configuration /etc/systemd/journald.confjournald 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 syslog tel que rsyslog si vous souhaitez utiliser la journalisation syslog sur votre système Linux. Certaines distributions Linux telles qu'Ubuntu préinstallent 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 commande cat pour rechercher des entrées PowerShell syslog 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 : une date/heure à laquelle l’entrée de journal a été produite.
- MACHINENAME : le nom du système où le journal a été produit.
- PID : l’identifiant du processus ayant écrit l’entrée de journal.
- COMMITID : l’identifiant ou le tag git commit utilisé pour produire le build.
- TID : l’identifiant du thread ayant écrit l’entrée de journal.
-
CID : l’identifiant hexadécimal du canal de l’entrée de journal.
- 0x10 = Opérationnel
- 0x11 = Analytique
- EVENTID : l’identifiant de l’événement de l’entrée de journal.
- TASK : l’identifiant de la tâche pour l’entrée de l’événement.
- OPCODE : l’opcode pour l’entrée de l’événement.
- LEVEL : le niveau de journalisation pour l’entrée de l’événement.
- MESSAGE : message associé à l’entrée d’événement
EVENTID, TASK, OPCODEet 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/etc/rsyslog.dà l’aide d’un éditeur de fichiers texte tel quenano. Préfixez le nom de fichier avec un nombre inférieur à la valeur par défaut. Par exemple,40-powershell.confoù la valeur par défaut est50-default.conf.sudo nano /etc/rsyslog.d/40-powershell.confAjoutez les informations suivantes au fichier
40-powershell.conf::syslogtag, contains, "powershell[" /var/log/powershell.log & stopVérifiez que
/etc/rsyslog.confa une instruction Include pour le nouveau fichier. Il peut y avoir une déclaration générique qui l’inclut, comme :$IncludeConfig /etc/rsyslog.d/*.confSi 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.confSi votre fichier
40-powershell.confpossède des autorisations ou des propriétés différentes, procédez comme suit :Attribuez la propriété à root.
sudo chown root:root /etc/rsyslog.d/40-powershell.confDéfinissez les autorisations d’accès : l'utilisateur 'root' a les droits de lecture et d'écriture, les utilisateurs ont des droits de lecture.
sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
Redémarrez le service rsyslog.
sudo systemctl restart rsyslog.serviceExécutez
pwshpour générer des informations PowerShell à journaliser.pwshRemarque
Le fichier
n’est pas créé tant que le service rsyslog n’est pas redémarré et PowerShell génère des informations pour journaliser. Interrogez le fichier
powershell.logpour 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
PowerShell utilise le système de journalisation unifié d'Apple, une fonction de macOS qui permet de collecter et de stocker les 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 basée sur 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 du journal PowerShell à partir d’une ligne de commande sur macOS, utilisez la commande log dans la Terminal ou 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 commande log est utilisée pour afficher les données de logs sur votre système au fur et à mesure en temps réel. Le paramètre process filtre les données de journal uniquement pour le processus pwsh. Si vous avez plusieurs instances de pwsh en cours d’exécution, le processus paramètre accepte également un ID de processus comme valeur. Le paramètre niveau affiche les messages au niveau spécifié et inférieur.
log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info
La commande log show peut être utilisée pour exporter des éléments de journal. La commande log show fournit des options d’exportation des derniers éléments N, des éléments depuis une heure donnée ou des é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 pour la commande log show.
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 de commande ConvertFrom-Json est utilisée pour convertir les données JSON en objets PowerShell et sont stockés dans la variable $logRecord.
log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
ConvertFrom-Json | Set-Variable logRecord
Vous pourriez également envisager de sauvegarder les journaux dans un emplacement plus sécurisé, tel qu’un agrégateur Security Information and Event Management (SIEM). À l’aide de Microsoft Defender pour 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 commande log config.
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 reset pour rétablir les paramètres de journalisation par défaut pour le sous-système PowerShell :
sudo log config --subsystem com.microsoft.powershell --reset
Voir aussi
- Pour les informations syslog et rsyslog.conf sous Linux, référez-vous aux pages
manlocales de l’ordinateur Linux. - Pour obtenir des informations sur la journalisation sous macOS, veuillez consulter la documentation développeur d’Apple sur la journalisation.
- Pour Windows, consultez about_Logging_Windows
- Intégration SIEM générique