Condividi tramite


about_Logging_Non-Windows

Breve descrizione

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 systemd journal che può essere inoltrato a un server syslog . Per ulteriori informazioni, consultare le pagine man per la distribuzione Linux.
  • In macOS viene usato il sistema di registrazione unificato di Apple. Per altre informazioni, vedere 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 blocchi di script: registrare l'elaborazione di comandi, scriptblock, funzioni e script, sia che richiamati in modo interattivo o tramite l'automazione.

    Quando si abilita la registrazione blocchi di script, PowerShell registra il contenuto di tutti gli scriptblock 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 file powershell.config.json. Il file powershell.config.json è un file JSON formattato che si trova nella directory $PSHOME di PowerShell. 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 la registrazione Informational nel canale Operational. È 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.
  • LogChannels
    • Valori: Operational, Analytic
    • Descrizione: canali da abilitare. Separare i valori con una virgola quando si specificano più valori. Il valore predefinito è Operational.
  • LogLevel
    • Valori: Always, Critical, Error, Warning, Informational, Verbose, Debug
    • Descrizione: specificare un singolo valore. I valori sono elencati in ordine crescente di verbosità. Il valore scelto abilita sé stesso e tutti i valori precedenti. Il valore predefinito è Informational.
  • ParoleChiaveDiLog
    • 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.
  • PowerShellPolicies
    • Descrizione: l'impostazione PowerShellPolicies contiene le opzioni ModuleLogging, ProtectedEventLogginge ScriptBlockLogging. Per altre informazioni, vedere Impostazioni di configurazione comuni.

Visualizzazione dei dati di log di PowerShell nel journal in Linux

PowerShell accede al journal systemd journal usando il journald daemon in distribuzioni Linux come Ubuntu e Red Hat Enterprise Linux (RHEL).

Il journald daemon 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 journald daemon può inoltrare i messaggi di log a un server syslog (System Logging Protocol). È necessario abilitare l'opzione ForwardToSysLog nel file di configurazione /etc/systemd/journald.confjournald se si vuole utilizzare il logging syslog sul sistema Linux. Questa è la configurazione predefinita per molte distribuzioni linux.

Visualizzazione dei dati di log di PowerShell in syslog in Linux

Usare il gestore di pacchetti per la distribuzione Linux per installare un server syslog , ad esempio rsyslog, se desideri usare la registrazione syslog su un sistema Linux. Alcune distribuzioni Linux, come Ubuntu, preinstallano 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 contenuto di 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 comando per eseguire una query per le voci del syslog di PowerShell su 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 in cui è stata generata la voce di log.
  • MACHINENAME: nome del sistema in cui è stato prodotto il log.
  • PID - L'ID del processo che ha scritto la voce di log.
  • COMMITID: tag o ID commit git usati per produrre la compilazione.
  • TID - L'ID 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 per la 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, OPCODEe 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 consente di configurare le voci di log di PowerShell in Ubuntu per scrivere in un file di log denominato powershell.log.

  1. Creare un file config (conf) per la configurazione del log di PowerShell nella directory /etc/rsyslog.d usando un editor di file di testo, ad esempio nano. 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
    
  2. Aggiungere le informazioni seguenti al file 40-powershell.conf:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Verificare che /etc/rsyslog.conf disponga di un'istruzione include per il nuovo file. Può avere una dichiarazione generica che la include, ad esempio:

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

    In caso contrario, è necessario aggiungere manualmente un'istruzione di inclusione.

  4. 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 file 40-powershell.conf dispone di proprietà o autorizzazioni diverse, completare la procedura seguente:

    1. Impostare la proprietà su radice.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Impostare le autorizzazioni di accesso: root ha lettura/scrittura, gli utenti hanno accesso in lettura.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. Riavviare il servizio rsyslog.

    sudo systemctl restart rsyslog.service
    
  6. Eseguire pwsh per generare informazioni di PowerShell da registrare.

    pwsh
    

    Nota

    Il file non viene creato finché il servizio rsyslog non viene riavviato e PowerShell genera informazioni da registrare.

  7. Eseguire una query sul file powershell.log 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 strumento log 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 il precedente sistema di registrazione basato su syslog , 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 comando nel terminale o in un'altra applicazione host della shell. Questi comandi possono essere eseguiti da PowerShell, Z Shello Bash.

Nell'esempio seguente viene usato il comando log per visualizzare i dati di log nel sistema mentre si verificano in tempo reale. Il parametro del processo filtra i dati di log solamente per il processo . Se sono in esecuzione più istanze di , il parametro del processo accetta anche un ID del processo come valore. Il parametro livello mostra i messaggi a livello specificato e inferiore.

log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info

Il comando log show può essere usato per esportare gli elementi di log. Il comando log show offre opzioni per l'esportazione degli ultimi elementi N, elementi a partire da un determinato periodo di tempo o elementi entro un determinato intervallo di tempo.

Ad esempio, il comando seguente esporta gli elementi dal 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 comando log show.

È 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 cmdlet ConvertFrom-Json viene usato per convertire i dati JSON in oggetti PowerShell vengono archiviati nella variabile $logRecord.

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 siem (Security Information and Event Management) aggregatore. Con Microsoft Defender for Cloud Apps è 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 comando log config.

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 reimpostare per ripristinare le impostazioni di log sulle impostazioni predefinite per il sottosistema PowerShell:

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

Vedere anche