Active Directory の GUI 管理ツール(Active Directory Users and Computers(ADUC)など)は、単一アカウントに対して操作を行うには十分です。しかし、複数の AD アカウントを扱う必要がある場合は、PowerShell のほうがより柔軟なツールです。この投稿では、カンマ区切りのファイルを使って、AD ユーザーおよびコンピューター アカウントを個別に、または一括でロック、ロック解除、有効化、無効化する方法を説明します。
Active Directory の PowerShell コマンドレットを実行する前に、コンピューターへ PowerShell 用の Active Directory モジュールをインストールしておく必要があります。Windows 10 を使用している場合は、Microsoft の Web サイトから Windows 10 用の Remote Server Administration Tools (RSAT) を こちら にアクセスしてダウンロードし、インストールしてください。次に、ローカル管理者権限で PowerShell プロンプトを開き、Enable-WindowsOptionalFeature コマンドレットを以下のように実行して AD の PowerShell モジュール機能を有効化します:
Enable-WindowsOptionalFeature -Online -FeatureName RSATClient-Roles-AD-Powershell
必要に応じて、Update-Help コマンドレットを使用してヘルプ ファイルも更新できます:
Update-Help -Module ActiveDirectory -Verbose -Force
昇格された権限は他の作業には不要なので、必ず PowerShell プロンプトを閉じてください。以下の手順は、Active Directory でユーザー アカウント操作を実行する権限を持つ任意のユーザーのセキュリティ コンテキストで実行できます。たとえば、ユーザー アカウントのロック解除や、ユーザー/コンピューター/サービス アカウントの有効化と無効化などです。
ロックされている Active Directory アカウントの見つけ方
PowerShell や GUI では Active Directory アカウントをロックすることはできません。実際、そうしたい理由はありません。ですが、Search-ADAccount コマンドレットの助けを借りて、ロックアウトされたユーザー アカウントを検索することはできます。ここでは Search-ADAccount コマンドレットの結果を Select-Object コマンドレットにパイプして、各ロックされたアカウントの Name と SamAccountName 属性だけを表示します:
Search-ADAccount -LockedOut -UsersOnly | Select-Object Name, SamAccountName
Active Directory アカウントのロック解除方法
次のコマンドレットを使えば、ユーザー アカウントを簡単にロック解除できます。Unlock-ADAccount cmdlet。-Identity パラメーターで、ロック解除する対象のアカウントを指定します。指定には、識別名(distinguished name)、セキュリティ識別子(SID)、グローバル一意識別子(GUID)、または Security Account Manager(SAM)アカウント名を指定できます。ここでは RussellS アカウントをロック解除します:
Unlock-ADAccount -Identity RussellS
Active Directory アカウントを有効化する方法
何らかの理由でアカウント オブジェクトが無効化されている場合は、次のコマンドレットを使って有効化できます。Enable-ADAccount cmdlet:
Enable-ADAccount -Identity RussellS
Active Directory アカウントを無効化する方法
同様に Disable-ADAccount コマンドレットを使って AD アカウントを無効化します:
Disable-ADAccount -Identity RussellS
CSV ファイルからユーザーを無効化する
また、カンマ区切り(.csv)のテキストファイルに記載されたすべての Active Directory ユーザーアカウントを無効化することもできます。ファイルにはヘッダーが含まれている必要があり、その後にユーザー名の一覧(1 行につき 1 つ)が続きます。私の CSV ファイルは列が 1 つしかありません(ヘッダーは “Name”)ので、カンマ区切りのファイルにはカンマがありません!CSV ファイルに複数の列がある場合は、追加の列はスクリプトによって単に無視されます。
まず、CSV ファイルの内容をオブジェクト($users)として読み込み、次に ForEach ループを使って、テキストファイルの各行にあるユーザーを無効化します。以下が PowerShell スクリプトです:
$users=Import-CSV c:tempusers.csv
ForEach ($user in $users)
{
Disable-ADAccount -Identity $($user.name)
}
Netwrix Directory Manager で AD アカウントを管理する
CSV ファイルからコンピューター アカウントを無効化する
CSV ファイルに記載されたコンピューター アカウントを無効化する PowerShell スクリプトは、ほぼ同一です。主な違いは、ユーザー アカウント オブジェクトではなく、コンピューター オブジェクトを無効化したいことを示すために -Identity パラメーター値の末尾にドル記号($)を追加する必要がある点です。さらに、変数名とファイル名も、コンピューター アカウントにより適したものに変更します。
スクリプトはこちらです:
$computers=Import-CSV c:tempcomputers.csv
ForEach ($computer in $computers)
{
Disable-ADAccount -Identity "$($computer.name)$"
}
結果を確認するには Search-ADAccount の cmdlet を使用します:
Search-ADAccount –AccountDisabled –ComputersOnly | Select-Object Name, SamAccountName
非アクティブなユーザーを無効化する
Search-ADAccount と Disable-ADAccount の cmdlet は、不活発なユーザー アカウントを無効化するために一緒に使用できます。ここでは 2 つの例を示します。まず、新しい timespan オブジェクト($timespan)を作成し、それを 90 日に設定します。次に、それを -TimeSpan パラメーターの値として使用し、過去 3 か月間アクティブでなかったアカウントを無効化します。 -AccountInactive パラメーターには、ドメイン機能レベルが Windows Server 2003 以上であることが必要です。
$timespan = New-Timespan -Days 90
Search-ADAccount -UsersOnly -AccountInactive -TimeSpan $timespan | Disable-ADAccount
別の方法として、-DateTime パラメーターを使い、指定した日付以降に非アクティブだったアカウントを返す方法があります。このスクリプトは、2018 年 6 月 3 日以降にアクティブではなかったすべてのアカウントを無効化します:
Search-ADAccount -UsersOnly -AccountInactive -DateTime ‘6/3/2018’ | Disable-ADAccount
Active Directory が LastLogOnDate 属性を同期する方法のため、–AccountInactive パラメーターを Search-ADAccount cmdlet と指定すると、結果が最大で 9〜14 日程度不正確になる可能性があります。
ご覧のとおり、PowerShell を使って Active Directory アカウントの状態を管理するのは簡単です。PowerShell はオブジェクト指向であるため、処理したいデータを含むオブジェクトを作成し、その後、必要な操作を実行する別の cmdlet に渡すことが容易です。
共有する
もっと詳しく
著者について
Russell Smith
ITコンサルタント
管理およびセキュリティ技術を専門とする IT コンサルタント兼著者です。Russell は IT 分野で 15 年以上の経験があり、Windows セキュリティに関する書籍を執筆し、Microsoft の Official Academic Course(MOAC)シリーズ向けの教材も共著しています。