PowerShellのSet-ADUserコマンドレットでActive Directoryのユーザーの有効期限を変更する
今回はSet-ADUserコマンドレットで、ユーザーアカウントの有効期限を変更してみます。
環境はWindows Server 2012 R2のドメインコントローラーです。
なお、Get-ADUser、New-ADUser、Set-ADUserの各コマンドレットで、ユーザーアカウントの有効期限のオプションは「AccountExpirationDate」です。
(写真1)有効期限変更前のユーザーのプロパティ
test01.localドメインのユーザー「TEST001」は、Active DirectoryユーザーとコンピューターのGUIで見ると、アカウントの有効期限が2015/2/28までとなっています。
(写真2)有効期限によってユーザーを抽出
管理者:Windows PowerShell |
PS C:\> Get-ADUser -Filter {AccountExpirationDate -le "2015/12/31"} |Format-Table -Property Name,Enabled,AccountExpirationDate Name Enabled AccountExpirationDate ---- ------- --------------------- TEST001 True PS C:\> Get-ADUser -Filter {AccountExpirationDate -le "2015/03/01"} |Format-Table -Property Name,Enabled,AccountExpirationDate Name Enabled AccountExpirationDate ---- ------- --------------------- TEST001 True PS C:\> Get-ADUser -Filter {AccountExpirationDate -le "2015/02/28"} |Format-Table -Property Name,Enabled,AccountExpirationDate PS C:\> |
AccountExpirationDateが2015/12/31、2015/3/1ではTEST001はヒットします。
しかし2015/2/28だとヒットしません。ちょっと不思議です。
Active Directoryユーザーとコンピューターでは有効期限が2015/2/28なのに。
ここではパイプで「Format-Table」に送って、プロパティの中から「Name,Enabled,AccountExpirationDate」を選択して表示しています。
しかし肝心のAccountExpirationDateが何も表示されない理由はよくわかりません。
(写真3)有効期限変更前のユーザーの詳細情報
管理者:Windows PowerShell |
PS C:\> Get-ADUser -Filter {AccountExpirationDate -le "2015/03/01"} -Properties * AccountExpirationDate : 2015/03/01 0:00:00 accountExpires : 130696092000000000 AccountLockoutTime : AccountNotDelegated : False AllowReversiblePasswordEncryption : False AuthenticationPolicy : {} AuthenticationPolicySilo : {} BadLogonCount : 0 badPasswordTime : 0 badPwdCount : 0 CannotChangePassword : False CanonicalName : test01.local/Users/TEST001 Certificates : {} City : CN : TEST001 codePage : 0 ~以下略~ |
AccountExpirationDateを見ると、「2015/03/01 0:00:00」になっています。
ああ、そう言う事ね。だから2015/2/28ではヒットしないのね。
(写真4)ユーザーアカウントの有効期限を変更
管理者:Windows PowerShell |
PS C:\> Set-ADUser "CN=TEST001,CN=Users,DC=test01,DC=local" -AccountExpirationDate "2015/12/31" PS C:\> |
PowerShellのコマンド画面には何も反応がないのが淋しいです。
(写真5)有効期限によってユーザーを抽出
管理者:Windows PowerShell |
PS C:\> Get-ADUser -Filter {AccountExpirationDate -le "2015/12/31"} |Format-Table -Property Name,Enabled,AccountExpirationDate Name Enabled AccountExpirationDate ---- ------- --------------------- TEST001 True PS C:\> Get-ADUser -Filter {AccountExpirationDate -le "2015/03/01"} |Format-Table -Property Name,Enabled,AccountExpirationDate PS C:\> Get-ADUser -Filter {AccountExpirationDate -le "2015/02/28"} |Format-Table -Property Name,Enabled,AccountExpirationDate PS C:\> |
「Get-ADUser -Filter {AccountExpirationDate -le "2015/12/31"}」だとTEST001がヒットしますが、2015/3/1や2015/2/28ではヒットしません。
想定通りです。
(写真6)有効期限変更後のユーザーの詳細情報
管理者:Windows PowerShell |
PS C:\> Get-ADUser -Filter {AccountExpirationDate -le "2015/12/31"} -Properties * AccountExpirationDate : 2015/12/31 0:00:00 accountExpires : 130959612000000000 AccountLockoutTime : AccountNotDelegated : False AllowReversiblePasswordEncryption : False AuthenticationPolicy : {} AuthenticationPolicySilo : {} BadLogonCount : 0 badPasswordTime : 0 badPwdCount : 0 CannotChangePassword : False CanonicalName : test01.local/Users/TEST001 Certificates : {} City : CN : TEST001 codePage : 0 ~以下略~ |
AccountExpirationDateの値は何故か2015/12/31 0:00:00になっています。
(写真7)有効期限変更後のユーザーのプロパティ
Active Directoryユーザーとコンピューターで有効期限を設定し、Get-ADUserでAccountExpirationDateを見ると翌日の0:00:00がセットされます。
しかしSet-ADUserでAccountExpirationDateを設定すると、当日の0:00:00がセットされます。
うーん、この辺の仕様はちょっと謎ですが。
こんな感じでSet-ADUserコマンドレットを使ってアカウントの有効期限を設定する事が出来ました。
以下参考
有効期限の変更前に、いつものおまじないのようなコマンドで、Active Directoryのユーザー情報をCSV形式にエクスポートしてみました。
管理者:Windows PowerShell |
PS C:\> Get-ADUser -Properties * -Filter * |export-csv -encoding default -path C:\Users\Administrator\Documents\ADUSER.csv PS C:\> |
(写真9)ADUSER.csvをExcelで開いてみた
(写真10)ADUSER.csvをテキストエディタで開いてみた
Active Directoryユーザーとコンピューターでアカウントの有効期限が「2015/2/28」となっている時に、Active Directoryのユーザー情報をGet-ADUserでCSV形式にエクスポートし、念のためAccountExpirationDateの値をTeraPadやExcelで見てみました。
しかし間違いなく「2015/03/01 0:00:00」が入っていました。
GUIから有効期限を設定すると、内部的には翌日の0:00:00とセットされるんですね。
しかしSet-ADUserで有効期限を設定すると、その日の0:00:00がセットされるのは謎仕様ですが、まあその辺は良しとします。