Бувала у вас ситуація: користувач не може залогінитись, скидання пароля не дає жодного результату, ви дивитесь на логін у Active Directory — все написано ідеально, жодного зайвого символу чи пробілу, копіюєте його для входу — система вперто видає помилку автентифікації?
Після години дебагу, перевірки блокувань і вивчення логів виявляється причина: гомогліфи.
Хтось під час створення облікового запису (або при копіюванні даних із заявки від HR чи з робочого чату) ввів кириличну літеру замість латинської. Наше око бачить звичні літери на кшталт a, c, e, o, p чи x, але для домену та протоколів Kerberos/NTLM латинська a (Unicode U+0061) і кирилична а (Unicode U+0430) — це абсолютно різні речі.
Щоб не перебирати логін посимвольно вручну і не сидіти з лупою біля монітора, можна за пару секунд локалізувати диверсанта за допомогою PowerShell. Нижче два скрипти: перший для швидкої перевірки будь-якого підозрілого рядка (вкаже точний порядковий номер літери), другий — для автоматичної перевірки обліковки прямо з AD.
Варіант 1. Швидка перевірка будь-якого рядка
Цю функцію можна виконати в консолі PowerShell і просто передати їй підозрілий логін:
function Test-Cyrillic {
param (
[Parameter(Mandatory = $true)]
[string]$Text
)
$found = @()
for ($i = 0; $i -lt $Text.Length; $i++) {
$char = $Text[$i]
# Перевірка на кирилицю (включно з додатковими блоками Cyrillic Supplement)
if ($char -match '[\p{IsCyrillic}\p{IsCyrillicSupplement}]') {
$found += [PSCustomObject]@{
"Позиція (№)" = $i + 1
"Символ" = $char
"Unicode код" = ('U+{0:X4}' -f [int][char]$char)
}
}
}
if ($found.Count -gt 0) {
Write-Host "`nУВАГА! Знайдено кирилицю у рядку: `"$Text`"" -ForegroundColor Red
$found | Format-Table -AutoSize
} else {
Write-Host "`nВсе чисто: у рядку `"$Text`" кирилиці не виявлено." -ForegroundColor Green
}
}










