Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

ActiveDirectoryでのUserAccountControl属性値の変換

UserAccountControl ActiveDirectoryのユーザーおよびコンピューターオブジェクトの最も重要な属性の1つです。この属性は、ADドメイン内のアカウントの状態(アカウントがアクティブかロックアウトか、次回のログオン時にパスワード変更のオプションが有効かどうか、ユーザーがパスワードを変更できるかどうかなど)を決定します。ただし、すべての管理者がUserAccountControl属性がどのように機能し、ADで何に使用されるかを十分に認識している

ActiveDirectoryのUserAccountControl属性/フラグ

Active Directoryユーザーとコンピューター(ADUC、dsa.msc)で任意のADアカウントのプロパティを開きます )コンソールに移動し、アカウントに移動します タブ。 アカウントオプションのユーザー属性のグループに注意してください セクション。ここでは、次のオプションを確認できます。

  • ユーザーは次回のログオン時にパスワードを変更する必要があります;
  • ユーザーはパスワードを変更できません;
  • パスワードの有効期限はありません。デフォルトでは、ADのドメインパスワードポリシーでは、ユーザーが定期的にパスワードを変更する必要があります。
  • 可逆暗号化を使用してパスワードを保存します(安全ではありません)。
  • アカウントが無効になっています;
  • インタラクティブログオンにはスマートカードが必要です。
  • アカウントは機密性が高く、委任することはできません。
  • このアカウントにはKerberosDES暗号化タイプを使用します;
  • このアカウントはKerberosAES128/256ビット暗号化をサポートしています;
  • Kerberosの事前認証は必要ありません。

ActiveDirectoryでのUserAccountControl属性値の変換

これらの各ユーザーアカウント属性は、基本的にビット値(フラグ)であり、1(True)のいずれかになります。 )または0(False )。ただし、これらの値は個別のAD属性として保存されず、代わりにUserAccountControl属性が使用されます。

上記で指定されたすべてのオプションの合計値は、 UserAccountControlの値に保存されます 属性。これらすべてのオプションを異なるユーザー属性に格納する代わりに、単一のActiveDirectory属性が使用されます。 UserAccountControlはビットマスクです 各ビットは個別のフラグであり、値はオンです。 (True)またはオフ (誤り)。有効なアカウントオプションに応じて、ユーザーは異なるUserAccountControl属性値を持ちます。属性の現在の値は、対応する[属性エディター]タブで確認するか、PowerShellのGet-ADUserコマンドレットを使用して確認できます。

get-aduser jkelly -properties *|select name,UserAccountControl | ft

ActiveDirectoryでのUserAccountControl属性値の変換

ActiveDirectoryでのUserAccountControl属性値の変換

この例では、属性の値は 0x10202です。 (10進値は 66050 )。これらの数字はどういう意味ですか?

ADアカウントで利用可能なフラグの表を以下に示します。各フラグは特定のUserAccountControlビットに対応し、UserAccountControl値はすべてのフラグの合計に等しくなります。

UserAccountControlフラグ HEX値 10進値 SCRIPT(ログオンスクリプトの実行)0x00011ACCOUNTDISABLE(アカウントが無効)0x00022HOMEDIR_REQUIRED(ホームフォルダーが必要)0x00088LOCKOUT(アカウントがロックされている)0x001016PASSWD_NOTREQD(パスワードは不要)0x002032PASSWD_CANT_CHANGE(ユーザーがパスワードを変更できないようにする)0x004064ENCRYネットワークにログオンするための暗号化)0x0080128TEMP_DUPLICATE_ACCOUNT(プライマリアカウント別のドメインにあるユーザーのアカウント)0x0100256NORMAL_ACCOUNT(デフォルトアカウント、典型的なアクティブなアカウント)0x0200512INTERDOMAIN_TRUST_ACCOUNT0x08002048WORKSTATION_TRUST_ACCOUNT0x10004096SERVER_TRUST_ACCOUNT0x20008192DONT_EXPIRE_PASSWORD(ユーザーの有効期限が切れていないパスワードを持つアカウント)0x1000065536MNS_LOGON_ACCOUNT0x20000131072SMARTCARD_REQUIRED(、ユーザーにはスマートカードが必要です)0x40000262144TRUSTED_FOR_DELEGATION0x80000524288NOT_DELEGATED0x1000001048576USE_DES_KEY_ONLY0x2000002097152DONT_REQ_PREAUTH(Kerberosの事前認証は必要ありません)0x400000 4194304PASSWORD_EXPIRED(ユーザーパスワードの有効期限が切れています)0x8000008388608TRUSTED_TO_AUTH_FOR_DELEGATION0x100000016777216PARTIAL_SECRETS_ACCOUNT0x0400000067108864

