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.
  • 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, ErrorWarning, Informational, , VerboseDebug
    • 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.
  • LogKeywords
    • Valori: Runspace, Pipeline, ProtocolTransport, Host, Cmdlets, Serializer, , SessionManagedPlugin
    • 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 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.

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

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. 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.

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

    1. Impostare la proprietà su root.

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

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

    sudo systemctl restart rsyslog.service
    
  6. 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.

  7. 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. Usare l'app console o lo strumento di log per eseguire query sul sistema di registrazione unificato per le voci di PowerShell.

Visualizzazione dei dati di log di PowerShell nell'applicazione console in macOS

L'applicazione console in macOS è un'utilità che fornisce un'interfaccia utente grafica per la visualizzazione dei dati di log. L'applicazione console è inclusa in macOS per impostazione predefinita ed è accessibile aprendo la cartella Utilità nella cartella Applicazioni.

Usare la procedura seguente per visualizzare i dati di log di PowerShell nell'applicazione console in macOS:

  1. Cercare l'applicazione console e avviarla.
  2. Selezionare il nome del computer in Dispositivi.
  3. Nel campo Cerca immettere pwsh per il file binario principale di PowerShell e premere INVIO.
  4. Modificare il filtro di ricerca da Any a Process.
  5. Fare clic su Inizia.
  6. Eseguire pwsh per generare le informazioni di PowerShell da registrare.

L'ID del processo per un'istanza in esecuzione di PowerShell viene archiviato nella $PID variabile . Usare la procedura seguente per filtrare in base a un'istanza specifica del processo di PowerShell nell'applicazione console .

  1. Eseguire un'istanza di pwsh.
  2. Eseguire $PID nell'istanza di PowerShell avviata nel passaggio precedente per determinare l'ID processo.
  3. Immettere l'ID processo per pwsh nel campo Cerca e premere INVIO.
  4. Modificare il filtro di ricerca da Any a PID.
  5. Fare clic su Inizia.
  6. Generare informazioni di PowerShell per eseguire il log dall'istanza di PowerShell avviata nel primo passaggio.

Per altre informazioni, vedere Visualizzare i messaggi di log nella console in Mac.

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, dalla shell Z (Zsh) o da 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 --process pwsh --level info

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

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 of 2022:

log show --info --start "2022-04-05 09:00:00" --process pwsh

Per altre informazioni, eseguire log show --help per visualizzare la Guida per il log show comando .

È 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.

Vedi anche