Задача провести аудит слабых паролей.
# Получаем дату в формате dd.MM.yyyy(HH.mm) $datA = Get-Date -Format "dd.MM.yyyy(HH.mm)" $DC = "ad01" $Domain = "DC=admin,DC=ru" $Pth = "C:\tmp\PasswordQuality\" $Pfile = "$Pth" + "AD_PSSW_$datA.csv" $DictFile = "$Pth" + "PasswordDictbac.txt" $OUsss = '*DC=admin,DC=ru' $strBlankPasswordNThash = '31d6cfe0d16ae931b73c59d7e0c089c0' $intBadPasswordsFound = 0 # Проверка существования файла словаря If (Test-Path $DictFile) { Write-Output "Файл словаря найден: $DictFile" } else { Write-Error "Файл словаря $DictFile не найден. Проверьте путь." exit } # Функция для вычисления NTLM-хеша из текста Function Get-NTHashFromClearText { Param ([string]$ClearTextPassword) # Замените ConvertTo-NTHash на свой способ получения хеша, если нужно Return ConvertTo-NTHash $(ConvertTo-SecureString $ClearTextPassword -AsPlainText -Force) } # Проверка подключения к Active Directory try { $arrUsersAndHashes = Get-ADReplAccount -All -Server $DC -NamingContext $Domain | Where-Object { $_.Enabled -eq $true -and $_.SamAccountType -eq 'User' -and $_.DistinguishedName -like $OUsss } | Select-Object SamAccountName,@{Name="NTHashHex";Expression={ConvertTo-Hex $_.NTHash}} Write-Output "Пользователей, полученных из AD: $($arrUsersAndHashes.Count)" } catch { Write-Error "Ошибка при получении данных из Active Directory. Проверьте подключение к домену и наличие модуля Get-ADReplAccount." exit } # Создание файла для записи try { Add-Content -Path $Pfile -Value "Name,Username,NTLMPassword" Write-Output "Файл для вывода хешей создан: $Pfile" } catch { Write-Error "Не удалось создать файл для записи: $Pfile" exit } # Размер партии для обработки словаря $BatchSize = 10000 # Укажите количество строк на одну партию $BadPasswordList = Get-Content -Path $DictFile -ReadCount $BatchSize $BatchCount = 0 # Обработка словаря партиями foreach ($Batch in $BadPasswordList) { $htBadPasswords = @{} $BatchCount++ Write-Output "Обработка партии $BatchCount..." # Заполнение хеш-таблицы текущей партии foreach ($BadPassword in $Batch) { if ($BadPassword -ne '') { $NTHash = $(Get-NTHashFromClearText $BadPassword) if (!$htBadPasswords.ContainsKey($NTHash)) { $htBadPasswords[$NTHash] = $BadPassword } } } # Сравнение пользователей с хешами из текущей партии foreach ($hashuser in $arrUsersAndHashes) { $strUserSamAccountName = $hashuser.SamAccountName $strUserNTHashHex = $hashuser.NTHashHex $Nametable = Get-ADUser -LDAPFilter "(sAMAccountName=$strUserSamAccountName)" -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Name # Проверка наличия хеша пользователя в словаре if ($htBadPasswords.ContainsKey($strUserNTHashHex)) { $intBadPasswordsFound++ $strUserBadPasswordClearText = $htBadPasswords[$strUserNTHashHex] try { Add-Content -Path $Pfile -Value "$Nametable,$strUserSamAccountName,$strUserBadPasswordClearText" -Encoding UTF8 Write-Output "Добавлен пользователь с плохим паролем: $Nametable, $strUserSamAccountName" } catch { Write-Error "Ошибка при записи пользователя $Nametable, $strUserSamAccountName в файл." } } } } Write-Output "Всего найдено пользователей с плохими паролями: $intBadPasswordsFound" Write-Output "Скрипт завершен."
Similar Posts:
- Как создать учётные записи с помощью powershell в AD из csv
- Как удалить у пользователя все группы кроме domain user
- Как массово создать учётные записи в АД из csv файла
- Как разлогинеть (logoff) всех пользователей со статусом disconnect со всех серверов windows в domain.
- Как сбросить завсшию службу или когда она в состоянии стоп(stoped)