たとえば、パスワードを変更する要件が無効になっている通常のアカウントがあります。 userAccountControlの値は、次のように計算されます。

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) = 66048

したがって、私の例(66050)のuserAccountControlの値は、次のように取得されました。

NORMAL_ACCOUNT (512) + DONT_EXPIRE_PASSWORD (65536) + ACCOUNTDISABLE (2) = 66050

無効にされたユーザーアカウントには、userAccountControl値として514があります:

(NORMAL_ACCOUNT (512)+ ACCOUNTDISABLE (2) = 514

一般的なドメインオブジェクトのデフォルトのUserAccountControl値:

  • 通常のADユーザー:0x200(512);
  • ドメインコントローラー:0x82000(532480);
  • ワークステーション/サーバー:0x1000(4096)。

LDAPフィルターを使用して、特定のuseraccountcontrol値を持つADオブジェクトからオブジェクトを選択できます。たとえば、すべてのアクティブな(通常の)アカウントを表示するには:

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=512)"

無効になっているすべてのユーザーアカウントのリストを表示します:

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=514)"

有効期限が切れていないパスワードオプションがあるアカウントのリスト:

Get-ADUser -Properties * -ldapFilter "(useraccountcontrol=66048)"

次のコマンドを使用して、テーブルから必要なビットを合計し、ADオブジェクトを選択できます。

$UserAccountControl_hex= 0x10000 + 0x0080 + 0x200000
Get-ADUser -Filter {UserAccountControl -band$UserAccountControl_hex}

PowerShellスクリプトを使用したUserAccountControl値のデコード

より便利にするために、UserAccountControlビットマスクの値を人間が透過する形式に自動的に変換するツールが必要です。 UserAccountControl属性の10進値を取得し、有効なアカウントオプションのリストを返す単純なPowerShell関数を作成してみましょう。 UserAccountControlはビットマスクであるため、各ビットにテキストの説明を割り当てることができます。

このPowerShell関数を作成しましたDecodeUserAccountControl UserAccountControlの値を読み取り可能な形式に変換するには:

Function DecodeUserAccountControl ([int]$UAC)
{
$UACPropertyFlags = @(
"SCRIPT",
"ACCOUNTDISABLE",
"RESERVED",
"HOMEDIR_REQUIRED",
"LOCKOUT",
"PASSWD_NOTREQD",
"PASSWD_CANT_CHANGE",
"ENCRYPTED_TEXT_PWD_ALLOWED",
"TEMP_DUPLICATE_ACCOUNT",
"NORMAL_ACCOUNT",
"RESERVED",
"INTERDOMAIN_TRUST_ACCOUNT",
"WORKSTATION_TRUST_ACCOUNT",
"SERVER_TRUST_ACCOUNT",
"RESERVED",
"RESERVED",
"DONT_EXPIRE_PASSWORD",
"MNS_LOGON_ACCOUNT",
"SMARTCARD_REQUIRED",
"TRUSTED_FOR_DELEGATION",
"NOT_DELEGATED",
"USE_DES_KEY_ONLY",
"DONT_REQ_PREAUTH",
"PASSWORD_EXPIRED",
"TRUSTED_TO_AUTH_FOR_DELEGATION",
"RESERVED",
"PARTIAL_SECRETS_ACCOUNT"
"RESERVED"
"RESERVED"
"RESERVED"
"RESERVED"
"RESERVED"
)
return (0..($UACPropertyFlags.Length) | ?{$UAC -bAnd [math]::Pow(2,$_)} | %{$UACPropertyFlags[$_]}) -join ” | ”
}

