Compartilhar via


about_Logging_Non-Windows

Descrição curta

O PowerShell registra as operações internas do mecanismo, dos provedores e dos cmdlets.

Descrição longa

O PowerShell registra detalhes das operações do PowerShell, como iniciar e parar o mecanismo e iniciar e parar provedores. Ele também registra detalhes sobre comandos do PowerShell.

Para obter informações sobre o log de eventos no Windows PowerShell 5.1, consulte about_Logging.

O local dos logs do PowerShell depende da plataforma alvo.

  • No Linux, o PowerShell faz logon no diário sistemd que pode encaminhar para um servidor do syslog. Para obter mais informações, consulte as páginas de man para sua distribuição do Linux.
  • A Apple utiliza o sistema de registro em log unificado no macOS. Para obter mais informações, confira a Documentação da Apple para desenvolvedores sobre registro em log.

O PowerShell dá suporte à configuração de duas categorias de log:

  • Registro do módulo - Registre os eventos de execução do pipeline para membros dos módulos especificados. O registro em log do módulo deve ser habilitado para a sessão e módulos específicos. Para obter mais informações sobre como configurar esse registro em log, consulte about_PowerShell_Config.

    Se o log do módulo estiver habilitado por meio da configuração, você poderá habilitar e desabilitar o registro em log para módulos específicos em uma sessão definindo o valor da propriedade LogPipelineExecutionDetails do módulo.

    Por exemplo, para habilitar o registro em log do módulo PSReadLine:

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadLine | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Log de blocos de script – registre o processamento de comandos, scriptblocks, funções e scripts, sejam invocados interativamente ou por meio da automação.

    Quando você habilita o Script Block Logging, o PowerShell registra o conteúdo de todos os scriptblocks que ele processa. Uma vez habilitada, qualquer nova sessão do PowerShell registra essas informações.

    Nota

    Recomenda-se ativar o registro de eventos protegido ao usar o Log de blocos de script para outros fins que não sejam de diagnóstico. Para obter mais informações, consulte about_PowerShell_Config.

Configurando o log no Linux ou no macOS

A configuração para fazer logon no Linux e no macOS é armazenada no arquivo powershell.config.json. O arquivo é um arquivo formatado JSON que reside no diretório do PowerShell. Se esse arquivo de configuração não existir, você precisará criá-lo para alterar as configurações padrão. Cada instalação do PowerShell usa sua própria cópia deste arquivo.

Por padrão, o PowerShell habilita o registro em log Informational no canal Operational. Você poderá alterar a configuração se precisar de saída de log adicional, como verboso ou habilitar a saída de log analítico.

O código a seguir é uma configuração de exemplo:

{
    "ModuleLogging": {
        "EnableModuleLogging": false,
        "ModuleNames": [
            "PSReadLine",
            "PowerShellGet"
        ]
    },
    "ScriptBlockLogging": {
        "EnableScriptBlockInvocationLogging": true,
        "EnableScriptBlockLogging": true
    },
    "LogLevel": "verbose"
}

Veja a seguir uma lista de propriedades para configurar o log do PowerShell. Se a propriedade não estiver listada na configuração, o PowerShell usará o valor padrão.

  • LogIdentity
    • Valores: <string name>, powershell
    • Descrição: o nome a ser usado no registro de log. A identidade padrão é powershell. Esse valor pode ser usado para distinguir entre duas instâncias de uma instalação do PowerShell, como uma versão de lançamento e beta. Esse valor também é usado para redirecionar a saída de log para um arquivo separado.
  • LogChannels
    • Valores: Operational, Analytic
    • Descrição: os canais a serem habilitados. Separe os valores com uma vírgula ao especificar mais de um. O valor padrão é Operational.
  • LogLevel
    • Valores: Always, Critical, Error, Warning, Informational, Verbose, Debug
    • Descrição: especifique um único valor. Os valores são listados em ordem crescente de verbosidade. O valor escolhido habilita a si mesmo e todos os valores antes dele. O valor padrão é Informational.
  • LogKeywords
    • Valores: Runspace, Pipeline, Protocol, Transport, Host, Cmdlets, Serializer, Session, ManagedPlugin
    • Descrição: As palavras-chave fornecem a capacidade de limitar o log a componentes específicos no PowerShell. Por padrão, todas as palavras-chave estão habilitadas e alterar esse valor só é útil para solução de problemas especializada.
  • Políticas do PowerShell
    • Descrição: a configuração do PowerShellPolicies contém as opções ModuleLogging, ProtectedEventLogginge ScriptBlockLogging. Para obter mais informações, consulte Configurações comuns.

