Estou usando o PsExec para executar scripts do PowerShell em máquinas remotas e, como 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 no script em "HostApplication". Isto é um problema porque alguns destes argumentos contêm senhas confidenciais.
Tentei definir as variáveis de preferência listadas abaixo como falsas, 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 linha a seguir no início de cada um de 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 desabilitar o log do PowerShell para que os eventos não sejam criados em NENHUM ponto do ciclo de vida do mecanismo do PowerShell?
Responder1
Eu acho o seguintePolíticas de grupos locaissão o que você precisa, principalmente o segundo:
Ative o registro do módulo
Se vocêdesabilitarNesta configuração de política, o log de eventos de execução será desabilitado para todos os módulos do Windows PowerShell. Desabilitar esta configuração de política para um módulo equivale a definir a propriedade LogPipelineExecutionDetails do módulo como False.
Ative o registro de blocos do PowerShell
Essa configuração de política permite o registro em log de todas as entradas de script do PowerShell no Microsoft-Windows-PowerShell/Operationalregistro de eventos. Se você habilitar essa configuração de política, o Windows PowerShell registrará em log o processamento de comandos, blocos de script, funções e scripts, sejam invocados interativamente ou por meio de automação.
Se vocêdesabilitaresta configuração de política, o registro em log da entrada de script do PowerShell será desabilitado.
- ImprensaWin+R
- Tipo
gpedit.msc
- Vá para
Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell
- Em seguida, defina as configurações explicadas acima
Responder2
Eu tive o mesmo problema e escrevi esta 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
}