自動化こそが 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 の Web サイト:
- 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 を使用します。以下の例では、$UPN 変数に ad.contoso.com ドメインをハードコードしています。ユーザーに割り当てたい 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)シリーズ向けの教材も共著しています。