Exibindo dados de log do PowerShell em diário no Linux

O PowerShell grava logs no sistema de diário systemd usando o daemon journald em distribuições Linux, como o Ubuntu e o Red Hat Enterprise Linux (RHEL).

O daemon jounald armazena mensagens de log em um formato binário. Utilize o utilitário journalctl para consultar o log de eventos para entradas do PowerShell.

journalctl --grep powershell

O daemon do journald pode encaminhar mensagens de log para um servidor do System Logging Protocol (syslog). Habilite a opção ForwardToSysLog no /etc/systemd/journald.confarquivo de configuração de diário se você quiser usar registro em log syslog em seu sistema Linux. Essa é a configuração padrão para muitas distribuições do Linux.

Exibindo dados de log do PowerShell no syslog no Linux

Use o gerenciador de pacotes para sua distribuição do Linux para instalar um servidor do syslog como rsyslog se quiser usar o log de syslog em seu sistema Linux. Algumas distribuições do Linux, como a pré-instalação do Ubuntu rsyslog.

O protocolo syslog armazena mensagens de log em um formato de texto padronizado. Você pode usar qualquer utilitário de processamento de texto para consultar ou exibir conteúdo do syslog.

Por padrão, syslog grava entradas de log no seguinte local:

  • Em distribuições baseadas em Debian, incluindo Ubuntu: /var/log/syslog
  • Em distribuições baseadas em RHEL: /var/log/messages

O exemplo a seguir usa o comando para consultar entradas syslog do PowerShell no Ubuntu.

cat /var/log/syslog | grep -i powershell

Formato de mensagem do Syslog

As mensagens do Syslog têm o seguinte formato:

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
  • TIMESTAMP – uma data/hora em que a entrada de log foi produzida.
  • MACHINENAME – o nome do sistema em que o log foi produzido.
  • PID – A ID do processo que escreveu a entrada de log.
  • COMMITID – O ID ou tag do git commit usado para produzir o build.
  • TID – O ID do thread que escreveu o registro de log.
  • CID – o identificador hex de canal da entrada de log.
    • 0x10 = Operacional
    • 0x11 = Análise
  • EVENTID – o identificador de evento da entrada de log.
  • TASK – O identificador de tarefa para a entrada do evento
  • OPCODE - O OpCode para a entrada do evento
  • LEVEL – O nível de log da entrada do evento
  • MESSAGE – A mensagem associada à entrada do evento

EVENTID, TASK, OPCODEe LEVEL são os mesmos valores usados ao fazer logon no log de eventos do Windows.

Gravar mensagem de log do PowerShell em um arquivo separado

Também é possível redirecionar as entradas de log do PowerShell para um arquivo separado. Quando as entradas de log do PowerShell são redirecionadas para um arquivo separado, elas não são mais registradas no arquivo de syslog padrão.

