Compartir a través de


about_Logging_Non-Windows

Descripción breve

PowerShell registra las operaciones internas del motor, los proveedores y los cmdlets.

Descripción larga

PowerShell registra los detalles de las operaciones de PowerShell, como iniciar y detener el motor y iniciar y detener proveedores. También registra detalles sobre los comandos de PowerShell.

Para obtener información sobre el registro en Windows PowerShell 5.1, consulte about_Logging.

La ubicación de los registros de PowerShell depende de la plataforma de destino.

  • En Linux, PowerShell registra en el diario systemd que puede reenviar a un servidor syslog . Para obtener más información, consulte las man páginas de la distribución de Linux.
  • En macOS, se usa el sistema de registro unificado de Apple. Para obtener más información, consulte la documentación para desarrolladores de Apple sobre el registro.

PowerShell admite la configuración de dos categorías de registro:

  • Registro de módulos: registre los eventos de ejecución de canalización para los miembros de los módulos especificados. El registro de módulos debe estar habilitado para la sesión y los módulos específicos. Para obtener más información sobre cómo configurar este registro, consulte about_PowerShell_Config.

    Si el registro de módulos está habilitado a través de la configuración, puede habilitar y deshabilitar el registro de módulos específicos en una sesión estableciendo el valor de la propiedad LogPipelineExecutionDetails del módulo.

    Por ejemplo, para habilitar el registro de módulos para el módulo PSReadLine :

    $psrl = Get-Module PSReadLine
    $psrl.LogPipelineExecutionDetails = $true
    Get-Module PSReadline | Select-Object Name, LogPipelineExecutionDetails
    
    Name       LogPipelineExecutionDetails
    ----       ---------------------------
    PSReadLine                        True
    
  • Registro de bloques de script: registre el procesamiento de comandos, bloques de scripts, funciones y scripts, tanto si se invocan de forma interactiva como a través de la automatización.

    Al habilitar el registro de bloques de scripts, PowerShell registra el contenido de todos los bloques de script que procesa. Una vez habilitada, cualquier nueva sesión de PowerShell registra esta información.

    Nota:

    Se recomienda habilitar el registro de eventos protegidos al usar el registro de bloques de scripts para cualquier otro propósito que no sea de diagnóstico. Para obtener más información, consulte about_PowerShell_Config.

Configuración del registro en Linux o macOS

La configuración para el registro en Linux y macOS se almacena en el powershell.config.json archivo. El powershell.config.json archivo es un archivo con formato JSON que reside en el directorio de PowerShell $PSHOME . Si este archivo de configuración no existe, deberá crearlo para cambiar la configuración predeterminada. Cada instalación de PowerShell usa su propia copia de este archivo.

De forma predeterminada, PowerShell habilita Informational el registro en el Operational canal. Puede cambiar la configuración si necesita una salida de registro adicional, como la detallada o la habilitación de la salida del registro analítico.

El código siguiente es una configuración de ejemplo:

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

A continuación se muestra una lista de propiedades para configurar el registro de PowerShell. Si la propiedad no aparece en la configuración, PowerShell usa el valor predeterminado.

  • LogIdentity
    • Valores: <string name>, powershell
    • Descripción: el nombre que se va a usar al registrar. La identidad predeterminada es powershell. Este valor se puede usar para indicar la diferencia entre dos instancias de una instalación de PowerShell, como una versión beta y una versión preliminar. Este valor también se usa para redirigir la salida del registro a un archivo independiente.
  • LogChannels
    • Valores: Operational, Analytic
    • Descripción: los canales que se van a habilitar. Separe los valores con una coma al especificar más de uno. El valor predeterminado es Operational.
  • LogLevel
    • Valores: Always, Critical, Error, Warning, Informational, , VerboseDebug
    • Descripción: especifique un valor único. Los valores se enumeran en orden creciente de detalle. El valor que elija se habilita y todos los valores antes que él. El valor predeterminado es Informational.
  • LogKeywords
    • Valores: Runspace, Pipeline, Protocol, Transport, Host, Cmdlets, Serializer, , SessionManagedPlugin
    • Descripción: las palabras clave proporcionan la capacidad de limitar el registro a componentes específicos dentro de PowerShell. De forma predeterminada, todas las palabras clave están habilitadas y cambian este valor solo es útil para la solución de problemas especializada.
  • PowerShellPolicies
    • Descripción: la configuración powerShellPolicies contiene las opciones ModuleLogging, ProtectedEventLogging y ScriptBlockLogging . Para obtener más información, consulte Opciones de configuración comunes.

