Deshabilitar el registro de eventos de Windows PowerShell

Deshabilitar el registro de eventos de Windows PowerShell

Estoy usando PsExec para ejecutar scripts de PowerShell en máquinas remotas y, como efecto secundario de esto, el registro de eventos de "Windows PowerShell" (que se encuentra en el Visor de eventos en "Registros de aplicaciones y servicios") registra todos nuestros argumentos en el script en "HostApplication". Esto es un problema porque algunos de estos argumentos contienen contraseñas confidenciales.

Intenté configurar las variables de preferencia que se enumeran a continuación en falsas, pero aún así se crearán registros cuando se inicie el motor PowerShell. Por lo que he leído, esto se debe a que PowerShell crea estos registros incluso antes de verificar el valor de estas variables de preferencia.

$LogEngineLifeCycleEvent=$false;
$LogEngineHealthEvent=$false;
$LogProviderLifeCycleEvent=$false;
$LogProviderHealthEvent=$false;

Nuestra solución actual utiliza estas variables de preferencia en combinación con colocar la siguiente línea al principio de cada uno de nuestros scripts de PowerShell para garantizar que los registros creados cuando se inicia el motor de PowerShell se borren.

Clear-EventLog "Windows PowerShell";

Esta solución está bien, pero me gustaría llegar a un punto en el que nuestras contraseñas nunca se guarden en el registro y nunca sea necesario borrar el registro. ¿Hay alguna forma de deshabilitar el registro de PowerShell para que no se creen eventos en NINGÚN punto del ciclo de vida del motor de PowerShell?

Respuesta1

creo que lo siguientePolíticas de grupo localson lo que necesitas, particularmente el segundo:


Activar el registro del módulo

Si usteddesactivarCon esta configuración de directiva, el registro de eventos de ejecución está deshabilitado para todos los módulos de Windows PowerShell. Deshabilitar esta configuración de política para un módulo equivale a establecer la propiedad LogPipelineExecutionDetails del módulo en False.


Activar el registro de bloques de PowerShell

Esta configuración de directiva permite el registro de todas las entradas de scripts de PowerShell en Microsoft-Windows-PowerShell/Operational.registro de eventos. Si habilita esta configuración de directiva, Windows PowerShell registrará el procesamiento de comandos, bloques de secuencias de comandos, funciones y secuencias de comandos, ya sea que se invoquen de forma interactiva o mediante automatización.

Si usteddesactivarCon esta configuración de directiva, el registro de la entrada del script de PowerShell está deshabilitado.


  1. PrensaWin+R
  2. Tipogpedit.msc
  3. Ir aComputer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell

  1. Luego configure los ajustes explicados anteriormente.

Respuesta2

Tuve el mismo problema y escribí esta función para eliminar el registro de eventos.

Function Remove-PowerShellEventLog {
    Write-ToLog -Message 'Remove the PowerShell event log'
    # Function constants
    $PowerShellKey = 'SYSTEM\CurrentControlSet\Services\EventLog\Windows PowerShell'
    $Admins = 'BUILTIN\Administrators'
    $ReadWriteSubTree = [Microsoft.Win32.RegistryKeyPermissionCheck]::ReadWriteSubTree
    $TakeOwnership = [System.Security.AccessControl.RegistryRights]::TakeOwnership
    $ChangePermissions = [System.Security.AccessControl.RegistryRights]::ChangePermissions

    # Define a C# type using P/Invoke and add it
    # Code borrowed from https://www.remkoweijnen.nl/blog/2012/01/16/take-ownership-of-a-registry-key-in-powershell/
    $Definition = @"
    using System;
    using System.Runtime.InteropServices; 

    namespace Win32Api
    {

        public class NtDll
        {
            [DllImport("ntdll.dll", EntryPoint="RtlAdjustPrivilege")]
            public static extern int RtlAdjustPrivilege(ulong Privilege, bool Enable, bool CurrentThread, ref bool Enabled);
        }
    }
"@
    Add-Type -TypeDefinition $Definition -PassThru

    # Enable SeTakeOwnershipPrivilege
    $Res = [Win32Api.NtDll]::RtlAdjustPrivilege(9, $True, $False, [ref]$False)

    # Open the registry key with Take Ownership rights and change the owner to Administrators
    $Key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey("$PowerShellKey\PowerShell", $ReadWriteSubTree, $TakeOwnership)
    $Acl = $Key.GetAccessControl()
    $Acl.SetOwner([System.Security.Principal.NTAccount]$Admins)
    $Key.SetAccessControl($Acl)

    # Re-open the key with Change Permissions rights and grant Administrators Full Control rights
    $Key = [Microsoft.Win32.Registry]::LocalMachine.OpenSubKey("$PowerShellKey\PowerShell", $ReadWriteSubTree, $ChangePermissions)
    $Acl = $Key.GetAccessControl()
    $Rule = New-Object System.Security.AccessControl.RegistryAccessRule ($Admins, 'FullControl', 'Allow')
    $Acl.SetAccessRule($Rule)
    $Key.SetAccessControl($Acl)

    # Remove the parent and subkeys
    Remove-Item -Path "HKLM:\$PowerShellKey" -Force -Recurse

    # Restart the Event Log service to enforce changes
    Restart-Service EventLog -Force
}

información relacionada