オフライン環境でActive Directory PowerShellモジュールを正しく導入する方法

オフライン環境でActive Directory PowerShellモジュールを利用したいと思っても、インターネットが使えない状況ではインストールに苦戦することが多いでしょう。本記事では、モジュールの移行手順や注意点を詳しく解説し、スムーズに導入するためのコツをご紹介します。

Active Directory PowerShellモジュールをオフライン環境に導入する全体像

Active Directory PowerShellモジュールは、Active Directoryドメイン サービスの管理を効率化するうえで欠かせない存在です。しかしインターネット接続が不可能なオフライン環境では、オンライン環境のように「Install-WindowsFeature」や「Add-WindowsFeature」コマンドを使った簡単な導入が難しくなります。そこで、手動でモジュールを移行する方法が必要になります。

オンライン環境とオフライン環境の違い

オフライン環境では、Windows UpdateやMicrosoft公式サイトからモジュールを入手できないため、あらかじめオンライン環境で必要なファイルを取得し、それを別途持ち込む必要があります。具体的には以下の2つの方法が考えられます。

  1. サーバー(もしくはクライアント)に既に存在するActive Directory PowerShellモジュール フォルダーをコピーする
  2. Windowsのインストール メディア(CD/DVD/ISOなど)やインストール済みサーバーから該当モジュール一式を抜き出す

手動コピーで起こりうるエラーの原因

Active Directory PowerShellモジュールは、単にDLLファイルだけで動作するわけではありません。モジュール マニフェスト(.psd1や.psm1)、複数のDLL、ヘルプファイルなど、必要ファイルが複数存在します。これらを正しく配置しないと「ファイルが見つからない」というエラーが出やすくなります。単にDLLだけをコピーしても、それ以外の関連ファイルがそろっていないためImport-Moduleで失敗してしまいます。

モジュール フォルダー構造の一例

以下は、Windows Server 2019などでActive Directory PowerShellモジュールが格納されている一般的なフォルダー構造の例です。環境によって多少の違いはありますが、大まかなイメージとして把握しておくと役立ちます。

C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ 
└── ActiveDirectory
    ├── en-US
    │   └── Microsoft.ActiveDirectory.Management.dll.mui
    ├── Microsoft.ActiveDirectory.Management.Resources.dll
    ├── Microsoft.ActiveDirectory.Management.dll
    ├── Microsoft.ActiveDirectory.Management.psd1
    ├── Microsoft.ActiveDirectory.Management.psm1
    ├── <その他リソースファイル>
    └── <ヘルプファイルなど>

単に「Microsoft.ActiveDirectory.Management.dll」だけをコピーしても動作しない原因は、上記のように関連するマニフェストファイル(psd1やpsm1)、リソースフォルダー(en-USなど)が必要になるからです。

オフライン環境へのコピー手順

ここでは、手動でActive Directory PowerShellモジュールを移行する手順を具体的に説明します。ポイントは「関連ファイル一式をまとめてコピーし、PowerShellのモジュールパス上に置く」ことです。

手順1: モジュール フォルダーを取得する

まずはオンライン環境、あるいはすでにActive Directory PowerShellモジュールが存在するサーバーまたはクライアントから、モジュール フォルダーを取得します。多くの場合、以下のパスに配置されています。

C:\Windows\System32\WindowsPowerShell\v1.0\Modules\ActiveDirectory

フォルダー名は「ActiveDirectory」または「Microsoft.ActiveDirectory.Management」という名前になっていることが多いです。すべてのサブフォルダーやファイルを含め、丸ごとコピーしておきましょう。

手順2: PowerShellのモジュールパスを確認する

コピー先のオフライン環境では、PowerShellがモジュールを自動的に認識できるフォルダー(=モジュールパス)の場所を把握しておく必要があります。以下のコマンドを実行すると、現在のモジュールパスを確認できます。

$env:PSModulePath -split ';'

出力される複数のディレクトリのうち、ユーザー レベルのパス(例: C:\Users\<ユーザー名>\Documents\WindowsPowerShell\Modules)やシステム レベルのパス(例: C:\Program Files\WindowsPowerShell\Modules)など、好きな場所を選択してそこへモジュールをコピーします。

手順3: モジュール フォルダーを配置する

先ほど取得した「ActiveDirectory」または「Microsoft.ActiveDirectory.Management」フォルダーを、そのまま任意のモジュールパス フォルダーへ配置します。
例:

C:\Program Files\WindowsPowerShell\Modules\ActiveDirectory

この際、フォルダー名を変えないようにするのが無難です。モジュール マニフェストに記載されているモジュール名やDLLの配置を変更すると、Import-Module時にパスを認識できずエラーになる可能性があります。

手順4: Import-Module で読み込む

配置が完了したら、以下のように「Import-Module」コマンドを実行します。

Import-Module ActiveDirectory

モジュール名が「Microsoft.ActiveDirectory.Management」の場合はそれを指定します。万が一エラーが出る場合は、以下の点を再確認してください。

  • PowerShellを管理者権限で起動しているか
  • モジュール フォルダーの名称やパスが正しいか
  • コピーしたファイルが破損していないか
  • バージョンの違い (.NET FrameworkやPowerShellバージョン など)

トラブルシューティング

実際にはコピーを完了しても、環境依存でエラーが生じるケースがあります。ここでは、よくある原因と対処法をまとめます。

モジュールパスにおけるアクセス権の問題

