자동화는 Active Directory 관리 작업을 간소화하는 핵심입니다. 이 글에서는 PowerShell 스크립트를 사용해 사용자 비밀번호를 생성, 변경, 테스트하는 방법을 보여드리겠습니다.
AD PowerShell 모듈 설치
PowerShell로 Active Directory를 관리하려면 먼저 Active Directory PowerShell 모듈을 설치해야 합니다. Windows 10을 사용해 AD를 관리하는 경우, 먼저 Remote Server Administration Tools (RSAT)를 설치하십시오.
Windows 10 버전 1809
Windows 10 버전 1809를 사용 중이라면 RSAT가 기능을 필요할 때 제공(Feature On Demand) 형태로 포함되어 있으므로 RSAT 패키지를 다운로드할 필요가 없습니다. Windows 10 버전 1809에서 RSAT를 사용하려면 관리자 권한 PowerShell 콘솔에서 다음 명령을 실행하십시오:
Add-WindowsCapability -Online -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0
Windows 10의 이전 버전
Windows 10의 이전 버전을 사용 중이라면, 다음에서 해당 RSAT 패키지를 다운로드하십시오: Microsoft’s 웹사이트:
- Windows Server 버전 1803 또는 1709를 관리하는 경우, WS_1803 패키지를 다운로드하여 설치하세요.
- Windows Server 2016 또는 그 이전 버전을 관리하는 경우, WS2016 패키지를 다운로드하여 설치하세요.
RSAT를 설치한 후, 로컬 관리자 권한으로 PowerShell 콘솔을 시작하고 다음 PowerShell 명령을 사용하여 AD PowerShell 모듈을 활성화하세요:
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell
PowerShell을 사용하여 비밀번호로 자격 증명 생성
새 사용자 계정을 만들려면 New-ADUser cmdlet을 사용하세요. 아래 예제에서는 ad.contoso.com 도메인을 $UPN 변수에 하드코딩했습니다. 사용자에게 할당하려는 UPN 접미사에 맞도록 이 값을 변경해야 합니다.
사용자의 이름과 성을 입력하세요. 그러면 UPN과 SamAccountName은 이름과 성 사이에 마침표(.)를 추가하여 생성됩니다. 다음 PowerShell 스크립트를 사용하세요:
$GivenName = (Read-Host -Prompt "First Name")
$Surname = (Read-Host -Prompt "Last Name")
$User = $GivenName+"."+$Surname
$UPN = $User+"@ad.contoso.com"
$Password = (Read-Host -Prompt "Password" -AsSecureString)
New-ADUser -Name $User -SamAccountName $User -UserPrincipalName $UPN -AccountPassword $Password -GivenName $GivenName -Surname $Surname -Enabled $True
PowerShell로 새 AD 사용자 비밀번호 생성
다음 코드는 사용자 이름과 비밀번호를 지정하라는 메시지를 표시합니다. AD에 이미 존재하는 사용자 이름과 도메인의 비밀번호 복잡성 요구 사항을 충족하는 비밀번호를 입력해야 합니다.
$User = (Read-Host -Prompt "Username")
$NewPassword = (Read-Host -Prompt "New Password" -AsSecureString)
Set-ADAccountPassword -Identity $User -NewPassword $NewPassword -Reset
PowerShell로 비밀번호 변경
- 로컬 사용자 비밀번호 변경
로컬 사용자 계정의 비밀번호를 변경하려면 Get-LocalUser 및 Set-LocalUser cmdlet을 사용해야 합니다:
$Password = (Read-Host -Prompt "New Password" -AsSecureString)
$User = (Read-Host -Prompt "Username")
$UserAccount = Get-LocalUser -Name $User
$UserAccount | Set-LocalUser -Password $Password
- AD 사용자 비밀번호 변경
PowerShell을 사용하여 새 AD 사용자 비밀번호를 만들려면 다음 스크립트를 사용하세요. 기존 AD 계정의 사용자 이름을 지정한 다음, 도메인의 비밀번호 복잡성 요구 사항을 충족해야 하는 새 비밀번호를 입력하라는 프롬프트가 표시됩니다.
$User = (Read-Host -Prompt "Username")
$NewPassword = (Read-Host -Prompt "New Password" -AsSecureString)
Set-ADAccountPassword -Identity $User -NewPassword $NewPassword -Reset
- 다음 로그온 시 사용자가 비밀번호를 변경하도록 강제
Set-LocalUser cmdlet은 로컬 사용자 계정을 설정하여 다음 로그온 시 비밀번호 변경을 강제하는 기능을 지원하지 않습니다. 하지만 비밀번호가 만료되도록 강제하면 동일한 목표를 달성할 수 있습니다:
$User = (Read-Host -Prompt "Username")
$Usrstring = "WinNT://localhost/"+$User
$usr=[ADSI] $Usrstring
$usr.passwordExpired = 1
$usr.setinfo()
하지만 Set-ADAccountPassword를 사용하면 사용자가 AD 계정 암호를 변경하도록 강제할 수 있습니다:
$User = (Read-Host -Prompt "Username")
Set-Aduser -Identity $User -ChangePasswordAtLogon $true
- 관리자 비밀번호 변경
AD 관리자 비밀번호를 변경하려면 아래 코드로 사용자 이름을 입력하라는 메시지가 표시되면 administrator 를 입력하세요:
$User = (Read-Host -Prompt "Username")
$NewPassword = (Read-Host -Prompt "New Password" -AsSecureString)
Set-ADAccountPassword -Identity $User -NewPassword $NewPassword -Reset
로컬 관리자 비밀번호를 변경하려면 사용자 이름을 입력하라는 메시지가 표시되면 administrator 를 입력하세요:
$Password = (Read-Host -Prompt "New Password" -AsSecureString)
$User = (Read-Host -Prompt "Username")
$UserAccount = Get-LocalUser -Name $User
$UserAccount | Set-LocalUser -Password $Password
- “암호는 만료되지 않음” 속성 변경
로컬 사용자 계정에서 password never expires ” 속성을 설정하려면 Set-LocalUser:를 사용하세요
$User = (Read-Host -Prompt "Username")
Set-LocalUser -Name $User -PasswordNeverExpires $true
Active Directory 사용자 계정에서 “password never expires” 속성을 설정하려면 Set-ADUser:를 사용하세요.
$User = (Read-Host -Prompt "Username")
Set-ADUser -Identity $User -PasswordNeverExpires $true
- 서비스 계정 비밀번호 변경
서비스의 로그온 속성을 변경하려면 Get-Credential 및 Set-Service cmdlet을 사용합니다. 아래 코드는 AppReadiness 서비스를 로컬 시스템 계정을 사용하는 것에서, 프롬프트가 표시될 때 입력하는 사용자 이름과 비밀번호를 사용하도록 변경합니다. 또한 Set-Service -Credential 매개 변수는 PowerShell 6 이상에서만 지원됩니다.
$credential = Get-Credential
Set-Service -Name "AppReadiness" -Credential $credential
- Active Directory에서 비밀번호 만료 날짜 변경
사용자가 현재 비밀번호를 유지할 수 있는 시간을 연장해야 하는 경우, pwsLastSet 속성을 현재 날짜로 설정하세요. 그러면 Active Directory가 비밀번호 변경을 강제하기 전까지 추가로 사용할 수 있는 시간이 생깁니다. 속성을 지운 다음 -1로 설정하면 현재 날짜와 시간으로 설정됩니다.
$Username = (Read-Host -Prompt "Username")
$User = Get-ADUser $Username -Properties pwdlastset
$User.pwdlastset = 0
Set-ADUser -Instance $User
$User.pwdlastset = -1
Set-ADUser -Instance $User
- 대량 비밀번호 재설정
사용자가 AD 비밀번호를 변경하게 하는 가장 좋은 방법은 비밀번호 재설정을 강제로 수행하는 것입니다. Get-ADUser와 Set-ADUser cmdlet을 결합하면 이를 대량으로 처리할 수 있습니다. 아래 명령은 필터를 사용하여 “Accounts” 조직 구성 단위(OU)에 있는 사용자를 가져온 뒤, 결과를 Set-ADUser cmdlet로 파이프하여 OU 내의 모든 사용자가 다음 로그온 시 비밀번호를 변경하도록 강제합니다.
Get-ADUser -Filter * -SearchScope Subtree -SearchBase "OU=Accounts,DC=ad,DC=contoso,DC=com" |
Set-ADUser -ChangePasswordAtLogon $true
사용자 자격 증명 테스트
사용자의 자격 증명이 정상적으로 작동하는지 확인하려면, 해당 사용자의 사용자 이름과 비밀번호를 사용해 프로세스를 시작하기만 하면 됩니다. 아래 코드는 프롬프트에 입력한 자격 증명을 사용하여 cmd.exe를 시작합니다.
Start-Process -FilePath cmd.exe /c -Credential (Get-Credential)
공유하기
더 알아보기
저자 소개
Russell Smith
IT 컨설턴트
관리 및 보안 기술을 전문으로 하는 IT 컨설턴트이자 저자입니다. Russell은 IT 분야에서 15년 이상의 경력을 보유하고 있으며, Windows 보안에 관한 책을 집필했고 Microsoft의 Official Academic Course (MOAC) 시리즈를 위한 저술에 공동 저자로 참여했습니다.