Отключить ведение журнала событий Windows PowerShell

Отключить ведение журнала событий Windows PowerShell

Я использую PsExec для запуска скриптов PowerShell на удаленных машинах, и в качестве побочного эффекта этого, журнал событий "Windows PowerShell" (находится в Event Viewer в разделе "Applications and Services Logs") регистрирует все наши аргументы скрипта в разделе "HostApplication". Это проблема, поскольку некоторые из этих аргументов содержат конфиденциальные пароли.

Я пробовал устанавливать переменные предпочтений, перечисленные ниже, на false, но это все равно создает журналы при запуске движка PowerShell. Из того, что я прочитал, это происходит потому, что PowerShell создает эти журналы еще до того, как он проверит значение этих переменных предпочтений.

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

Наше текущее решение использует эти переменные предпочтений в сочетании с размещением следующей строки в начале каждого из наших скриптов PowerShell, чтобы гарантировать, что журналы, созданные при запуске ядра PowerShell, будут очищены.

Clear-EventLog "Windows PowerShell";

Это решение нормальное, но я хотел бы довести его до точки, когда наши пароли никогда не сохраняются в журнале, и журнал никогда не нужно очищать. Есть ли способ отключить ведение журнала PowerShell, чтобы события не создавались ни в какой точке жизненного цикла движка PowerShell?

решение1

Я думаю следующееЛокальная групповая политикато, что вам нужно, особенно второе:


Включить ведение журнала модуля

Если вызапрещатьЭтот параметр политики отключает ведение журнала событий выполнения для всех модулей Windows PowerShell. Отключение этого параметра политики для модуля эквивалентно установке свойства LogPipelineExecutionDetails модуля в значение False.


Включите ведение журнала блоков PowerShell

Этот параметр политики включает регистрацию всех входных данных сценариев PowerShell в Microsoft-Windows-PowerShell/Operational.Журнал событий. Если вы включите этот параметр политики, Windows PowerShell будет регистрировать обработку команд, блоков скриптов, функций и скриптов — независимо от того, вызываются ли они интерактивно или посредством автоматизации.

Если вызапрещатьэтот параметр политики отключает ведение журнала ввода скриптов PowerShell.


  1. НажиматьWin+R
  2. Типgpedit.msc
  3. Идти кComputer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell

  1. Затем настройте параметры, описанные выше.

решение2

У меня была та же проблема, и я написал эту функцию для удаления журнала событий.

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
}

Связанный контент