Active Directoryをコマンドラインから管理する手法は、世界中の多くのシステム管理者によって模索され続けてきた。現時点ではADSI(Active Directory Service Interface)を使用したWindows Script(Windows Script Hostを略してWSHと呼ばれることも多い)による管理が定番の手法となり、書籍やWebからは大量のサンプル・コードおよびその解説が入手できる。Windows Scriptに対する人気は非常に高く(依存度が高いともいえるが)、マイクロソフトは「Hey, Scripting Guy!」と題した記事により、スクリプティング手法の啓蒙(けいもう)に努めている。現在、「Hey, Scripting Guy!」 の主な活動の場はブログとなっているが、そのアーカイブはMicrosoft TechNetサイトのTechNetスクリプト・センターからも参照できる。同時に、Twitterにもアカウントを持っており、読者からの質問にダイレクトに回答することもあるようだ。
■Hey, Scripting Guy! に関連するサイト
Windows PowerShell 1.0登場以降もActive Directoryの管理ツールとしてのWindows Scriptの地位は揺るぎないものであったが、Windows PowerShell 2.0の登場に加え、Windows Server 2008 R2にActive Directory専用のPowerShellモジュールが実装されたいま、スクリプト・ガイたちは確実にPowerShellに目を向け始めている。なぜならば、それらがあまりにも使い勝手がよく、スクリプト作成の負荷から管理者を解放できることが明白だからだ。次の表にWindows PowerShell 2.0のActive Directory関連コマンドレットの一覧を示す。
コマンドレット名 | ||
Add-ADComputerServiceAccount | Get-ADUserResultantPasswordPolicy | |
Add-ADDomainControllerPasswordReplicationPolicy | Install-ADServiceAccount | |
Add-ADFineGrainedPasswordPolicySubject | Move-ADDirectoryServer | |
Add-ADGroupMember | Move-ADDirectoryServerOperationMasterRole | |
Add-ADPrincipalGroupMembership | Move-ADObject | |
Clear-ADAccountExpiration | Remove-ADObject | |
Disable-ADAccount | Remove-ADOrganizationalUnit | |
Disable-ADOptionalFeature | Remove-ADPrincipalGroupMembership | |
Enable-ADAccount | Remove-ADServiceAccount | |
Enable-ADOptionalFeature | Remove-ADUser | |
Get-ADAccountAuthorizationGroup | Rename-ADObject | |
Get-ADAccountResultantPasswordReplicationPolicy | Reset-ADServiceAccountPassword | |
Get-ADComputer | Restore-ADObject | |
Get-ADComputerServiceAccount | Search-ADAccount | |
Get-ADDefaultDomainPasswordPolicy | Set-ADAccountControl | |
Get-ADDomain | Set-ADAccountExpiration | |
Get-ADDomainController | Set-ADAccountPassword | |
Get-ADDomainControllerPasswordReplicationPolicy | Set-ADComputer | |
Get-ADDomainControllerPasswordReplicationPolicyUsage | Set-ADDefaultDomainPasswordPolicy | |
Get-ADFineGrainedPasswordPolicy | Set-ADDomain | |
Get-ADFineGrainedPasswordPolicySubject | Set-ADDomainMode | |
Get-ADForest | Set-ADFineGrainedPasswordPolicy | |
Get-ADGroup | Set-ADForest | |
Get-ADGroupMember | Set-ADForestMode | |
Get-ADObject | Set-ADGroup | |
Get-ADOptionalFeature | Set-ADObject | |
Get-ADOrganizationalUnit | Set-ADOrganizationalUnit | |
Get-ADPrincipalGroupMembership | Set-ADServiceAccount | |
Get-ADRootDSE | Set-ADUser | |
Get-ADServiceAccount | Uninstall-ADServiceAccount | |
Get-ADUser | Unlock-ADAccount | |
Active Directoryコマンドレット一覧 |
ここでは簡単に、PowerShell Active Directoryモジュールの使いやすさをご紹介する。
まずは画面1をご覧いただきたい。これはWindows PowerShellのコンソールだ。画面では、初めに「Import-Module activedirectory」でActive Directory用のPowerShellモジュールを読み込んでいる((1))。面白いのは次からで、「cd AD:」((2))によって、Active Directoryプロバイダのドライブに移動している。さらに、「cd '.\DC=contoso,DC=com'」((4))によってドメインのルートに移動し、「dir」で配下のオブジェクト一覧を表示する((3)、(5))。まるで、ファイル・システムをブラウズするかのごとく、Active Directoryの中を参照できる。
これは単に、ドメインのオブジェクトをファイル・システムのようにdirコマンドでブラウズできるところがすごい、という単純な話ではない。「dir(Get-ChildItem)」や「cd(Set-Location)」のような共通のコマンドレットが、現在のプロバイダ(ここではActive Directory)に合わせた動きをするという点に注目していただきたい。これはレジストリでも同様であり、例えば「cd hklm:」と入力すれば、レジストリのHKEY_LOCAL_MACHINEを起点としたツリー構造をブラウズできる。
次の画面では、さらに階層を 「CN=Users」 に進め、「New-ADUser -Name junichia -DisplayName "Junichi Anno"」によって新しいユーザーID(junichia)を作成している((1))。作成したユーザーIDは「Get-ADUser -Identity junichia」によって参照できる((2))。もちろん、カレントの階層を別のOUにしておけば、そこにユーザーを作成することができるし、「-path」パラメータによって作成するパスを明示的に指定することも可能だ。「ユーザーを作成する」という作業をWindows Scriptで行おうとすれば、ドメインへの接続や所定のLDAP階層への移動などといった「お約束」を毎回書く必要があり、少なくとも5〜10行程度のスクリプトを作成しなければならない。さらに、スクリプトを修正するたびにファイルの保存が必要になるため、ここで示したPowerShellの手軽さと比べれば格段に手間が掛かることが分かる。
ご覧いただいたように、Active Directoryコマンドレット群は、利用者に対して余計な作業を行わせないように最大限配慮されており、事実、使い始めるとあまりの便利さに手放せなくなる。
もう少しだけ確実に管理者の心をつかむと思われる例を挙げておく。
Windows Scriptを使用してユーザーの設定を行う場合、最も面倒な作業の1つがUserAccountControlフラグの設定だ。Active Directoryモジュールには、UserAccountControlフラグを簡単に設定できる「Set-AccountControl」コマンドレットが用意されている。このコマンドレットを使用することで、これまでビット・フラグでしか扱えなかった値を簡単に設定できるようになった。例えば、「ユーザーにパスワードの変更を許可しない」ように設定する場合には、以下のように入力するだけでよい。
Set-ADAccountControl -Identity junichia -CannotChangePassword $True
もう1つ重要なコマンドレットを紹介する。それは特定条件下のユーザーを検索できる「Search-ADAccount」コマンドレットだ。このコマンドレットの特徴も前出の「Set-AccountControl」と同様、Windows Scriptでのコーディングが面倒な作業を完全に削減してくれるところにある。
例えば、アカウントが無効なユーザーの一覧を検索するには次のように入力すればよい。
Search-ADAccount -AccountDisabled -UserOnly
「-AccountDisabled」が「無効なユーザー」を示す条件式となっている。なお、デフォルトではコンピュータ・アカウントも含めた結果が出力されるが、ユーザー・アカウントのみを検索するには「-UsersOnly」を付加すればよい。ほかにも、次のようなパラメータが用意されており、ユーザーの準備にかかわる作業が大幅に削減できる。それぞれの使い方は筆者のブログ・サイトなどを参考にしていただきたい。
パラメータ | 検索条件 |
---|---|
-AccountDisabled | すでに無効化されたアカウント |
-AccountExpired | すでに有効期限の切れたアカウント |
-LockedOut | ロックされたアカウント |
-PasswordExpired | パスワードの有効期限が切れているアカウント |
-PasswordNeverExpires | パスワードが無期限に設定されているアカウント |
-AccountExpiring | 指定した日付または日数以内に有効期限が切れるアカウント |
-AccountInactive | 指定した日数以上または日付以降ログオンしていないアカウント |
Search-ADAccountコマンドレットの検索条件パラメータ |
Windowsにおけるアカウント管理で、煩雑な作業の1つとして挙げられるのが、サービス・アカウントの管理だ。独自の業務アプリケーションや、サードパーティ製品が使用するサービス・アカウントの管理は、ITシステムが拡大するにつれて増えていき、パスワードの管理どころか、アカウント)の存在さえも忘れられたものになってしまいがちだ。そのため、多くの現場でadministratorをサービス・アカウントとして使用してしまうという危険な状況や、サービスで使用しているアカウントを間違えて削除してしまうなどといったことが頻発しているのではないだろうか。また、パスワード管理が自動化されたデフォルトのアカウントである「Local Service」「Network Service」「Local System」は、システム共通のアカウントであるため(関連記事参照)、アプリケーションに応じた独自の権限を与えることができない場合が多く、使い勝手が悪い。
こうした状況を改善するための対策として実装されたのが「管理されたサービス・アカウント」と呼ばれる機能だ。
本機能を使用することで、サービス・アカウントに設定するパスワードの管理を、完全にOS側に任せることができるだけでなく、サービス・プリンシパル名の登録も自動的に行われるようになる。
Active Directory管理センターは、従来の管理ツールを置き換えるものとして提供されているものではない。「Active Directory ユーザーとコンピュータ」をはじめとする従来の管理コンソールはMMC(Microsoft Management Console)をベースに実装されており、Windows Server 2008 R2でも使用可能である。Active Directory管理センターは、Windows Server 2008 R2におけるアーキテクチャの変更に対応したMUX(Management User Experience)と呼ばれるプラットフォームをベースに実装されている。前ページの図2「Webサービス・ベースのアーキテクチャ」を見ると分かるとおり、MUXがWPF(Windows Presentation Foundation)上に位置していることから、マイクロソフトが管理面においてもUX(User Experience)を強く意識していることが分かる。
もちろん管理センターの特徴はそれだけではない。
今後の管理コンソールの方向性を示す大きな特徴として、PowerShellコマンドレットをベースとしたGUIである点が挙げられる。Active Directory のPowerShellモジュールの項でも解説したとおり、今後のActive Directoryの管理はPowerShellが中心となっていく。現在でも十分過ぎるほどのコマンドレットが用意されていることを考えれば、管理コンソールはPowerShellを呼び出すためのGUIであっても問題がないはずだ。事実、Active Directory管理センターはそのように実装されている。そのため、随所に、コマンドレットのパラメータを意識した設定項目が見られる。
Active Directory管理センターでは従来から指摘されていた問題点も解消されている。1つが大量データのロード時間だ。例えばActive Directoryに1万人のユーザーが存在し、それらがUsersコンテナにすべて格納されている場合、「Active Directory ユーザーとコンピュータ」ツールでは、すべてのユーザーが読み込まれるまで画面が操作できなくなる。しかしActive Directory管理センターではデータベースからの読み込みが非同期に行われるため、画面の反応が途中で止まってしまうということがない。
また、複数ドメイン、複数フォレストにも対応しているため、大規模なActive Directory環境においてフォレストが変わるたびに別の管理コンソールに移動するといった手間も省くことができる。
このほか、頻繁にアクセスするノードを管理コンソール上に保存するなど、使いやすいようにカスタマイズ可能な機能や、クエリーをLDAPフィルタ形式に変換して表示するなど、きめの細かな対応がなされている。
今回はWindows Server 2008 R2のActive Directoryにおける新機能の概要について解説した。次回はグループ・ポリシーの新機能について解説する。
Copyright© Digital Advantage Corp. All Rights Reserved.