Desabilita o log de eventos do windows powershell

3

Estou usando o PsExec para executar scripts do PowerShell em computadores remotos e, como um efeito colateral disso, o log de eventos "Windows PowerShell" (encontrado no Visualizador de Eventos em "Logs de Aplicativos e Serviços") está registrando todos os nossos argumentos para o script em "HostApplication". Isso é um problema porque alguns desses argumentos contêm senhas confidenciais.

Eu tentei definir as variáveis de preferência listadas abaixo como false, mas ele ainda criará logs quando o mecanismo do PowerShell for iniciado. Pelo que li, isso ocorre porque o PowerShell cria esses logs antes mesmo de verificar o valor dessas variáveis de preferência.

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

Nossa solução atual usa essas variáveis de preferência em combinação com a colocação da seguinte linha no início de cada um dos nossos scripts do PowerShell para garantir que os logs criados quando o mecanismo do PowerShell for iniciado sejam apagados.

Clear-EventLog "Windows PowerShell";

Esta solução está ok, mas eu gostaria de chegar a um ponto em que nossas senhas nunca sejam salvas no log e o log nunca precise ser limpo. Existe alguma maneira de desativar o log do PowerShell para que os eventos não sejam criados em QUALQUER ponto no ciclo de vida do mecanismo do PowerShell?

    
por Bob P 30.09.2015 / 00:12

2 respostas

0

Acho que as seguintes Políticas de grupo local são o que você precisa, especialmente o segundo:

TurnonModuleLogging

Ifyoudisablethispolicysetting,loggingofexecutioneventsisdisabledforallWindowsPowerShellmodules.DisablingthispolicysettingforamoduleisequivalenttosettingtheLogPipelineExecutionDetailspropertyofthemoduletoFalse.

TurnonPowerShellBlockLogging

ThispolicysettingenablesloggingofallPowerShellscriptinputtotheMicrosoft-Windows-PowerShell/Operationaleventlog.Ifyouenablethispolicysetting,WindowsPowerShellwilllogtheprocessingofcommands,scriptblocks,functions,andscripts-whetherinvokedinteractively,orthroughautomation.

Ifyoudisablethispolicysetting,loggingofPowerShellscriptinputisdisabled.

  1. PressioneWin+R
  2. Digitegpedit.msc
  3. IrparaComputerConfiguration->AdministrativeTemplates->WindowsComponents->WindowsPowerShell

  1. Em seguida, defina as configurações explicadas acima
por 30.09.2015 / 00:23
-2

Eu tive o mesmo problema e escrevi essa função para excluir o log 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
}
    
por 24.02.2017 / 19:21