저는 PsExec을 사용하여 원격 컴퓨터에서 PowerShell 스크립트를 실행하고 있으며 이에 대한 부작용으로 "Windows PowerShell" 이벤트 로그(이벤트 뷰어의 "응용 프로그램 및 서비스 로그" 아래에 있음)가 모든 인수를 "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 블록 로깅 켜기
이 정책 설정을 사용하면 Microsoft-Windows-PowerShell/Operational에 대한 모든 PowerShell 스크립트 입력을 로깅할 수 있습니다.이벤트 로그. 이 정책 설정을 사용하면 Windows PowerShell은 대화형으로 호출하든 자동화를 통해 호출하든 관계없이 명령, 스크립트 블록, 함수 및 스크립트의 처리를 기록합니다.
만약 너라면장애를 입히다이 정책 설정에서는 PowerShell 스크립트 입력 로깅이 비활성화됩니다.
- 누르다Win+R
- 유형
gpedit.msc
- 이동
Computer Configuration -> Administrative Templates -> Windows Components -> Windows PowerShell
- 그런 다음 위에 설명된 설정을 구성합니다.
답변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
}