파워쉘을 사용하여 만료된 암호가 있는 활성 디렉터리 사용자 찾기

패스워드를 관리하는 것에 대한 책임이 있으신가요? 그렇다면 Active Directory (AD) 환경에서 활성화된 디렉터리 사용자를 찾는 것이 중요한 작업 중 하나입니다. 이들 사용자는 비밀번호를 재설정할 때까지 계정에 로그인할 수 없게 될 예정이므로, 비밀번호만료된 사용자를 식별하는 것이 필요합니다. 이 문서에서는 Active Directory 사용자 중 만료된 비밀번호를 가진 사용자를 효율적으로 찾는 방법을 보여줍니다.

Find Active Directory Users with Expired Password (PowerShell)에 관한 기사 블로그를 시작해볼까요?

PowerShell을 사용하여 만료된 패스워드를 가진 AD 사용자 찾기

다음 기사를 따르면 시간과 노력을 절약할 수 있습니다. 우리는 빠르게 특정 사용자를 대상으로 비밀번호 재설정이나 만료 알림을 할 수 있습니다. 네트워크 관리자이든 단순히 Active Directory 환경의 보안을 향상시키려는 사용자이든, 이 가이드는 시작하는 데 필요한 정보를 제공합니다.

전제 조건

이 기사를 따르기로 결정한다면, 다음이 필요합니다:

  • 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).

예를 들어, 특정 사용자의 비밀번호를 재설정하려면 계정 재설정 전에 먼저 사용자가 존재하는지 확인해야 합니다. 이를 위해 다음 명령을 복사하여 PowerShell 콘솔에 붙여넣으세요. 사용자 이름을 올바른 것으로 먼저 변경하세요:

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 사용자 암호 재설정

이제 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 보고서를 사용자 정의하세요.




Active Directory 암호 재설정 도구 작성

이제 사용자의 암호를 재설정하는 데 사용하는 스크립트가 있습니다. 다음 단계는 스크립트를 도구로 만드는 것입니다. 재사용 가능한 도구는 최소한의 수동 사용자 작업으로 동일한 작업을 실행합니다.

도구를 구축할 때 중요한 측면 중 하나는 도구를 실행하는 사람이 매번 코드를 편집해야 하는 것은 아니지만 아쉽게도 우리의 코드는 사용자가 $username 변수를 편집해야 합니다.

도구의 사용자가 수동으로 값을 변경할 수 있는 대신 매개변수를 받는 스크립트를 작성하는 것은 어떨까요? 다음 단계를 수행하려면:

  1. Windows PowerShell ISE를 엽니다.
  2. 새 PowerShell 파일을 만들고 파일 이름을 Reset-ADPassword.ps1로 저장합니다. 스크립트를 선호하는 위치에 저장합니다. 이 문서는 파일을 C:\PS\scripts 폴더에 저장합니다.
  3. 스크립트 편집기에 아래 코드를 복사하여 붙여넣은 후 스크립트를 저장하세요.
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을 사용하여, 암호 재설정이나 만료 통지를 위해 특정 사용자를 신속하게 식별할 수 있습니다. 이 명령은 많은 수의 사용자를 보유한 조직에게 유용하며, 암호 만료를 선제적으로 관리하여 보안 위협을 줄일 수 있습니다.

더 많은 내용을 읽으려면 저희 블로그의 Active Directory 섹션을 여기서 확인하고 PowerShell 섹션은 여기서 확인하세요.

Source:
https://infrasos.com/find-active-directory-users-with-expired-password-powershell/