From 0c9faece92bdc99df801dcaf449045025b00ef64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9B=D1=83=D1=86=D0=B5=D0=BD=D0=BA=D0=BE=20=D0=90=D0=BD?= =?UTF-8?q?=D0=B4=D1=80=D0=B5=D0=B9=20=D0=90=D0=BD=D0=B0=D1=82=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B5=D0=B2=D0=B8=D1=87?= Date: Sat, 11 Apr 2026 21:57:16 +1000 Subject: [PATCH] Fix auditpol localization (RU logon subcategory) and reduce noise --- Login_Monitor.ps1 | 42 +++++++++++++++++++++++++++++------------- 1 file changed, 29 insertions(+), 13 deletions(-) diff --git a/Login_Monitor.ps1 b/Login_Monitor.ps1 index fc7977c..6b24137 100644 --- a/Login_Monitor.ps1 +++ b/Login_Monitor.ps1 @@ -192,13 +192,27 @@ function Enable-SecurityAudit { } } + function Test-RussianAuditPolUi { + # Эвристика: если auditpol локализован, не дергаем английские subcategory имена (они дают код 87 и шумят в логах). + try { + if ((Get-Culture).TwoLetterISOLanguageName -eq 'ru') { return $true } + } catch { } + + if ($PSUICulture -like 'ru*') { return $true } + + $r = Invoke-AuditPol -Arguments '/list /subcategory:*' + if ($r.ExitCode -ne 0) { return $false } + return ($r.Text -match 'Вход/выход') + } + function Test-LogonAuditEnabled { # На русской Windows подкатегория называется "Вход в систему", а не "Logon". # В выводе auditpol обычно встречаются слова "успех" и "отказ" (или Success/Failure). - $candidates = @( - '/get /subcategory:"Вход в систему"', - '/get /subcategory:"Logon"' - ) + $isRu = Test-RussianAuditPolUi + $candidates = @('/get /subcategory:"Вход в систему"') + if (-not $isRu) { + $candidates += '/get /subcategory:"Logon"' + } foreach ($args in $candidates) { $r = Invoke-AuditPol -Arguments $args @@ -223,16 +237,18 @@ function Enable-SecurityAudit { Write-Log "Аудит входа не настроен полностью. Пытаюсь включить..." # Порядок попыток: от самого "каноничного" к более совместимому. - $attempts = @( - # RU Windows (как в вашем выводе auditpol /list /subcategory:*) - '/set /subcategory:"Вход в систему" /success:enable /failure:enable', - '/set /category:"Вход/выход" /success:enable /failure:enable', + $isRu = Test-RussianAuditPolUi + $attempts = New-Object System.Collections.Generic.List[string] + # RU Windows (как в вашем выводе auditpol /list /subcategory:*) + $attempts.Add('/set /subcategory:"Вход в систему" /success:enable /failure:enable') + $attempts.Add('/set /category:"Вход/выход" /success:enable /failure:enable') + if (-not $isRu) { # EN Windows - '/set /subcategory:"Logon" /success:enable /failure:enable', - '/set /category:"Logon/Logoff" /success:enable /failure:enable', - # GUID категории (как было у вас изначально) - '/set /category:"{69979849-797A-11D9-BED3-505054503030}" /success:enable /failure:enable' - ) + $attempts.Add('/set /subcategory:"Logon" /success:enable /failure:enable') + $attempts.Add('/set /category:"Logon/Logoff" /success:enable /failure:enable') + } + # GUID категории (как было у вас изначально) + $attempts.Add('/set /category:"{69979849-797A-11D9-BED3-505054503030}" /success:enable /failure:enable') foreach ($a in $attempts) { $r = Invoke-AuditPol -Arguments $a