Find Active Directory Users with Expired Password (PowerShell)에 관한 기사 블로그를 시작해볼까요?
PowerShell을 사용하여 만료된 패스워드를 가진 AD 사용자 찾기
전제 조건
이 기사를 따르기로 결정한다면, 다음이 필요합니다:
- A Windows computer joined to an Active Directory domain.
- 컴퓨터에 설치된 ActiveDirectory 모듈이 있어야 합니다.
- 또한 컴퓨터에는 적어도 Windows PowerShell 5.1 이상이 있어야 합니다.
Active Directory에서 사용자 찾기
사용자 비밀번호를 재설정하기 전에는 먼저 계정을 찾아야 합니다. 이에 따라, 첫 번째 단계는 예약이 있는지 여부를 확인하는 것입니다. 이를 위해 Get-ADUser cmdlet을 실행하고 Identity 매개변수를 계정 이름으로 설정합니다.
Identity 매개변수는 네 가지 식별자 중 하나를 허용합니다: 식별 이름 (DN), GUID (objectGUID), 보안 ID (objectSID) 또는 SAM 계정 이름 (SAMAccountName).
Get-ADUser -Identity
명령은 사용자 속성을 반환하여 아래 스크린샷에 표시된 대로 계정이 존재하고 사용자 이름이 올바름을 확인합니다:
또 읽기 활성 디렉터리 사용자 보고서 활성화
AD에서 비밀번호가 만료된 사용자 찾기
하나의 사용자에 대한 비밀번호 만료 날짜를 빠르게 얻을 수 있습니다. 속성
Get-ADUser -Identity USERNAME -Properties 'msDS-UserPasswordExpiryTimeComputed'
그러나 이 코드 라인은 사람이 읽기 어려운 결과를 가져오므로 결과를 읽기 쉬운 형식으로 변환하기 위해 다음 라인을 추가해야 합니다. 아래 라인을 추가하기 위해 새로운
Select-Object -Property {[datetime]::FromFileTime($_.”msDS-UserPasswordExpiryTimeComputed”)}
동일한 속성
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "Displayname",@{Name="ExpiryDate";Expression={[datetime]::FromFileTime($_."msDS-UserPasswordExpiryTimeComputed")}}

