3

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

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

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

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

Clear-EventLog "Windows PowerShell";

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

2 ответа2

0

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


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

Если этот параметр политики отключен , ведение журнала событий выполнения отключается для всех модулей 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
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .