about_Logging_Non-Windows
Breve descrição
O PowerShell registra operações internas do mecanismo, provedores e 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 como registrar em log no Windows PowerShell 5.1, consulte about_Logging.
O local dos logs do PowerShell depende da plataforma de destino.
- No Linux, o PowerShell registra no diário systemd que pode encaminhar para um servidor syslog . Para obter mais informações, consulte as
man
páginas para sua distribuição Linux. - No macOS, é usado o sistema de registro unificado da Apple. Para obter mais informações, consulte a documentação do desenvolvedor da Apple sobre registro.
O PowerShell dá suporte à configuração de duas categorias de registro:
Log de módulos - Registre os eventos de execução do pipeline para membros de 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 log, consulte about_PowerShell_Config.
Se o log do módulo estiver habilitado por meio da configuração, você poderá habilitar e desabilitar o log para módulos específicos em uma sessão definindo o valor da propriedade LogPipelineExecutionDetails do módulo.
Por exemplo, para habilitar o 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, blocos de script, funções e scripts invocados interativamente ou por meio de automação.
Quando você habilita o Log de Blocos de Script, o PowerShell registra o conteúdo de todos os blocos de script que processa. Uma vez habilitada, qualquer nova sessão do PowerShell registra essas informações.
Nota
É recomendável habilitar o Log de Eventos Protegidos ao usar o Log de Blocos de Script para qualquer outra finalidade que não seja de diagnóstico. Para obter mais informações, consulte about_PowerShell_Config.
Configurando o registro em log no Linux ou macOS
A configuração para fazer login no Linux e macOS é armazenada no powershell.config.json
arquivo. O powershell.config.json
arquivo é um arquivo formatado em JSON que reside no diretório do PowerShell $PSHOME
. 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 desse arquivo.
Por padrão, o PowerShell habilita Informational
o registro em log no Operational
canal. Você pode alterar a configuração se precisar de saída de log adicional, como detalhada ou habilitando a saída de log analítico.
O código a seguir é um exemplo de configuração:
{
"ModuleLogging": {
"EnableModuleLogging": false,
"ModuleNames": [
"PSReadLine",
"PowerShellGet"
]
},
"ScriptBlockLogging": {
"EnableScriptBlockInvocationLogging": true,
"EnableScriptBlockLogging": true
},
"LogLevel": "verbose"
}
A seguir está 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 ao registrar. A identidade padrão é
powershell
. Esse valor pode ser usado para diferenciar duas instâncias de uma instalação do PowerShell, como uma versão versão e uma versão beta. Esse valor também é usado para redirecionar a saída do log para um arquivo separado.
- Valores:
- LogCanais
- Valores:
Operational
,Analytic
- Descrição: Os canais a habilitar. Separe os valores com uma vírgula ao especificar mais de um. O valor predefinido é
Operational
.
- Valores:
- 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 que você escolher habilita a si mesmo e todos os valores antes dele. O valor predefinido é
Informational
.
- Valores:
- LogPalavras-chave
- Valores: , , , , ,
Host
,Cmdlets
,Serializer
Session
, ,Transport
Protocol
Pipeline
Runspace
ManagedPlugin
- Descrição: as palavras-chave fornecem a capacidade de limitar o registro em log a componentes específicos no PowerShell. Por padrão, todas as palavras-chave são habilitadas e alterar esse valor só é útil para solução de problemas especializada.
- Valores: , , , , ,
- PowerShellPolíticas
- Descrição: A configuração PowerShellPolicies contém as opções ModuleLogging, ProtectedEventLog e ScriptBlockLogging . Para obter mais informações, consulte Definições de configuração comuns.
Exibindo dados de log do PowerShell no diário no Linux
O PowerShell registra no diário systemd usando o daemon journald em distribuições Linux, como Ubuntu e Red Hat Enterprise Linux (RHEL).
O daemon registrado no diário armazena mensagens de log em um formato binário. Use o journalctl
utilitário para consultar o log de diário para entradas do PowerShell.
journalctl --grep powershell
O daemon registrado no diário pode encaminhar mensagens de log para um servidor syslog (System Logging Protocol). Habilite a opção no arquivo de configuração com registro no /etc/systemd/journald.conf
diário se quiser usar o ForwardToSysLog
log syslog em seu sistema Linux. Esta é a configuração padrão para muitas distribuições Linux.
Exibindo dados de log do PowerShell no syslog no Linux
Use o gerenciador de pacotes para sua distribuição Linux para instalar um servidor syslog , como rsyslog , se você quiser usar o log syslog em seu sistema Linux. Algumas distribuições Linux, como o Ubuntu, pré-instalam o 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 o conteúdo do syslog .
Por padrão, o syslog grava entradas de log no seguinte local:
- Em distribuições baseadas em Debian, incluindo o Ubuntu:
/var/log/syslog
- Em distribuições baseadas em RHEL:
/var/log/messages
O exemplo a seguir usa o cat
comando para consultar entradas syslog do PowerShell no Ubuntu.
cat /var/log/syslog | grep -i powershell
Formato de mensagem Syslog
As mensagens 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 onde o log foi produzido.
- PID - A ID do processo que escreveu a entrada de log.
- COMMITID - O ID ou tag git commit usado para produzir a compilação.
- TID - O ID do thread que escreveu a entrada de log.
- CID - O identificador de canal hexadecimal da entrada de log.
- 0x10 = Operacional
- 0x11 = Analítico
- EVENTID - O identificador de evento da entrada de log.
- TASK - O identificador de tarefa para a entrada de evento
- OPCODE - O opcode para a entrada do evento
- LEVEL - O nível de log para a entrada do evento
- MESSAGE - A mensagem associada à entrada do evento
EVENTID, TASK, OPCODE e LEVEL são os mesmos valores usados ao registrar 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 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
.
Crie um arquivo de configuração (
conf
) para a configuração de log do/etc/rsyslog.d
PowerShell no diretório usando um editor de arquivo de texto, comonano
. Prefira o nome do arquivo com um número menor que o padrão. Por exemplo,40-powershell.conf
onde o padrão é50-default.conf
.sudo nano /etc/rsyslog.d/40-powershell.conf
Adicione as seguintes informações ao
40-powershell.conf
arquivo::syslogtag, contains, "powershell[" /var/log/powershell.log & stop
Verifique se
/etc/rsyslog.conf
tem uma instrução include para o novo arquivo. Pode ter uma declaração genérica que o inclua, tais como:$IncludeConfig /etc/rsyslog.d/*.conf
Se isso não acontecer, você precisará adicionar uma instrução include manualmente.
Verifique se os atributos e 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
40-powershell.conf
arquivo tiver propriedade ou permissões diferentes, conclua as seguintes etapas:Defina a propriedade como root.
sudo chown root:root /etc/rsyslog.d/40-powershell.conf
Definir permissões de acesso: root tem leitura/gravação, os usuários leram.
sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
Reinicie o serviço rsyslog .
sudo systemctl restart rsyslog.service
Execute
pwsh
para gerar informações do PowerShell para log.pwsh
Nota
O
/var/log/powershell.log
arquivo não é criado até que o serviço rsyslog seja reiniciado e o PowerShell gere informações para registro.Consulte o
powershell.log
arquivo 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 registra 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 registo unificado da Apple armazena mensagens de registo em formato binário. Você deve usar a log
ferramenta 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 log baseado em syslog mais antigo que antecede o sistema de log unificado.
Exibindo dados de log do PowerShell a partir da linha de comando no macOS
Para exibir dados de log do PowerShell de uma linha de comando no macOS, use o log
comando no Terminal ou em outro aplicativo host do shell. Esses comandos podem ser executados a partir do PowerShell, Z Shell ou Bash.
No exemplo a seguir, o log
comando é usado para mostrar os dados de log em seu sistema como eles estão ocorrendo em tempo real. O parâmetro process filtra os dados de log apenas para o pwsh
processo. Se você tiver mais de uma instância em execução, o parâmetro process também aceitará uma ID de pwsh
processo como seu valor. O parâmetro level mostra mensagens no nível especificado e abaixo.
log stream --predicate "subsystem == 'com.microsoft.powershell'" --level info
O log show
comando pode ser usado para exportar itens de log. O log show
comando fornece opções para exportar os últimos N
itens, itens desde um determinado tempo ou itens dentro de 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 para o log show
comando.
Você também pode exportar 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 ConvertFrom-Json
cmdlet é usado para converter os dados JSON em objetos do PowerShell são armazenados na $logRecord
variável.
log show --predicate "subsystem == 'com.microsoft.powershell'" --style json |
ConvertFrom-Json | Set-Variable logRecord
Você também pode considerar salvar os logs em um local mais seguro, como o agregador de Gerenciamento de Informações e Eventos de Segurança (SIEM). Usando o Microsoft Defender for Cloud Apps, você pode configurar o SIEM no Azure. Para obter mais informações, consulte Integração SIEM genérica.
Modos e níveis de dados de log do PowerShell no macOS
Por padrão, o subsistema PowerShell registra mensagens de nível de informações na memória (modo) e mensagens de nível padrão no disco (persistência) no macOS. Esse comportamento pode ser alterado para habilitar um modo diferente e nível de log usando o log config
comando.
O exemplo a seguir habilita o registro em log e a persistência no nível de informações para o subsistema 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 PowerShell:
sudo log config --subsystem com.microsoft.powershell --reset
Consulte também
- Para obter informações sobre syslog e rsyslog.conf do Linux, consulte as páginas locais
man
do computador Linux - Para obter informações sobre o registro em log do macOS, consulte a documentação do desenvolvedor da Apple sobre registro em log
- Para Windows, consulte about_Logging_Windows
- Integração SIEM genérica