Visualización de datos de registro de PowerShell en diario en Linux

PowerShell registra en el diario systemd mediante el demonio en diario en distribuciones de Linux, como Ubuntu y Red Hat Enterprise Linux (RHEL).

El demonio en diario almacena los mensajes de registro en un formato binario. Use la journalctl utilidad para consultar el registro del diario para las entradas de PowerShell.

journalctl --grep powershell

El demonio en diario puede reenviar mensajes de registro a un servidor de Protocolo de registro del sistema (syslog). Habilite la ForwardToSysLog opción en el /etc/systemd/journald.conf archivo de configuración en diario si desea usar el registro de syslog en el sistema Linux. Esta es la configuración predeterminada para muchas distribuciones de Linux.

Visualización de datos de registro de PowerShell en syslog en Linux

Use el administrador de paquetes para la distribución de Linux para instalar un servidor syslog como rsyslog si desea usar el registro de syslog en el sistema Linux. Algunas distribuciones de Linux, como Ubuntu preinstalar rsyslog.

El protocolo syslog almacena los mensajes de registro en un formato de texto estandarizado. Puede usar cualquier utilidad de procesamiento de texto para consultar o ver el contenido de syslog .

De forma predeterminada, syslog escribe entradas de registro en la siguiente ubicación:

  • En distribuciones basadas en Debian, incluido Ubuntu: /var/log/syslog
  • En distribuciones basadas en RHEL: /var/log/messages

En el ejemplo siguiente se usa el cat comando para consultar las entradas de syslog de PowerShell en Ubuntu.

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

Formato de mensaje de Syslog

Los mensajes de Syslog tienen el formato siguiente:

TIMESTAMP MACHINENAME powershell[PID]: (COMMITID:TID:CID)
  [EVENTID:TASK.OPCODE.LEVEL] MESSAGE
  • TIMESTAMP : fecha y hora en que se produjo la entrada del registro.
  • MACHINENAME : el nombre del sistema en el que se generó el registro.
  • PID : el identificador de proceso del proceso que escribió la entrada de registro.
  • COMMITID : identificador de confirmación de Git o etiqueta que se usa para generar la compilación.
  • TID : identificador de subproceso del subproceso que escribió la entrada de registro.
  • CID : identificador de canal hexadecimal de la entrada de registro.
    • 0x10 = operativo
    • 0x11 = Análisis
  • EVENTID : identificador de evento de la entrada de registro.
  • TASK : identificador de tarea para la entrada de evento
  • OPCODE : código de operación para la entrada del evento
  • LEVEL : el nivel de registro de la entrada de evento.
  • MESSAGE : el mensaje asociado a la entrada del evento

EVENTID, TASK, OPCODE y LEVEL son los mismos valores que se usan al iniciar sesión en el registro de eventos de Windows.

Escribir un mensaje de registro de PowerShell en un archivo independiente

También es posible redirigir las entradas de registro de PowerShell a un archivo independiente. Cuando las entradas de registro de PowerShell se redirigen a un archivo independiente, ya no se registran en el archivo de syslog predeterminado.

