about_Logging_Non-Windows

Descrição breve

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

Descrição longa

O PowerShell registra detalhes de operações do PowerShell. Por exemplo, o PowerShell registrará operações como iniciar e parar o mecanismo e iniciar e parar provedores. Ele também registrará em log detalhes sobre os comandos do PowerShell.

O local dos logs do PowerShell depende da plataforma de destino. No Linux, os logs do PowerShell para syslog e rsyslog. conf podem ser usados. Para obter mais informações, consulte as páginas locais do computador Linux man . No MacOS, o sistema de log de os_log é usado. Para obter mais informações, consulte os_log documentação do desenvolvedor.

Exibindo a saída de log do PowerShell no Linux

Os logs do PowerShell para syslog no Linux e qualquer uma das ferramentas normalmente usadas para exibir o conteúdo do syslog podem ser usados.

O formato das entradas de log usa o seguinte modelo:

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
Campo Descrição
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 gravou a entrada de log.
COMMITID A git commit ID ou a marca usada para produzir a compilação.
TID A ID de thread do thread que gravou a entrada de log.
CID O identificador de canal hexaxa da entrada de log.
10 = Operacional, 11 = 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 para a entrada do evento
MESSAGE A mensagem associada à entrada do evento

Observação

EVENTID, TASK , e são os mesmos valores usados ao registrar em log no log de eventos do OPCODE LEVEL Windows.

Filtrando entradas de log do PowerShell usando rsyslog

Normalmente, as entradas de log do PowerShell são escritas no padrão location/file para syslog. No entanto, é possível redirecionar as entradas para um arquivo personalizado.

  1. Crie uma conf para a configuração de log do PowerShell e forneça um número menor que 50 (para 50-default.conf ), como 40-powershell.conf . O arquivo deve ser colocado em /etc/rsyslog.d .

  2. Adicione a seguinte entrada ao arquivo:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Inclua /etc/rsyslog.conf o novo arquivo. Geralmente, ele terá uma instrução de inclusão genérica que se parece com a seguinte configuração:

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

    Se não, você precisará adicionar uma instrução include manualmente.

  4. Certifique-se de que os atributos e permissões sejam definidos adequadamente.

    -rw-r--r-- 1 root root   67 Nov 28 12:51 40-powershell.conf
    
  5. De definir a propriedade como raiz.

    chown root:root /etc/rsyslog.d/40-powershell.conf
    
  6. Definir permissões de acesso: a raiz tem leitura/gravação, os usuários leram.

    chmod 644 /etc/rsyslog.d/40-powershell.conf
    

Exibindo a saída de log do PowerShell no macOS

O método mais fácil para exibir a saída de log do PowerShell no macOS é usando o aplicativo de console .

  1. Pesquise o aplicativo de console e inicie-o.
  2. Selecione o nome do computador em dispositivos.
  3. No campo de pesquisa , insira pwsh para o binário principal do PowerShell.
  4. Altere o filtro de pesquisa de Any para Process .
  5. Execute as operações.
  6. Opcionalmente, salve a pesquisa para uso futuro.

Para filtrar em uma instância de processo específica do PowerShell no console do, a variável $pid contém a ID do processo.

  1. Insira o pid (ID do processo) no campo de pesquisa .
  2. Altere o filtro de pesquisa para PID .
  3. Execute as operações.

Exibindo a saída de log do PowerShell de uma linha de comando

O log comando pode ser usado para exibir entradas de log do PowerShell na linha de comando.

sudo log stream --predicate 'process == "pwsh"' --info

Persistindo a saída de log do PowerShell

Por padrão, o PowerShell usa o log somente de memória padrão no macOS. Esse comportamento pode ser alterado para habilitar a persistência usando o log config comando.

O script a seguir habilita o registro em nível de informação e a persistência:

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

O comando a seguir reverte o log do PowerShell para o estado padrão:

log config --subsystem com.microsoft.powershell --mode=persist:default,level:default

Depois que a persistência é habilitada, o log show comando pode ser usado para exportar itens de log. O 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 of 2018 :

log show --info --start "2018-04-05 09:00:00" --predicate "process = 'pwsh'"

Você pode obter ajuda para log executando log show --help para obter detalhes adicionais.

Dica

Ao executar qualquer um dos comandos de log de um prompt ou script do PowerShell, use aspas duplas em toda a cadeia de caracteres de predicado e aspas simples. Isso evita a necessidade de escapar caracteres de aspas duplas dentro da cadeia de caracteres de predicado.