우리는 사용자 목록을 나중에 사용할 수 있는 텍스트 파일로 내보내는 방법으로 위 스크립트를 개선합니다. 이를 위해
Get-ADUser -filter {Enabled -eq $True -and PasswordNeverExpires -eq $False} –Properties "DisplayName", "msDS-UserPasswordExpiryTimeComputed" |
Select-Object -Property "GivenName" |
Out-File -FilePath .\userslist.txt
위의 스크립트는 나중에 사용할 수 있는 userslist.txt라는 파일을 생성합니다. 또한 결과에서만 만료된 계정의 사용자 ID가 필요하므로 ExpiryDate 속성을 생략했습니다. 이 목록은 나중에 논의할 대규모 복구에 사용됩니다.
또한 읽기: Active Directory 암호 보고서 배포
Active Directory 사용자 암호 재설정
이제 Get-ADUser를 사용하여 사용자 계정을 확인하는 방법을 배웠으므로 결과가 유효하고 사용자 ID가 있는 것으로 알고 있습니다. 이제 사용자의 암호를 재설정하려면 Set-ADAccountPassword cmdlet를 사용해야 합니다.
Set-ADAccountPassword 명령은 이전 암호를 제공하면 사용자의 암호를 변경합니다. 이전 암호를 가지고 있지 않으면 cmdlet가 Reset 매개변수로 이를 재설정합니다.
새로 생성된 무작위 암호는 5개의 알파 숫자가 아닌 문자를 포함한 14자리 무작위 암호입니다. 실행하려면 PowerShell 창을 열고 코드를 복사하여 PowerShell에 붙여넣은 다음 Enter 키를 누르십시오:
$username = USERNAME
Add-Type -AssemblyName 'System.Web'
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset |
Set-ADUser -ChangePasswordAtLogon true
$randomPassword
- 라인 1: 비밀번호를 재설정할 사용자 이름을 지정합니다. 실제 사용자 ID로 사용자 이름 문자열을 대체하세요.
- 라인 2: System.Web .NET 어셈블리 개체 클래스를 가져옵니다.
- 라인 3: 5개의 영숫자가 아닌 문자가 있는 14자 길이의 무작위 비밀번호를 생성합니다.
- 라인 4: 일반 텍스트 비밀번호를 안전한 문자열 비밀번호 개체로 변환합니다.
- 라인 5: 비밀번호 재설정을 용이하게 합니다.
- 라인 6: 다음 로그인 시 AD 계정에서 비밀번호 변경을 강제합니다.
- 라인 7: 새 비밀번호를 콘솔에 표시합니다. 그러나 보안 목적으로는 이것을 권장하지 않습니다. 라인 6은 사용자가 선호하는 비밀번호 변경을 처리하고이 절차에 대한 최상의 실천 방법으로 간주됩니다.
Active Directory Security & Azure AD를 개선하세요
무료로 시도해보세요, 모든 기능에 액세스하세요. – 200개 이상의 AD 보고서 템플릿 사용 가능. 쉽게 자신의 AD 보고서를 사용자 정의하세요.
또한 읽으십시오 Office 365 암호 보고서 사용해보기
Active Directory 암호 재설정 도구 작성
이제 사용자의 암호를 재설정하는 데 사용하는 스크립트가 있습니다. 다음 단계는 스크립트를 도구로 만드는 것입니다. 재사용 가능한 도구는 최소한의 수동 사용자 작업으로 동일한 작업을 실행합니다.
도구를 구축할 때 중요한 측면 중 하나는 도구를 실행하는 사람이 매번 코드를 편집해야 하는 것은 아니지만 아쉽게도 우리의 코드는 사용자가 $username 변수를 편집해야 합니다.
도구의 사용자가 수동으로 값을 변경할 수 있는 대신 매개변수를 받는 스크립트를 작성하는 것은 어떨까요? 다음 단계를 수행하려면:
- Windows PowerShell ISE를 엽니다.
- 새 PowerShell 파일을 만들고 파일 이름을 Reset-ADPassword.ps1로 저장합니다. 스크립트를 선호하는 위치에 저장합니다. 이 문서는 파일을 C:\PS\scripts 폴더에 저장합니다.
- 스크립트 편집기에 아래 코드를 복사하여 붙여넣은 후 스크립트를 저장하세요.
param (
$username
)
if (-not($username)) {
Write-Host "Username not found. Exiting script"
return $null
}
try {
$null = Get-ADUser -Identity $username -ErrorAction Stop
} catch {
Write-Host $_.Exception.Message
return $null
}
$randomPassword = [System.Web.Security.Membership]::GeneratePassword(14, 5)
$newPassword = $randomPassword | ConvertTo-SecureString -AsPlainText -Force
try {
Set-ADAccountPassword -Identity $username -NewPassword $newPassword -Reset -ErrorAction Stop
Set-ADuser -Identity $username -ChangePasswordAtLogon $true
[pscustomobject]@{
Username = $username
NewPassword = $randomPassword
}
} catch {
Write-Host "There was an error performing the password reset. Please find additional information below."
Write-host $_.Exception.Message
return $null
}
- 라인 1: 사용자 이름이라는 매개변수를 추가합니다.
- 라인 5: 사용자가 사용자 이름 값을 제공했는지 확인합니다. if 블록은 조건이 충족되면 메시지를 표시하고 스크립트를 종료합니다.
- 라인 10: 사용자 이름이 유효한지 여부를 확인합니다.
- 라인 12: 사용자 이름이 유효하지 않은 경우 유효성을 검사합니다. 메시지를 표시하고 스크립트 실행을 중지합니다.
- 라인 17: 5개의 비밀번호 문자를 포함하여 14자리의 임의의 비밀번호를 생성합니다.
- 라인 18: 평문 비밀번호를 보안 문자열 비밀번호 개체로 변환합니다.
- 라인 20: 비밀번호 재설정을 용이하게 합니다.
- 라인 22: AD 계정에 다음 로그온 시 비밀번호를 변경하도록 강제합니다.
- 라인 24: 콘솔에 새 비밀번호를 표시합니다. 그러나 이것은 보안 목적으로 권장하지 않습니다. 라인 6은 사용자의 선호에 따라 비밀번호를 변경하고 이 절차에 대한 가장 좋은 방법으로 간주됩니다.
- 라인 28: 재설정이 실패하면 오류 메시지가 표시됩니다.
또한 읽기 활성 디렉토리 보고 도구 배포
예시 실행: AD 비밀번호 재설정 도구
A PowerShell console pane is already available if we use Windows PowerShell ISE. If not, we should launch a separate PowerShell session. Change the current working directory to the destination folder where the script was saved, such as Set-Location C:\PS\Scripts.
단일 사용자의 비밀번호 재설정
하나의 사용자의 비밀번호를 재설정해야 한다고 가정합니다. 먼저, Active Directory 비밀번호 재설정 도구를 실행하고 어떤 사용자 이름을 대상으로 할지 지정합니다. 예를 들어, 단일 사용자의 비밀번호를 재설정하기 위해 다음과 같이 스크립트를 실행합니다:
.\Reset-ADPassword.ps1 -username USERNAME
결과적으로, 스크립트는 비밀번호를 재설정하고 화면에 표시합니다. 예를 들어, 이 출력은 새 비밀번호를 영향을 받는 사용자에게 보냅니다:
여러 사용자의 비밀번호 재설정
다행스럽게도, 우리는 PowerShell에서 배열과 foreach 루프를 사용하여 목록을 반복할 수 있습니다. 또한, ForEach-Object cmdlet은 PowerShell에서 여러 항목을 동시에 처리할 수 있게 해줍니다. 이 cmdlet은 다양한 항목을 파이프라인을 통해 전달할 수 있게 해줍니다.
여러 사용자의 비밀번호를 재설정하려면 사용자 이름을 두 개 이상 가진 배열을 만듭니다. 그런 다음 배열 항목은 파이프라인을 통과하여 ForEach-Object PowerShell 명령이 각 사용자 이름에 대해 비밀번호 재설정 도구를 실행합니다.
@('user1', 'user2') | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
그러나 두 개 이상의 사용자 계정을 수정하는 경우 이를 개선할 수 있습니다. 앞서 생성한 텍스트 파일을 기억하십니까? 이 섹션에서 그것을 활용합니다.
우리는 사용자 계정을 포함한 텍스트 파일을 읽어야 하며 각각에 대해 AD 비밀번호 재설정 도구를 실행해야합니다. 이를 위해 Get-Content cmdlet을 사용하여 텍스트 파일의 내용을 PowerShell로 가져옵니다. 그 후, 스크립트는 데이터를 파이프라인으로 보내고 각 계정에 대해 AD 비밀번호 재설정 스크립트를 실행합니다.
Get-Content .\userslist.txt | ForEach-Object {.\Reset-ADPassword.ps1 -username $PSItem}
위의 스니펫을 실행한 후에는 단일 실행 중에 여러 사용자 비밀번호를 재설정 할 수 있습니다.
“PowerShell로 만료된 암호를 가진 Active Directory 사용자 찾기” 블로그 글을 읽어주셔서 감사합니다. 이제 마칩니다.
PowerShell을 사용하여 만료된 암호를 가진 AD 사용자 찾기 결론
결론적으로, 만료된 암호를 가진 Active Directory 사용자를 찾는 것은 우리에게 시간과 노력을 절약해 주는 간단한 프로세스입니다. 만료된 암호를 가진 사용자를 필터링하는 PowerShell을 사용하여, 암호 재설정이나 만료 통지를 위해 특정 사용자를 신속하게 식별할 수 있습니다. 이 명령은 많은 수의 사용자를 보유한 조직에게 유용하며, 암호 만료를 선제적으로 관리하여 보안 위협을 줄일 수 있습니다.
Source:
https://infrasos.com/find-active-directory-users-with-expired-password-powershell/