オフライン環境下でも、セキュリティ ポリシーが厳格に設定されている場合は、コピー先フォルダーに対するアクセス権(ACL)によりPowerShellから参照できないことがあります。もし「Get-Module -ListAvailable」でモジュールが表示されない場合は、ファイルやフォルダーのアクセス権を確認してみましょう。

PowerShellのバージョンや.NET Frameworkバージョンの不一致

Active Directory PowerShellモジュールは、特定の.NET FrameworkやPowerShellバージョンと紐づいていることが多いため、バージョン不一致でロードが失敗することがあります。特にWindows Server 2008 R2やWindows 7などの古いOSを運用している場合、事前に最新の.NET FrameworkやWindows Management Framework(WMF)をインストールしておく必要があるかもしれません。

バージョン情報の確認例

  • PowerShellバージョン: $PSVersionTable.PSVersion
  • .NET Frameworkバージョン: レジストリ HKLM:\SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full など

クライアントOSとサーバーOSでの違い

クライアントOS(Windows 10やWindows 11)上にActive Directory PowerShellモジュールを入れたい場合、元々の仕組みとして「RSAT (Remote Server Administration Tools)」をインストールするのが一般的です。しかしオフライン環境では、RSAT関連の機能をWindowsの「機能の追加」から簡単に導入できません。そのため手動コピーが必要になりますが、クライアントOSの仕様によっては「ActiveDirectory」フォルダーを置くだけではうまく動かない場合があります。そうしたケースでは、オフライン用のRSATインストーラーやCABファイルを用意する手段も検討しましょう。

実運用で役立つポイント

実際の運用では、単にモジュールを配置してImport-Moduleを実行するだけでなく、以下の追加ポイントを押さえておくと後々のトラブルを回避しやすくなります。

運用先サーバーの機能や役割を確認する

ドメイン コントローラー(DC)やメンバーサーバー、クライアントPCなど、どの役割のOSにActive Directory PowerShellモジュールを導入しようとしているかを明確にしましょう。特にドメイン コントローラーはすでにモジュールが入っていることが多いですが、追加で同様のモジュールを別のフォルダーに入れてバージョンが競合するケースもあります。

バックアップを取得する

オフライン環境であっても、何か問題が発生した場合にすぐに元の状態に戻せるよう、レジストリやファイル システムのバックアップをとる習慣を持っておくと安心です。モジュールフォルダーのACLやファイルの整合性を変更する際には特に注意が必要です。

モジュールのバージョン管理

Active Directory PowerShellモジュールにもバージョン違いが存在します。Windows Server 2012 R2と2019、2022では細かい更新が入っていることがあります。複数台のサーバーで同じスクリプトを実行する予定がある場合は、同一バージョンのモジュールで揃えると不整合が起きにくくなります。

将来的なオンライン接続の可能性も検討する

今はオフライン環境であっても、将来的にネットワークの構成変更やセキュリティ ポリシーの緩和によりオンライン接続が可能になるケースもあります。その際にモジュールが二重管理になる恐れがあるので、導入時に記録を残しておくと後日トラブルシューティングが楽になります。

オフライン インストールの代替アプローチ

手動コピー以外にも、若干手間はかかりますが以下のような代替手段を検討することもできます。

DISMによる機能追加 (サーバーOS向け)

Windows Serverの場合、オフラインで「Install-WindowsFeature -Name RSAT-AD-PowerShell -Source <ソース指定>」のようにソースを指定する方法もあります。この際、Windows ServerのインストールメディアISOをマウントして、インストール ファイルが存在するフォルダーを指定すれば、オフラインでも機能を追加できます。

RSATのオフライン インストーラー (クライアントOS向け)

Windows 10/11のRSATツールには、オフラインで導入可能なCABファイルやMSUファイルなどが配布されている場合があります(特に以前のバージョンのWindows 10向け)。それを入手しておき、DISMコマンドでクライアントOSにインストールするという方法も検討できます。

表で見る主な導入方法と必要条件

以下は、代表的な導入方法と、その際に必要となる前提条件やインターネット接続の要否をまとめたものです。オフライン環境で導入する場合は、自分の運用環境がどこに当てはまるかをチェックしてみてください。

導入方法必要条件インターネット必要性メリットデメリット
手動コピー(本記事で紹介)ソース元のサーバーやクライアントにモジュール一式があること不要シンプル、必要ファイルだけでOKバージョン管理がやや手間
DISM (Install-WindowsFeature)対応サーバーOS、インストールメディアなど不要 (ISOイメージがあればOK)公式の手段なので安定手順がやや複雑
RSATオフライン インストーラー (Windows 10/11)事前にCAB/MSUファイルを入手する不要 (ファイルさえ入手済みなら)一括でRSATツールを導入OSバージョンに対応ファイルが必要
オンライン「Install-WindowsFeature」インターネット接続必要一番手軽かつ最新バージョン取得可能オフライン環境では使えない

まとめ

オフライン環境でもActive Directory PowerShellモジュールを導入する方法は決して難しくありません。ポイントは以下の3つです。

  1. モジュール フォルダーを丸ごと取得する
  2. オフライン側のPowerShell モジュールパスに正しくコピーする
  3. Import-Moduleでエラーが出たらバージョンやアクセス権を確認する

また、オフライン環境での作業はどうしてもトラブルシューティングが手間取るため、万全を期してファイルのバックアップやバージョン管理を徹底することが重要です。今後のサーバー移行やクライアント導入時の手間を減らすためにも、是非本記事の内容を参考に、最適な方法でActive Directory PowerShellモジュールを導入してみてください。

コメント

コメントする