UserAccountControl の解読: 実際の仕組みと対処法
Active Directory の操作は、時に象形文字を読むような感覚に陥ることがあります。中でも UserAccountControl 属性の理解は、特に分かりにくい点の一つです。UserAccountControl 属性は、1 または 0 に設定されたビットの集合体で、アカウントの様々なプロパティを表す大きな数字です。Active Directory でユーザーアカウントを見て、これらのコードの意味や変更方法が分からなかった経験があるなら、このガイドはまさにうってつけです。このビットマスクがなぜ重要なのか、素早く簡単にデコードする方法、さらには PowerShell を使って調整する方法まで学べます。UserAccountControl の仕組みを理解しておけば、特にアカウント変更のスクリプトを作成したり、アカウントが無効化されている理由を、何ページにも及ぶプロパティを手動で調べることなく調べる必要がある場合など、多くのストレスを軽減できます。Active Directory では、数十もの個別の属性ではなく、この 1 つの数字にすべてをコンパクトにまとめているため、非常に便利です。どのビットが有効になっているかを理解すれば、すべてがより理解しやすくなります。—
Active Directory で UserAccountControl を修正または構成する方法
方法 1: AD から UserAccountControl 値を直接読み取る
AD はすべてをビットマスクとして保存するため、最初のステップはプロパティでその数値を確認するか、PowerShell で取得することです。あるマシンでは、`0x10202` や `66050` のように表示されるかもしれません。PowerShell でこの数値を取得するには、powershell Get-ADUser -Identity jkelly -Properties UserAccountControl | Select-Object Name, UserAccountControl を使用します。または、より人間に分かりやすい表示にするには、自分でデコードしてください。この数値は、アカウントが無効になっている、パスワードが無期限であるなど、有効になっているさまざまなフラグを表すため、この生の数値を解釈しようとすると、秘密のメッセージを解読するような感覚になるかもしれません。> 注: 値は 10 進整数ですが、ビットを理解するには 16 進数 (`0x10202` など) に変換するのが最も簡単です。—
方法2: UserAccountControlを手動でデコードする
さて、ここでポイントがあります。各プロパティ(「アカウントが無効」や「パスワードが無期限」など)は、その番号の特定のビットに対応しています。通常、スクリプトでは、どのビットがアクティブになっているかを確認する必要があります。この 10 進数値を取得して、どのオプションが有効になっているかを出力する簡単な PowerShell 関数を作成できます。powershell Function Decode-UserAccountControl ($UAC) { $flags = @( @{ Name=’SCRIPT’; Value=0x0001 }, @{ Name=’ACCOUNTDISABLE’; Value=0x0002 }, @{ Name=’HOMEDIR_REQUIRED’; Value=0x0008 }, @{ Name=’LOCKOUT’; Value=0x0010 }, @{ Name=’PASSWD_NOTREQD’; Value=0x0020 }, @{ Name=’PASSWD_CANT_CHANGE’; Value=0x0040 }, @{ Name=’ENCRYPTED_TEXT_PWD_ALLOWED’; Value=0x0080 }, @{ Name=’TEMP_DUPLICATE_ACCOUNT’;値=0x0100 }, @{ 名前=’NORMAL_ACCOUNT’; 値=0x0200 }, @{ 名前=’INTERDOMAIN_TRUST_ACCOUNT’; 値=0x0800 }, @{ 名前=’WORKSTATION_TRUST_ACCOUNT’; 値=0x1000 }, @{ 名前=’SERVER_TRUST_ACCOUNT’; 値=0x2000 }, @{ 名前=’DONT_EXPIRE_PASSWORD’; 値=0x10000 }, @{ 名前=’MNS_LOGON_ACCOUNT’; 値=0x20000 }, @{ 名前=’SMARTCARD_REQUIRED’; 値=0x40000 }, @{ 名前=’TRUSTED_FOR_DELEGATION’; 値=0x80000 }, @{ 名前=’NOT_DELEGATED’;値=0x100000 }, @{ Name=’USE_DES_KEY_ONLY’; 値=0x200000 }, @{ Name=’DONT_REQ_PREAUTH’; 値=0x400000 }, @{ Name=’PASSWORD_EXPIRED’; 値=0x800000 }, @{ Name=’TRUSTED_TO_AUTH_FOR_DELEGATION’; 値=0x1000000 } ) $enabledFlags = @() foreach ($flag in $flags) { if ($UAC -band $flag. Value) { $enabledFlags += $flag. Name } } return $enabledFlags -join ‘, ‘ } 次のようなコマンドを実行すると、人間が読める形式のアクティブフラグのリストが返されます。「ACCOUNTDISABLE、 「NORMAL_ACCOUNT、DONT_EXPIRE_PASSWORD」。これにより、その数字を見るだけでアカウントで何が起こっているかを理解しやすくなります。 —
方法3: PowerShellを使用してADのUserAccountControlフラグを変更する
どのビットを切り替えたいかが分かれば、アカウントのプロパティをプログラムで変更するのは非常に簡単です。PowerShellの`Set-ADUser`コマンドレットと`Set-ADComputer`コマンドレットが便利です。例えば、アカウントを無効にしたい場合は、`-Enabled`フラグを`$false`に設定するか、`UserAccountControl`属性に特定の数値を直接設定します。アカウントを無効にしたいとします。 powershell # アカウントを無効にする Set-ADUser -Identity jkelly -AccountDisabled $true または、生の `UserAccountControl` を直接設定したい場合は、新しい値を計算する必要があります。 powershell # たとえば、アカウントを無効にして、ユーザーがパスワードを変更できないようにするには、次のようにします。 $newUAC = 0x0200 + 0x0002 + 0x0040 # NORMAL_ACCOUNT + ACCOUNTDISABLE + PASSWD_CANT_CHANGE Set-ADUser -Identity jkelly -Replace @{UserAccountControl=$newUAC} ただし、どのビットが設定またはクリアされるかわからない場合、16 進数を直接操作するのは危険である可能性があるので注意してください。ほとんどの一般的なシナリオでは、提供されているコマンドレットを使用することをお勧めします。 > 注: `UserAccountControl` を直接変更する場合は注意が必要です。特定のコマンドレットとパラメーターを使用すると、ミスを減らすことができます。 —
まとめ
UserAccountControl に慣れるのは最初は大変に思えるかもしれませんが、それが単なる部品の集合体だと理解すれば、すべてがスムーズに進むようになります。シンプルな PowerShell 関数でデコードできるようになると、特に多くのアカウントを管理していて、それぞれに ADUC を通したくない場合は、状況が劇的に変わります。これらの部品を調整し、現在の状態を確認し、スクリプトを少し追加するだけでアカウントのロック/ロック解除タスクを自動化できるかもしれません。これにより、古代の巻物を解読するような作業ではなく、扱いやすいパズルのようになることを願っています。これで、あるユーザーのアカウント管理が少しでも楽になれば、目標達成です。
まとめ
- PowerShell を使用して、UserAccountControl の値を確認します (`Get-ADUser`)。
- スクリプトまたは関数を使用して、その値を理解可能なフラグにデコードします。
- PowerShell (`Set-ADUser`) を使用してビットを設定またはクリアすることで、アカウントのプロパティを調整します。
- UAC を直接操作する場合は注意が必要です。パラメータ付きの組み込みコマンドレットを使用することをお勧めします。
まとめ
このビットマスクを理解するのは必ずしも直感的ではありませんが、努力する価値はあります。UserAccountControl のデコードと設定のコツをつかめば、アカウント管理ははるかに柔軟になります。一括変更のスクリプトを作成する場合でも、ユーザーがログインできない問題のトラブルシューティングを行う場合でも、これらのビットを理解することで状況が明確になります。この情報が、誰かの推測作業を少しでも減らすのに役立つことを願っています。