As etapas a seguir configuram as entradas de log do PowerShell no Ubuntu para gravar em um arquivo de log chamado powershell.log.

  1. Crie um arquivo de configuração (conf) para a configuração de log do PowerShell no diretório /etc/rsyslog.d usando um editor de arquivos de texto, como nano. Prefixe o nome do arquivo com um número menor que o padrão. Por exemplo, 40-powershell.conf em que o padrão é 50-default.conf.

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. Adicione as seguintes informações ao arquivo 40-powershell.conf:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Verifique se /etc/rsyslog.conf tem uma instrução include para o novo arquivo. Pode ter uma instrução genérica que a inclua, como:

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

    Se isso não ocorrer, você precisará adicionar uma declaração 'include' manualmente.

  4. Verifique se os atributos e as permissões estão definidos adequadamente.

    ls -l /etc/rsyslog.d/40-powershell.conf
    
    -rw-r--r-- 1 root root   67 Nov 28 12:51 40-powershell.conf
    

    Se o arquivo 40-powershell.conf tiver propriedade ou permissões diferentes, conclua as seguintes etapas:

    1. Defina a propriedade para root.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Definir permissões de acesso: root tem leitura/gravação, usuários têm leitura.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. Reinicie o serviço rsyslog.

    sudo systemctl restart rsyslog.service
    
  6. Execute pwsh para gerar informações do PowerShell para registrar em log.

    pwsh
    

    Nota

    O arquivo /var/log/powershell.log não é criado até que o serviço rsyslog seja reiniciado e o PowerShell gere informações para registrar em log.

  7. Consulte o arquivo powershell.log para verificar se as informações do PowerShell estão sendo registradas no novo arquivo.

    cat /var/log/powershell.log
    

Exibindo dados de log do PowerShell no macOS

O PowerShell faz logon no sistema de log unificado da Apple, um recurso do macOS que permite a coleta e o armazenamento de logs do sistema e do aplicativo em um único local centralizado.

O sistema de log unificado da Apple armazena mensagens de log no formato binário. Você deve usar a ferramenta log para consultar o sistema de log unificado para eventos de log do PowerShell. Os eventos de log do PowerShell não aparecem no aplicativo Console no macOS. O aplicativo de console foi projetado para o antigo registro em log baseado em syslog anterior ao sistema unificado de registro em log.

Exibindo dados de log do PowerShell da linha de comando no macOS

Para exibir dados de log do PowerShell a partir de uma linha de comando no macOS, use o comando log no Terminal ou em outro aplicativo host do shell. Esses comandos podem ser executados do PowerShell, do Shell Z ou bash.

No exemplo a seguir, o comando log é usado para mostrar os dados de log em seu sistema, pois eles estão ocorrendo em tempo real. O parâmetro do processo filtra os dados de log de apenas o processo pwsh. Se você tiver mais de uma instância de pwsh em execução, o parâmetro também aceita um ID de processo como valor. O parâmetro de nível mostra mensagens no nível especificado e abaixo.

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

O comando log show pode ser usado para exportar itens de log. O comando log show fornece opções para exportar os últimos N itens, itens desde um determinado tempo ou itens em um determinado período de tempo.

Por exemplo, o comando a seguir exporta itens desde 9am on April 5, 2022:

log show --start "2022-04-05 09:00:00" --predicate "subsystem == 'com.microsoft.powershell'"

Para obter mais informações, execute log show --help para exibir a ajuda do comando log show.

Você também pode gerar os dados de log no formato JSON, o que permite converter os dados do evento em objetos do PowerShell. O exemplo a seguir gera os eventos no formato JSON. O cmdlet ConvertFrom-Json é usado para converter os dados JSON em objetos do PowerShell, e são armazenados na variável $logRecord.

log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
    ConvertFrom-Json | Set-Variable logRecord

Talvez você também queira considerar salvar os logs em um local mais seguro, como siem (Gerenciamento de Eventos e Informações de Segurança) agregador. Usando o Microsoft Defender para Aplicativos de Nuvem, você pode configurar o SIEM no Azure. Para obter mais informações, consulte Integração de SIEM genérico.

Modos e níveis de dados de log do PowerShell no macOS

Por padrão, o subsistema do PowerShell registra mensagens de nível de informação na memória (modo) e mensagens de nível padrão em disco (persistência) no macOS. Esse comportamento pode ser alterado para habilitar um modo e um nível diferentes de logging usando o comando log config.

O exemplo a seguir habilita o registro em log e persistência no nível de informações para o subsistema do PowerShell:

sudo log config --subsystem com.microsoft.powershell --mode level:info,persist:info

Use o parâmetro reset para reverter as configurações de log para os padrões do subsistema do PowerShell:

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

Consulte também