UserAccountControlの66050の値が何を意味するかを確認しましょう:

DecodeUserAccountControl 66050

ご覧のとおり、このユーザーに対して次のフラグが有効になっているというスクリプトが返されました。

アカウント可能| NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

ActiveDirectoryでのUserAccountControl属性値の変換

Get-ADUserまたはGet-ADComputerコマンドレットを使用して、ADアカウントに関する情報を便利な形式で取得するときに、同じスクリプトを使用して、その場でUserAccountControl値をデコードできます。例:

get-aduser ms-pam -properties *|select @{n='UsrAcCtrl';e={DecodeUserAccountControl($_.userAccountControl)}}

アカウント可能| NORMAL_ACCOUNT | DONT_EXPIRE_PASSWORD

get-adcomputer rome-dc01 -properties *|select @{n='UsrAcCtrl';e={DecodeUserAccountControl($_.userAccountControl)}}

SERVER_TRUST_ACCOUNT | TRUSTED_FOR_DELEGATION

ActiveDirectoryでのUserAccountControl属性値の変換

PowerShellを使用してADでUserAccoutControl属性を設定するにはどうすればよいですか?

Set-ADUserおよびSet-ADComputerPowerShellコマンドレットを使用して、ActiveDirectoryのUserAccountControl属性の個々のオプションを変更できます。これらのコマンドレットには、次のような個別のオプションがあります。

  • AccountNotDelegated
  • AllowReversiblePasswordEncryption
  • CannotChangePassword
  • ChangePasswordAtLogon
  • KerberosEncryptionType
  • PasswordNeverExpires
  • PasswordNotRequired
  • PrincipalsAllowedToDelegateToAccount
ADのコンピューターアカウントのパスワードは、コンピューターとドメイン間の信頼関係を提供します。

したがって、一部のユーザーオプションを変更するには、次のコマンドを使用する必要があります。

Set-ADUser jkelly –CannotChangePassword:$true -PasswordNeverExpires:$true

または、一般的な Set-UserAccountControlを使用できます コマンドレット:

Set-ADAccountControl -Identity jkelly -CannotChangePassword $True -PasswordNeverExpires $True

ActiveDirectoryでのUserAccountControl属性値の変換

UserAccountControl属性を介して正確な値を設定することにより、これらのユーザーアカウントオプションの両方を直接有効にすることもできます。

Set-ADUser jkelly -Replace @{UserAccountControl= 66048}


  1. Windows 10 で Active Directory を有効にする方法

    Active Directory は Windows Server Technical Preview を管理します。管理者が権限を付与し、ネットワーク上のリソースにアクセスするために使用するツールです。デフォルトでは、Windows PC にはインストールされません。ただし、Microsoft の公式 Web サイトからオンラインで入手して、デバイスにインストールすることができます。 Windows 10 で Active Directory を使用する方法について混乱していますか?答えが「はい」の場合、この記事は Windows 10 で Active Directory を有効にする方法

  2. Active Directory でユーザーの最終ログイン時間を表示する方法

    ユーザーが Active Directory に最後にログインした日付と時刻を表示する場合は、このチュートリアルを読み続けてください。このチュートリアルには、Active Directory ユーザーの最終ログイン時刻を確認するための 2 つの方法が含まれています。 AD ユーザーが任意のワークステーションから Active Directory にログオンするたびに、システムはログオンの日時を次の属性に記録します:lastLogon &lastLogonTimestamp. この 2 つのうち、最も正確な属性は lastLogon、 です。 これは、特定のドメイン コントローラによって認証さ