4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Powershellでドメインユーザのパスワードロックを解除する

Last updated at Posted at 2017-04-08

Unlock-ADAccountコマンドレット

試験環境のドメイン管理権限を持ってると「パスワード間違えてロックかけちゃったよ~」とHELP要請をもらうことがそれなりにある。はず。
ドメインがいくつもあったりすると、対応の内容は簡単だけどちょっとめんどくかったり。

Powershellでのロック解除はUnlock-ADAccountコマンドレットを使う。
DOSコマンドのnet user/domain /active:yesオプションを付けても解除可能だけど、ユーザ名をちゃんと指定してあげないといけないし、実行ユーザはあまり融通効かない。

以下のコマンドなら、実行ユーザの権限が及ぶ範囲で、ロックアウト中の全ユーザのロックを解除できる。(なんて暴力的!)

.ps1
Search-ADAccount -LockedOut | Unlock-ADAccount 

Script

…とはいえ、実運用ではさすがに問い合わせがきたアカウントだけ解除したいし、かつ自分も普段は権限が低いユーザを使ってたりする場合もあるのでスクリプトにする。
ドメイン名を名前解決できれば、実行端末と解除したいユーザが別ドメインでもいけるはず。

Unlock-User.ps1
# ユーザアンロックスクリプト
# Usage: .\Unlock-User.ps1 -User testuser01 -Domain test1domain
Param($User = $null, $Domain = $null)

# 入力チェック
if ($User -eq $null){
    echo "Usage:.\Unlock-User.ps1 -User testuser01 -Domain test1domain"
    exit 2
} 

if ($Domain -eq $null){
    $Domain = $env:USERDOMAIN
}

# Credential作成 "AdminUser"=Adminのユーザ名
$secUser = $Domain + "\AdminUser"
$objCred = Get-Credential -UserName $secUser -Message "Domain Admins"

# ユーザチェック
$objUser = Get-ADUser -Filter 'Name -like $User' -Server $Domain -Credential $objCred

if ($objUser -eq $null){
    echo "ユーザ検索失敗"
    exit 2
}

$objUser = Search-ADAccount -LockedOut -Server $Domain -Credential $objCred | Where {$_.Name -eq $User}

if ($objUser -eq $null){
    echo "${domain}\${user}はロック解除済"
    exit 1
}

# ロックアウト解除
$objUser | Unlock-ADAccount -Credential $objCred

$objUser = Search-ADAccount -LockedOut -Server $Domain -Credential $objCred | Where {$_.Name -eq $User}

if ($objUser -eq $null){
    echo "${domain}\${user}のパスワードロックを解除"
    exit 0
}else{
    echo "${domain}\${user}のパスワードロック解除に失敗"
    exit 2
}

実行するとGet-CredentialでAdminユーザのパスワード入力が求められます。
それも面倒なときは、パスワードベタ書きで。

.ps1
# Credential作成 "AdminUser"=Adminのユーザ名
$secUser = $Domain + "\AdminUser"
$strPass = "password"
$secPass = ConvertTo-SecureString $strPass -AsPlainText -Force
$objCred = New-Object System.Management.Automation.PSCredential($secUser, $secPass)

雑感

ActiveDirectory周りは、現場が変わると常識も違うので面白いね。
個人的には、ADが主題じゃないような試験環境とかではパスワードロックポリシーなんて外しておいた方がいいと思ってるけど、ガチガチセキュリティでエンドユーザクライアント管理が第一目標の本番環境の設計思想なら気軽にロック解除出来てるようじゃまずい。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?