PowerShellを使用してActive Directoryスキーマの変更を報告する方法

Active Directory(AD)スキーマの変更は運用上の問題を引き起こす可能性があります。一般的に、スキーマは変更されるべきではありません。ただし、Microsoft Exchange ServerなどのActive Directoryに依存する新しいアプリケーションがインストールされた場合、そのアプリケーションをサポートするためにスキーマを更新する必要があります。ADの整合性を保護するためには、スキーマへの承認済みの変更のみが行われていることを確認する価値があります。

PowerShellを使用して、ADスキーマの変更のレポートを簡単に生成することができます。ただし、この記事のコードを実行する前に、Windows Server Active Directory用のPowerShellモジュールをインストールしてください。Active Directory PowerShellモジュールはデフォルトでドメインコントローラ(DC)にインストールされていますが、日常の管理タスクはドメインに参加したWindows 10 PCから実行することがベストプラクティスです。

広告

Windows Server Active Directory PowerShellモジュールをインストールする

AD PowerShellモジュールはActive DirectoryドメインサービスのRemote Server Administration Tools(RSAT)の一部です。RSAT ADツールをインストールするには、ローカル管理者特権を持つPowerShellプロンプトを開いて、次のコマンドを実行します:

Add-WindowsCapability -Name Rsat.ActiveDirectory.DS-LDS.Tools~~~~0.0.1.0 –Online

ツールがインストールされたら、昇格されたPowerShellウィンドウを閉じることができます。この記事の残りのコマンドを実行するには、Active Directoryの「ドメインユーザー」グループのメンバーであるアカウントでWindows 10にログインしている必要があります。

Windows 10でRSATをインストールする詳細については、PetriのWindows 10にリモートサーバ管理ツールをインストールする方法を参照してください。

PowerShellを使用してADスキーマの変更を報告する

Get-ADObjectコマンドレットを使用すると、スキーマの変更を表示できます。しかし、最初にGet-ADObjectに検索ベース、すなわち検索するディレクトリの領域を提供する必要があります。スキーマを検索したいので、ディレクトリのスキーマの名前付けコンテキストを知る必要があります。幸いなことに、Get-ADRootDSEコマンドレットを使用して簡単に取得できます。Get-ADRootDSEをパラメータなしで実行すると、ディレクトリのschemaNamingContextのパスが出力されます。

広告

Image # Expand
How to Report Active Directory Schema Changes Using PowerShell (Image Credit: Russell Smith)

 

PowerShellを使用すると、schemaNamingContextのようなプロパティを、以下に示すようにドットと括弧を使用して簡単に抽出できます。

((Get-ADRootDSE).schemanamingcontext)

上記のコードをGet-ADObjectコマンドレットの-SearchBaseパラメータの値として使用できます。しかし、他にもいくつかのパラメータを追加する必要があります。-SearchScopeはOneLevelに設定され、これは-SearchBaseパラメータで提供されたパスの直下の子オブジェクトを検索します。ワイルドカード(*)は、-Filterパラメータの値として使用され、すべてを返します。

最後に、-Propertiesパラメータを使用して、出力の一部として返すプロパティを指定します。ご覧の通り、objectClass, name, whenChanged,そしてwhenCreatedプロパティを引き出すつもりです。

広告

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemanamingcontext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated

返されたデータを日付ごとにグループ化したいです。そのために、時間情報を含まないwhencreated日付が必要です。Select-Objectコマンドレットと計算されたプロパティを使用して、必要なデータを正しい形式で持つ新しいオブジェクトを作成できます。以下の拡張されたコマンドで、Get-ADObjectによって生成されたオブジェクトをSelect-Objectコマンドレットにパイプ処理しました。@は、’Event’というラベルを持ち、短い形式でwhenCreatedプロパティから日付のみを返す式を持つ計算されたプロパティを示します。

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}}

次に、Select-Objectによって作成されたオブジェクトをSort-Objectにパイプ処理します。そして、whenCreatedプロパティでオブジェクトデータを並べ替えます。

$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated

最後に、オブジェクトをFormat-Tableコマンドレットにパイプ処理します。これにより、Select-Objectコマンドレットを使用して作成したEventでグループ化されたテーブル形式でプロパティが表示されます。

$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize
Image # Expand
How to Report Active Directory Schema Changes Using PowerShell (Image Credit: Russell Smith)
$schema = Get-ADObject -SearchBase ((Get-ADRootDSE).schemaNamingContext)-SearchScope OneLevel -Filter * -Properties objectClass, name, whenChanged, whenCreated | Select-Object objectClass, name, whenChanged, whenCreated, @{name='Event';expression={($_.whenCreated).Date.ToShortDateString()}} | Sort-Object -Property whenCreated

$schema | Format-Table objectClass, name, whenChanged, whenCreated -groupby Event -autosize

すべてのコードを一緒に実行すると、スキーマの変更がコマンドプロンプトウィンドウにリストされます。私のディレクトリにはExchange Serverがインストールされているため、スキーマに多くの変更が見られます。

 

Source:
https://petri.com/how-to-report-active-directory-schema-changes-using-powershell/