Talvez você também queira considerar salvar os logs de eventos em um local mais seguro, como um coletor de log de eventos central ou agregador [SIEM.][] Você pode configurar o SIEM no Azure. Para obter mais informações, consulte Integração siem genérica.

Configurando o registro em log em um sistema não Windows

No Windows, o registro em log é configurado criando ouvintes de rastreamento ETW ou usando o Visualizador de Eventos para habilitar o log de análise. No Linux e no macOS, o registro em log é configurado usando o arquivo powershell.config.json . O restante desta seção discutirá a configuração do log do PowerShell em um sistema não Windows.

Por padrão, o PowerShell habilita o registro em log informativo para o canal operacional. Isso significa que qualquer saída de log produzida pelo PowerShell marcada como operacional e com um nível de log (rastreamento) maior que informativo será registrada em log. Ocasionalmente, os diagnósticos podem exigir uma saída de log adicional, como a saída de log detalhada ou a habilitação da saída de log de análise.

O arquivo powershell.config.json é um arquivo formatado em JSON que reside no diretório do $PSHOME PowerShell. Cada instalação do PowerShell usa sua própria cópia desse arquivo. Para a operação normal, esse arquivo permanece inalterado. Embora possa ser útil, para alterar algumas das configurações no arquivo, para diagnóstico ou para distinguir entre várias versões do PowerShell no mesmo sistema ou até mesmo várias cópias da mesma versão (consulte na tabela LogIdentity abaixo).

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

{
  "Microsoft.PowerShell:ExecutionPolicy": "RemoteSigned",
  "PowerShellPolicies": {
    "ScriptExecution": {
      "ExecutionPolicy": "RemoteSigned",
      "EnableScripts": true
    },
    "ScriptBlockLogging": {
      "EnableScriptBlockInvocationLogging": true,
      "EnableScriptBlockLogging": true
    },
    "ModuleLogging": {
      "EnableModuleLogging": false,
      "ModuleNames": [
        "PSReadline",
        "PowerShellGet"
      ]
    },
    "ProtectedEventLogging": {
      "EnableProtectedEventLogging": false,
      "EncryptionCertificate": [
        "Joe"
      ]
    },
    "Transcription": {
      "EnableTranscripting": true,
      "EnableInvocationHeader": true,
      "OutputDirectory": "F:\\tmp\\new"
    },
    "UpdatableHelp": {
      "DefaultSourcePath": "f:\\temp"
    },
    "ConsoleSessionConfiguration": {
      "EnableConsoleSessionConfiguration": false,
      "ConsoleSessionConfigurationName": "name"
    }
  },
  "LogLevel": "verbose"
}

As propriedades para configurar o log do PowerShell são listadas na tabela a seguir. Valores marcados com um asterisco, como Operational* , indicam o valor padrão quando nenhum valor é fornecido no arquivo.

Propriedade Valores Descrição
LogIdentity (nome da cadeia de caracteres) O nome a ser usado ao registrar em log. Por padrão, o
PowerShell o PowerShell é a identidade. Esse valor pode ser
usado para informar a diferença entre dois
instâncias de uma instalação do PowerShell, como
como versão beta e liberação. Esse valor é
também usado para redirecionar a saída de log para um
arquivo separado no Linux. Consulte a discussão de
rsyslog acima.
LogChannels Eficiência Os canais a serem habilitados. Separar os valores
Analítico com uma vírgula ao especificar mais de um.
LogLevel Sempre Especifique um único valor. O valor habilita
Crítico si mesmo e todos os valores acima dele no
Erro do lista à esquerda.
Aviso
Informações*
Detalhado
Depurar
LogKeywords Runspace Palavras-chave fornecem a capacidade de limitar o registro em log
Pipeline para componentes específicos no PowerShell. Por
Protocolo padrão, todas as palavras-chave estão habilitadas e mudam
Transport esse valor só é útil para muito
Host solução de problemas especializada.
Cmdlets
serializador
Session
ManagedPlugin

Consulte também

Para obter informações sobre syslog e rsyslog.conf do Linux, consulte as páginas locais do computador man Linux.

Para obter informações sobre os_log macOS, consulte os_log do desenvolvedor.

about_Logging_Windows

Integração genérica ao SIEM