about_Logging_Non-Windows
Descrizione breve
PowerShell registra le operazioni interne dal motore, dai provider e dai cmdlet.
Descrizione lunga
PowerShell registra i dettagli delle operazioni di PowerShell, ad esempio l'avvio e l'arresto del motore e l'avvio e l'arresto dei provider. Registra anche i dettagli sui comandi di PowerShell.
Per informazioni sulla registrazione in Windows PowerShell 5.1, vedere about_Logging.
Il percorso dei log di PowerShell dipende dalla piattaforma di destinazione.
- In Linux PowerShell accede al journal di sistema che può essere inoltrato a un server syslog . Per altre informazioni, vedere le pagine per la
man
distribuzione linux. - In macOS viene usato il sistema di registrazione unificato di Apple. Per altre informazioni, vedere la documentazione per sviluppatori di Apple sulla registrazione.
PowerShell supporta la configurazione di due categorie di registrazione:
Registrazione dei moduli: registrare gli eventi di esecuzione della pipeline per i membri dei moduli specificati. La registrazione dei moduli deve essere abilitata sia per la sessione che per i moduli specifici. Per altre informazioni sulla configurazione di questa registrazione, vedere about_PowerShell_Config.
Se la registrazione dei moduli è abilitata tramite la configurazione, è possibile abilitare e disabilitare la registrazione per moduli specifici in una sessione impostando il valore della proprietà LogPipelineExecutionDetails del modulo.
Ad esempio, per abilitare la registrazione dei moduli per il modulo PSReadLine :
$psrl = Get-Module PSReadLine $psrl.LogPipelineExecutionDetails = $true Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
Name LogPipelineExecutionDetails ---- --------------------------- PSReadLine True
Registrazione di blocchi di script: registrare l'elaborazione di comandi, blocchi di script, funzioni e script, se richiamati in modo interattivo o tramite l'automazione.
Quando si abilita la registrazione blocco di script, PowerShell registra il contenuto di tutti i blocchi di script elaborati. Dopo l'abilitazione, qualsiasi nuova sessione di PowerShell registra queste informazioni.
Nota
È consigliabile abilitare la registrazione eventi protetta quando si usa la registrazione di blocchi di script per scopi diversi dalla diagnostica. Per altre informazioni, vedere about_PowerShell_Config.
Configurazione della registrazione in Linux o macOS
La configurazione per la registrazione in Linux e macOS viene archiviata nel powershell.config.json
file. Il powershell.config.json
file è un file in formato JSON che si trova nella directory di PowerShell $PSHOME
. Se questo file di configurazione non esiste, sarà necessario crearlo per modificare le impostazioni predefinite. Ogni installazione di PowerShell usa la propria copia di questo file.
Per impostazione predefinita, PowerShell abilita Informational
la registrazione al Operational
canale. È possibile modificare la configurazione se è necessario un output del log aggiuntivo, ad esempio dettagliato o se si abilita l'output del log analitico.
Il codice seguente è una configurazione di esempio:
{
"ModuleLogging": {
"EnableModuleLogging": false,
"ModuleNames": [
"PSReadLine",
"PowerShellGet"
]
},
"ScriptBlockLogging": {
"EnableScriptBlockInvocationLogging": true,
"EnableScriptBlockLogging": true
},
"LogLevel": "verbose"
}
Di seguito è riportato un elenco di proprietà per la configurazione della registrazione di PowerShell. Se la proprietà non è elencata nella configurazione, PowerShell usa il valore predefinito.
- LogIdentity
- Valori:
<string name>
,powershell
- Descrizione: nome da usare durante la registrazione. L'identità predefinita è
powershell
. Questo valore può essere usato per indicare la differenza tra due istanze di un'installazione di PowerShell, ad esempio una versione release e beta. Questo valore viene usato anche per reindirizzare l'output del log a un file separato.
- Valori:
- LogChannels
- Valori:
Operational
,Analytic
- Descrizione: canali da abilitare. Separare i valori con una virgola quando si specificano più valori. Il valore predefinito è
Operational
.
- Valori:
- LogLevel
- Valori:
Always
,Critical
,Error
Warning
,Informational
, ,Verbose
Debug
- Descrizione: specificare un singolo valore. I valori sono elencati in ordine crescente di dettaglio. Il valore scelto abilita se stesso e tutti i valori prima. Il valore predefinito è
Informational
.
- Valori:
- LogKeywords
- Valori:
Runspace
,Pipeline
,Protocol
Transport
,Host
,Cmdlets
,Serializer
, ,Session
ManagedPlugin
- Descrizione: le parole chiave consentono di limitare la registrazione a componenti specifici all'interno di PowerShell. Per impostazione predefinita, tutte le parole chiave sono abilitate e modificare questo valore è utile solo per la risoluzione dei problemi specializzata.
- Valori:
- PowerShellPolicies
- Descrizione: l'impostazione di PowerShellPolicies contiene le opzioni ModuleLogging, ProtectedEventLogging e ScriptBlockLogging . Per altre informazioni, vedere Impostazioni di configurazione comuni.
Visualizzazione dei dati di log di PowerShell nel journal in Linux
PowerShell registra nel journal di sistema usando il daemon journald nelle distribuzioni Linux, ad esempio Ubuntu e Red Hat Enterprise Linux (RHEL).
Il daemon journald archivia i messaggi di log in un formato binario . Usare l'utilità journalctl
per eseguire query sul log journal per le voci di PowerShell.
journalctl --grep powershell
Il daemon journald può inoltrare i messaggi di log a un server syslog (System Logging Protocol). Abilitare l'opzione ForwardToSysLog
nel /etc/systemd/journald.conf
file di configurazione journald se si vuole usare la registrazione syslog nel sistema Linux. Questa è la configurazione predefinita per molte distribuzioni linux.
Visualizzazione dei dati di log di PowerShell in syslog in Linux
Usare gestione pacchetti per la distribuzione Linux per installare un server syslog , ad esempio rsyslog , se si vuole usare la registrazione syslog nel sistema Linux. Alcune distribuzioni di Linux, ad esempio Ubuntu preinstalla rsyslog.
Il protocollo syslog archivia i messaggi di log in un formato di testo standardizzato. È possibile usare qualsiasi utilità di elaborazione del testo per eseguire query o visualizzare il contenuto syslog .
Per impostazione predefinita, syslog scrive le voci di log nel percorso seguente:
- Nelle distribuzioni basate su Debian, tra cui Ubuntu:
/var/log/syslog
- Nelle distribuzioni basate su RHEL:
/var/log/messages
Nell'esempio seguente viene usato il cat
comando per eseguire una query per le voci syslog di PowerShell in Ubuntu.
cat /var/log/syslog | grep -i powershell
Formato messaggio Syslog
I messaggi Syslog hanno il formato seguente:
TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
[EVENTID:TASK.OPCODE.LEVEL] MESSAGE
- TIMESTAMP : data/ora di produzione della voce di log.
- MACHINENAME : nome del sistema in cui è stato prodotto il log.
- PID : ID processo del processo che ha scritto la voce di log.
- COMMITID : ID commit Git o tag usato per produrre la compilazione.
- TID : ID thread del thread che ha scritto la voce di log.
- CID : identificatore del canale esadecimale della voce di log.
- 0x10 = Operativo
- 0x11 = Analitico
- EVENTID : identificatore dell'evento della voce di log.
- TASK - Identificatore dell'attività per la voce dell'evento
- OPCODE : codice operativo per la voce dell'evento
- LEVEL : livello di log per la voce dell'evento
- MESSAGE - Messaggio associato alla voce dell'evento
EVENTID, TASK, OPCODE e LEVEL sono gli stessi valori usati per la registrazione nel registro eventi di Windows.
Scrivere un messaggio di log di PowerShell in un file separato
È anche possibile reindirizzare le voci di log di PowerShell a un file separato. Quando le voci di log di PowerShell vengono reindirizzate a un file separato, non vengono più registrate nel file syslog predefinito.
La procedura seguente configura le voci di log di PowerShell in Ubuntu per scrivere in un file di log denominato powershell.log
.
Creare un file config (
conf
) per la configurazione del log di PowerShell nella/etc/rsyslog.d
directory usando un editor di file di testo,nano
ad esempio . Anteporre al nome file un numero minore del valore predefinito. Ad esempio,40-powershell.conf
dove il valore predefinito è50-default.conf
.sudo nano /etc/rsyslog.d/40-powershell.conf
Aggiungere al file le informazioni
40-powershell.conf
seguenti::syslogtag, contains, "powershell[" /var/log/powershell.log & stop
Verificare che
/etc/rsyslog.conf
sia presente un'istruzione include per il nuovo file. Può avere un'istruzione generica che la include, ad esempio:$IncludeConfig /etc/rsyslog.d/*.conf
In caso contrario, è necessario aggiungere manualmente un'istruzione di inclusione.
Verificare che gli attributi e le autorizzazioni siano impostati in modo appropriato.
ls -l /etc/rsyslog.d/40-powershell.conf
-rw-r--r-- 1 root root 67 Nov 28 12:51 40-powershell.conf
Se il
40-powershell.conf
file dispone di proprietà o autorizzazioni diverse, completare la procedura seguente:Impostare la proprietà su root.
sudo chown root:root /etc/rsyslog.d/40-powershell.conf
Impostare le autorizzazioni di accesso: la radice ha lettura/scrittura, gli utenti hanno letto.
sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
Riavviare il servizio rsyslog .
sudo systemctl restart rsyslog.service
Eseguire
pwsh
per generare le informazioni di PowerShell da registrare.pwsh
Nota
Il
/var/log/powershell.log
file non viene creato finché il servizio rsyslog non viene riavviato e PowerShell genera informazioni da registrare.Eseguire una query sul
powershell.log
file per verificare che le informazioni di PowerShell vengano registrate nel nuovo file.cat /var/log/powershell.log
Visualizzazione dei dati di log di PowerShell in macOS
PowerShell registra il sistema di registrazione unificato di Apple, una funzionalità di macOS che consente la raccolta e l'archiviazione dei log di sistema e applicazioni in un'unica posizione centralizzata.
Il sistema di registrazione unificata di Apple archivia i messaggi di log in formato binario. È necessario usare lo log
strumento per eseguire query sul sistema di registrazione unificato per gli eventi di log di PowerShell. Gli eventi del log di PowerShell non vengono visualizzati nell'applicazione console in macOS. L'app console è progettata per la registrazione basata su syslog precedente che precede il sistema di registrazione unificato.
Visualizzazione dei dati di log di PowerShell dalla riga di comando in macOS
Per visualizzare i dati di log di PowerShell da una riga di comando in macOS, usare il log
comando nel terminale o in un'altra applicazione host della shell. Questi comandi possono essere eseguiti da PowerShell, Z Shell o Bash.
Nell'esempio seguente viene usato il log
comando per visualizzare i dati di log nel sistema mentre si verificano in tempo reale. Il parametro del processo filtra i dati di log solo per il pwsh
processo. Se sono in esecuzione più istanze di pwsh
, il parametro process accetta anche un ID processo come valore. Il parametro di livello mostra i messaggi a livello specificato e inferiore.
log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info
Il log show
comando può essere usato per esportare gli elementi di log. Il log show
comando fornisce opzioni per l'esportazione degli ultimi N
elementi, degli elementi a partire da un determinato periodo di tempo o di elementi entro un determinato intervallo di tempo.
Ad esempio, il comando seguente esporta gli elementi da 9am on April 5, 2022
:
log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'"
Per altre informazioni, eseguire log show --help
per visualizzare la Guida per il log show
comando .
È anche possibile restituire i dati di log in formato JSON, che consente di convertire i dati dell'evento in oggetti PowerShell. L'esempio seguente restituisce gli eventi in formato JSON. Il ConvertFrom-Json
cmdlet viene usato per convertire i dati JSON in oggetti PowerShell vengono archiviati nella $logRecord
variabile .
log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
ConvertFrom-Json | Set-Variable logRecord
È anche consigliabile salvare i log in una posizione più sicura, ad esempio l'aggregatore SIEM (Security Information and Event Management). Usando le app Microsoft Defender per il cloud, è possibile configurare SIEM in Azure. Per altre informazioni, vedere Integrazione SIEM generica.
Modalità e livelli di dati di log di PowerShell in macOS
Per impostazione predefinita, il sottosistema PowerShell registra i messaggi a livello di informazioni nella memoria (modalità) e i messaggi a livello predefinito su disco (persistenza) in macOS. Questo comportamento può essere modificato per abilitare una modalità diversa e un livello di registrazione usando il log config
comando .
L'esempio seguente abilita la registrazione e la persistenza a livello di informazioni per il sottosistema PowerShell:
sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info
Usare il parametro reset per ripristinare le impostazioni di log per le impostazioni predefinite per il sottosistema PowerShell:
sudo log config --subsystem com.microsoft.powershell --reset
Vedi anche
- Per informazioni su syslog linux e rsyslog.conf, vedere le pagine locali
man
del computer Linux - Per informazioni sulla registrazione di macOS, vedere la documentazione per sviluppatori di Apple sulla registrazione
- Per Windows, vedi about_Logging_Windows
- Integrazione SIEM generica