Los pasos siguientes configuran entradas de registro de PowerShell en Ubuntu para escribir en un archivo de registro denominado powershell.log.

  1. Cree un archivo de configuración (conf) para la configuración de registro de PowerShell en el /etc/rsyslog.d directorio mediante un editor de archivos de texto como nano. Prefijo del nombre de archivo con un número menor que el predeterminado. Por ejemplo, 40-powershell.conf donde el valor predeterminado es 50-default.conf.

    sudo nano /etc/rsyslog.d/40-powershell.conf
    
  2. Agregue la siguiente información al 40-powershell.conf archivo:

    :syslogtag, contains, "powershell[" /var/log/powershell.log
    & stop
    
  3. Compruebe que /etc/rsyslog.conf tiene una instrucción include para el nuevo archivo. Puede tener una instrucción genérica que la incluya, como:

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

    Si no es así, deberá agregar manualmente una instrucción include.

  4. Compruebe que los atributos y permisos se establecen correctamente.

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

    Si el 40-powershell.conf archivo tiene una propiedad o permisos diferentes, complete los pasos siguientes:

    1. Establezca la propiedad en root.

      sudo chown root:root /etc/rsyslog.d/40-powershell.conf
      
    2. Establecer permisos de acceso: la raíz tiene lectura y escritura, los usuarios han leído.

      sudo chmod 644 /etc/rsyslog.d/40-powershell.conf
      
  5. Reinicie el servicio rsyslog .

    sudo systemctl restart rsyslog.service
    
  6. Ejecute pwsh para generar información de PowerShell para registrar.

    pwsh
    

    Nota:

    El /var/log/powershell.log archivo no se crea hasta que se reinicia el servicio rsyslog y PowerShell genera información para registrar.

  7. Consulte el powershell.log archivo para comprobar que la información de PowerShell se está registrando en el nuevo archivo.

    cat /var/log/powershell.log
    

Visualización de datos de registro de PowerShell en macOS

PowerShell registra en el sistema de registro unificado de Apple, una característica de macOS que permite la recopilación y el almacenamiento de registros del sistema y de la aplicación en una sola ubicación centralizada.

El sistema de registro unificado de Apple almacena los mensajes de registro en formato binario. Debe usar la log herramienta para consultar el sistema de registro unificado para eventos de registro de PowerShell. Los eventos de registro de PowerShell no aparecen en la aplicación Consola en macOS. La aplicación de consola está diseñada para el registro anterior basado en syslog que predepone el sistema de registro unificado.

Visualización de datos de registro de PowerShell desde la línea de comandos en macOS

Para ver los datos de registro de PowerShell desde una línea de comandos en macOS, use el log comando en el Terminal u otra aplicación host de shell. Estos comandos se pueden ejecutar desde PowerShell, Z Shell o Bash.

En el ejemplo siguiente, el log comando se usa para mostrar los datos de registro en el sistema a medida que se producen en tiempo real. El parámetro process filtra los datos de registro solo para el pwsh proceso. Si tiene más de una instancia de pwsh en ejecución, el parámetro de proceso también acepta un identificador de proceso como su valor. El parámetro level muestra mensajes en el nivel especificado y a continuación.

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

El log show comando se puede usar para exportar elementos de registro. El log show comando proporciona opciones para exportar los últimos N elementos, elementos desde un tiempo determinado o elementos dentro de un intervalo de tiempo determinado.

Por ejemplo, el comando siguiente exporta elementos desde 9am on April 5, 2022:

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

Para obtener más información, ejecute log show --help para ver la ayuda del log show comando.

También puede generar los datos de registro en formato JSON, lo que le permite convertir los datos de eventos en objetos de PowerShell. En el ejemplo siguiente se generan los eventos en formato JSON. El ConvertFrom-Json cmdlet se usa para convertir los datos JSON en objetos de PowerShell se almacenan en la $logRecord variable .

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

También puede considerar la posibilidad de guardar los registros en una ubicación más segura, como el agregador de información de seguridad y administración de eventos (SIEM ). Con Microsoft Defender for Cloud Apps, puede configurar SIEM en Azure. Para obtener más información, consulte Integración de SIEM genérica.

Modos y niveles de datos de registro de PowerShell en macOS

De forma predeterminada, el subsistema de PowerShell registra mensajes de nivel de información en memoria (modo) y mensajes de nivel predeterminados en el disco (persistencia) en macOS. Este comportamiento se puede cambiar para habilitar otro modo y nivel de registro mediante el log config comando .

En el ejemplo siguiente se habilita el registro de nivel de información y la persistencia para el subsistema de PowerShell:

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

Use el parámetro reset para revertir la configuración de registro a los valores predeterminados del subsistema de PowerShell:

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

Consulte también