Active Directory から情報を取得する

Windows で情報システムを構築している場合、規模が大きくなるにつれて管理負荷が大きくなるため、Active Directory を利用してアカウントや IT 資源の集中管理を行います。本稿では Kompira Enterprise から Active Directory にアクセスして、登録されている情報の検索を行います。


動作確認環境

ソフトウェア バージョン
Kompira Enteprise 1.5.5.post11
OS CentOS 7.8.2003
Windows Server 2019 (バージョン1809)
Active Directory スキーマバージョン 88

または

ソフトウェア バージョン
Kompira Enteprise 1.6.2.post4
OS CentOS 7.8.2003
Windows Server 2019 (バージョン1809)
Active Directory スキーマバージョン 88

事前準備

Active Directory は LDAP や DNS などの仕組みを利用した管理基盤です。Kompira Enterprise からのアクセス方法は LDAP の利用なども考えられますが、今回は「Windows PowerShell 用 Active Directory モジュール」を利用して、Kompira Enterprise のスクリプトジョブから PowerShell での操作を行います。

Active Directory サーバーのサーバーマネージャーを起動してから、「役割と機能の追加ウィザード」>「機能」>「役割管理ツール」>「AD DS および AD LDS ツール」と選択します。「Windows PowerShell の Active Directory モジュール」のチェックを指定して、インストールを選択してください。デフォルトでインストールされていた場合には、そのままで構いません。

また Kompira Enterprise から Windows サーバーにアクセスできるように、WinRM の設定を行う必要があります。詳細は以前の記事「Windows でリモートスクリプトを実行する (その1)」の、「Windows 側での設定」をご参照ください。

スクリプトジョブの準備

Active Directory モジュールに含まれるコマンドレット (Cmdlets) については、以下の記事を参照してください。

Windows Tech Net: Active Directory Cmdlets in Windows PowerShell

またスクリプトジョブを作成するにあたり、各コマンドレットの動作確認はサーバー側の Windows PowerShell ウィンドウを使ってコマンドを投入してみると良いでしょう。

PowerShell を利用して上述のコマンドレットから Active Directory を操作するためには、最初に以下のコマンドレットを実行して、Active Directory モジュールをインポートしておく必要があります。

Import-Module ActiveDirectory

では、「直近の30日間ログオンしていないユーザーを検索」というスクリプトジョブを作成します。拡張子に「ps1」を付けることを忘れないでください。

スクリプトジョブ「直近の30日間ログオンしていないユーザーを検索」

Import-Module ActiveDirectory
Search-ADAccount -AccountInactive -TimeSpan 30 -UsersOnly

拡張子は以下のように設定します。

このスクリプトジョブを実行するための Active Directory サーバーのノード情報のオブジェクトと、アクセスするアカウント情報のオブジェクトもあわせて作成してください。

実行画面で「実行ノード」と「実行アカウント」に、作成したノード情報とアカウント情報を指定して実行します。

実行結果は以下のようになります。検索条件に該当するユーザーアカウントの情報が列挙されています。

※ Kompira Enterprise 1.6 系では標準出力と  [STDOUT] で計2回結果が表示されます。

※ Kompira Enterprise 1.5 系では [STDOUT] にのみ結果が表示されます。

出力結果を扱いやすくするため、「ConvertTo-Json」コマンドレットを使用して JSON 形式にしてみましょう。

スクリプトジョブ「直近の30日間ログオンしていないユーザーを検索」その2

Import-Module ActiveDirectory
Search-ADAccount -AccountInactive -TimeSpan 30 -UsersOnly | ConvertTo-Json -Compress

実行結果は以下のようになります。

ジョブフローからスクリプトジョブを呼び出す

スクリプトジョブからの応答を JSON 化したところで、これを利用するジョブフローを作成してみます。
例として、ユーザー名を抽出して表示するジョブフロー「直近の30日間ログオンしていないユーザー名を抽出」を作成します。

アカウント情報は同一ディレクトリに「NodeOfActiveDirectory」という名前で作成してあるものとします。また、スクリプトジョブからの応答は JSON 形式の文字列のため、これを Kompira Enterprise の辞書形式のデータにするために json_parse() 関数を利用しています。

ジョブフロー「直近の30日間ログオンしていないユーザー名を抽出」

| __node__ = ./NodeOfActiveDirectory |

[./直近の30日間ログオンしていないユーザーを検索] -> # スクリプトジョブの呼び出し
[res = json_parse($RESULT)] ->
{ for id in res |
    print(id.Name)
}

実行結果は以下のようになります。今回の場合は、JSON 形式の応答の下に表示されている Guest と krbtgt が抽出したユーザー名になります。

※ Kompira Enterprise 1.5 系の場合は JSON 形式の応答は表示されず、ユーザー名のみが表示されます。

本稿では、PowerShell を使ったスクリプトジョブから、Active Directory の情報検索を行いました。

モジュールにはユーザーや機器の情報登録・参照・削除などの多くのコマンドレットが用意されているため、同様の手法で Windows 関連のリソース管理を Kompira Enterprise から行うことができるでしょう。

TOP