クリックして評価とフィードバックをお寄せください
TechNet
TechNet ライブラリ
Windows
Windows Server
Windows Server 2003
Windows Server 2003: 運用
グループ ポリシー管理コンソール (GPMC) のスクリプト処理

GPO 管理タスクの自動化

グループ ポリシー管理コンソール (GPMC) のスクリプト インターフェイスを使用して、多くの共通する GPO 管理タスクを自動化する方法について説明します。このドキュメントは、「Windows & .NET Magazine」(英語) の 2003 年 8 月号に掲載されたものです。

トピック

はじめに はじめに
GPMC スクリプトの記述方法 GPMC スクリプトの記述方法
GPO のアクセス許可を取得する GPO のアクセス許可を取得する
RsoP レポートの取得 RsoP レポートの取得
GPMC が提供する新しい可能性 GPMC が提供する新しい可能性

はじめに

Microsoft は、4 月にグループ ポリシー管理コンソール (GPMC) をリリースしました。この GPMC では、Microsoft 管理コンソール (MMC) をベースにしたユーザー インターフェイスを使用して、Windows Server 2003 および Windows 2000 のグループ ポリシーの管理を簡単に行うことができます。GPMCは Windows 2000 のネイティブ ツールに比べてグループ ポリシー オブジェクト (GPO) の管理機能が飛躍的に進歩しました。Windows 2000 のネイティブ ツールでは、スクリプトを記述して GPO を管理することは困難でしたが、GPMC では、スクリプト インターフェイスを備えているので、多くの共通する GPO 管理タスクを自動化できます。このスクリプト インターフェイスを使用して、グループ ポリシー環境を管理できるので、GPO 設定のレポート作成、GPO の作成およびコピー、リンクしていない GPO の検索などを行うことができます。Microsoft は、スクリプトで処理する多くの共通するタスクを扱う GPMC のスクリプトを提供しています。また、ユーザー自身がスクリプトを作成して、カスタムの GPO 管理タスクを実行することもできます。

GPMC は、Windows 2000 ドメイン ベースのグループ ポリシーを管理できますが、実行できるのは、Windows Server 2003 または Windows XP Professional のコンピュータ上だけです。(GPMC の必要条件および機能の詳細については、http://www.microsoft.com/japan/windowsserver2003/gpmc/default.mspx をご確認ください。)GPMC は、Microsoft ダウンロード センター (http://www.microsoft.com/downloads/details.aspx?displaylang=ja&FamilyID=0a6d4c24-8cbd-4b35-9272-dd3cbfc81887) からダウンロードできます。GPMC をインストールすると、"Scripts" という名前のフォルダが作成され、あらかじめ用意されているすべての GPMC スクリプトが格納されます。Windows Server 2003 クライアントまたは Windows XP クライアントでは、このフォルダが %programfiles%\gpmc ディレクトリに作成されます。主要な管理スクリプトには、.wsf の拡張子が付けられています。この拡張子は WSH (Windows Script Host) に関連するファイル形式であることを表します。.wsf 拡張子のスクリプトは、XML 形式のファイルです。VBScript や JScript で記述された他のスクリプトを呼び出すので、1 つのスクリプトで VBScript スクリプト エンジンと JScript スクリプト エンジンの両方の機能を利用できます。このドキュメントのスクリプトでは、.wsf ファイルを使用せず、VBScript のみを使用します。

GPMC インターフェイスは、%programfiles%\gpmc ディレクトリにある gpmgmt.dll に実装されています。GPMC の機能の自動化に加えて、GPO の管理も目的として Microsoft はこれらのインターフェイスを作成しました。したがって、GPO の移行時にマッピング テーブルを作成するなどの GPMC 操作をスクリプトに記述することも、GPO を検索、修正することもできます。ただし、GPMC インターフェイスからは、GPO のポリシー設定を参照したり、構成したりできません。たとえば、GPO の [[スタート] メニューから [ファイル名を指定して実行] を削除する] 管理用テンプレートのポリシーを有効にするスクリプトは作成できません。この制約があることは残念ですが、GPMC インターフェイスを使用すると、相当の自動化を実現でき、従来より便利になります。それでは、まず、GPMC スクリプトの記述方法について説明し、次に、GPO のアクセス許可を取得する、ポリシーの結果セット (RSoP) のレポートを取得するなど、さまざまな管理タスクを GPMC オブジェクトを使用して実行する方法について説明します。

GPMC スクリプトの記述方法

GPMC のスクリプトはすべて基本的な手順に従って同じように記述するので、習得は難しくありません。WSH 環境で使用する新しいオブジェクトと同様に、まず使用するオブジェクトのインスタンスを作成する (インスタンス化) 必要があります。すべての GPMC スクリプトでも、GPM オブジェクトを最初にインスタンス化する必要があります。この GPM オブジェクトは、GPMC オブジェクト モデルのルート オブジェクトです。他の GPMC インターフェイスにアクセスするために使用し、このインターフェイスからさらに別の機能にアクセスします。たとえば、まず GPM オブジェクトから IGPMDomain インターフェイスにアクセスし、次に AD (Active Directory) ドメインへの参照を作成します。AD ドメインへの参照を作成したら、IGPMDomain の GetGPO メソッドを呼び出して IGPMGPO インターフェイスにアクセスし、管理したい GPO への参照を作成します。この参照から、IGPMGPO インターフェイスは管理対象の GPO のメソッドとプロパティを取得します。GPMC オブジェクトの詳細については、Scripts フォルダにあるヘルプ ファイル (gpmc.chm) を参照してください。オブジェクト モデルの詳細については、Microsoft Developer Network (MSDN) の「Group Policy Management Console Reference」(http://msdn.microsoft.com/library/aa814150.aspx) (英語) を参照してください。

よく使う別のインターフェイスに、IGPMConstants があります。これは GPMC スクリプトの中でも特殊なインターフェイスで、GPMC スクリプトでよく使う GPO に関連する定数を表すプロパティ セットを提供します。たとえば、GPO を編集するユーザーを管理するために、アクセス許可のセットが必要だと仮定します。以前は、ファイル システムと AD ACL を複雑に組み合わせて編集アクセス許可を付与しましたが、この方法ではたくさんのコードを記述することになります。Microsoft が提供する IGPMConstants インターフェイスを使用するとこの作業が簡単に行えます。IGPMConstants インターフェイスの PermGPOEdit プロパティを呼び出し、該当するアクセス許可を付与するだけです。IGPMConstants インターフェイスにアクセスするには、GPM オブジェクトの GetConstants メソッドを使用します。GetConstants メソッドを使用して GPMConstants オブジェクトへの参照を取得すると、スクリプト内ですべての GPMConstants プロパティが使用できます。

GPM オブジェクトと GPMConstants オブジェクトを作成するためのコードをリスト 1 に示します。その下の GetGPOPerms.vbs と RSoPLogging.vbs のサンプル スクリプトもご覧ください。このコードの作成方法を示しています。これら 2 つのスクリプトは一般的ではありませんが、Microsoft が提供する GPMC スクリプトを複製するより、ここに示すスクリプトを使用することをお勧めします。

リスト 1 GPM オブジェクトと GPMConstants オブジェクトを作成するコード

BEGIN COMMENT  
' Code that creates the GPM object.  
END COMMENT  
Set GPMC = CreateObject("GPMgmt.GPM")  
BEGIN COMMENT  
' Code that creates the GPMConstants object.  
END COMMENT  
Set Constants = GPMC.GetConstants()  

GPO のアクセス許可を取得する

リスト 2 のスクリプトの GetGPOPerms.vbs に、いくつかの GPMC オブジェクトを使用してテスト ドメインの GPO に対するアクセス許可を一覧表示する方法を示します。GetGPOPerms.vbs の冒頭で、GPM オブジェクトと GPMConstants オブジェクトをインスタンス化します。次に、スクリプトが、IGPMDomain にアクセスします。IGPMDomain は、ドメインの情報を取得したり、ドメインの GPO を管理したりする使いやすいインターフェイスです。IGPMDomain にアクセスするには、GPM オブジェクトの GetDomain メソッドを使用します。このメソッドは GPMDomain オブジェクトを返します。リスト 2 の Callout A にあるように、GetDomain メソッドは 3 つの引数を取ります。1 つ目の引数は、管理対象の GPO を保存するドメインの名前です。ドメイン名は、そのドメインの DNS 名である必要があります (例 : mycompany.net)。Callout A で示すように、この引数の値はスクリプトにハード コーディングできますが、スクリプトを実行するときにユーザーがコマンド ラインにドメイン名を入力する方法もあります。

2 つ目の引数は、ドメインに接続するために使用するドメイン コントローラ (DC) を指定します。NULL 文字列 ("") は、優先する DC がないことを示します。つまり、GetDomain メソッドが PDC エミュレータを使用します。3 つ目の引数は、接続する DC を検出するために使用するオプションを指定します。オプションは 3 つあります。GPM_USE_ANYDC (使用可能なすべて DC を使用する)、GPM_USE_PDC (PDC エミュレータ DC を使用する)、GPM_DONOTUSE_W2KDC (Windows Server 2003 を稼動する DC を使用する) です。Callout A で示すように、GetGPOPerms.vbs で GPMConstants オブジェクトの UseAnyDC プロパティを使用して、GPM_USE_ANYDC オプションを指定しています。

ドメインに接続したら、これからが本番です。リスト 2 の Callout B のコードにあるように、GPMDomain オブジェクトの GetGPO メソッドを使用して、GPMGPO オブジェクトを取得します。このオブジェクトはアクセス許可を一覧する GPO を表します。GetGPOPerms.vbs を使用するには、ドメイン名の "mycompany.net" を AD ドメインの DNS 名に置き換える必要があります。GetGPO メソッドの引数は、GPO の GUID (グローバル識別子) であり、GPO のフレンドリ名でないことに注意してください。このスクリプトには、すべての AD ドメインを表す既定のドメイン ポリシーの GUID を含めました。この GUID は、どの AD ドメインでも同じです。

スクリプトのユーザーが GPO の必要な情報をコマンド ラインから入力する場合は、キー入力しにくい GUID を入力せずに、GPO のフレンドリ名を入力する方法があります。この方法では、GetGPObyName 関数を使用して、対応する GUID を取得できます。この関数は、Microsoft が提供する Scripts フォルダの lib_commongpmcfunctions.js にあります。GetGPObyName は IGPMSearchCriteria インターフェイスを使用して、ドメイン内のすべての GPO を検索します。入力したフレンドリ名と一致すると、GUID が返され、スクリプトが GetGPO に渡します。ただし、GetGPObyName は JScript 関数です。VBScript を使用する場合は、VBScript バージョンの GetGPObyName を記述するか、IADsTools COM オブジェクトの GetGPOs メソッド、GPOName メソッドまたは GPOGuid メソッドを使用してください。IADsTools COM オブジェクトは Windows 2000 サポート ツールに含まれています。これらのメソッドの詳細については、2003 年 4 月の InstantDoc ID 38286「Scripting with IADsTools」(http://www.winnetmag.com) (英語) を参照してください。

次に、スクリプトで GPMGPO オブジェクトの GetSecurityInfo メソッドを使用して、GPO のアクセス許可を取得します。GetSecurityInfo メソッドは、GPMSecurityInfo コレクション オブジェクトへの参照を返します。この参照は、GPOSec 変数に割り当てられます。GPMSecurityInfo オブジェクトは GPO に割り当てるアクセス許可を含みます。スクリプトはこのコレクションを通じて繰り返し、GPMSecurityInfo オブジェクトの Count プロパティを使用してこのコレクション内のアクセス許可エントリ数を割り出して、返します。

各アクセス許可エントリを取得するには、スクリプトで GPMSecurityInfo オブジェクトの Item プロパティを使用します。GPMPermission オブジェクトへの参照が返されます。スクリプトでこの参照を Ace 変数に割り当てると、GPMPermission オブジェクトの Trustee プロパティを使用して、GPMTrustee オブジェクトにアクセスします。GPMTrustee の TrusteeName プロパティを呼び出し、現在のアクセス許可を割り当てているユーザー名またはグループ名を決定し、その名前に PrincipalName 変数を割り当てます。

リスト 2 の Callout C のコードでは、Select Case ステートメントを使用して、そのユーザー名またはグループ名に割り当てるセキュリティ権利を決定します。1 つの GPO は 5 つのセキュリティ権利を持ちます。IGPMConstants インターフェイスで定義します。Select Case ステートメントは、これら 5 つのセキュリティ権利を含みます。

Select Case ステートメントの 1 行目に VBScript ランタイム エンジンで Ace.Permission 値 (例 : GPMPermission オブジェクトの Permission プロパティ値) と各ケースを比較するように記述します。Permission プロパティ値が 5 つのセキュリティ権利のどれかと一致したら、その Perm 変数に対するアクセス許可に関するコメントをスクリプトに記述します。最後に、WSH の WScript.Echo コマンドを使用して、ユーザー名、グループ名およびアクセス許可をコンソール画面に出力します。

リスト 2 GetGPOPerms.vbs

BEGIN COMMENT  
' Create the GPM and GPMConstants objects,  
then connect to the domain.  
END COMMENT  
Set GPMC = CreateObject("GPMgmt.GPM")  
Set Constants = GPMC.GetConstants()  
‘ BEGIN CALLOUT A  
Set GPMCDomain = GPMC.GetDomain("mycompany.net", "",  
Constants.UseAnyDC)  
‘ END CALLOUT A  
‘ BEGIN CALLOUT B  
BEGIN COMMENT  
' Create an object for the GPO for which you want to list the  
permissions.  
END COMMENT  
Set MyGPO = GPMCDomain.GetGPO  
("{31B2F340-016D-11D2-945F-00C04FB984F9}")  
BEGIN COMMENT  
' Get the permissions.  
END COMMENT  
Set GPOSec = MyGPO.GetSecurityInfo()  
‘ END CALLOUT B  
For indx=1 to GPOSec.Count  
BEGIN COMMENT  
   ' Set the ACE to the Ace variable.  
END COMMENT  
   Set Ace = GPOSec.Item(indx)  
BEGIN COMMENT  
   ' Find out the username or group name for the ACE.  
END COMMENT  
   Set UsrorGrp= Ace.Trustee  
   PrincipalName=UsrorGrp.TrusteeName  
‘ BEGIN CALLOUT C  
BEGIN COMMENT  
   ' Find out which permission the user or group has.  
END COMMENT  
   Select Case Ace.Permission  
      Case Constants.permGPOApply  
         Perm="Read and Apply Group Policy"  
      Case Constants.permGPOEdit  
         Perm="Edit Group Policy"  
      Case Constants.permGPOEditSecurityAndDelete  
         Perm="Edit Group Policy, Modify Security and Delete  
Group Policy"  
      Case Constants.permGPORead  
         Perm="Read Group Policy"  
      Case Constants.permGPOCustom  
         Perm="Custom Permission"  
   End Select  
‘ END CALLOUT C  
   WScript.Echo "The User or Group: " & PrincipalName & _  
      " has the following permission: " & Perm  
Next  

RsoP レポートの取得

GPMC は、グループ ポリシー ロギングとグループ ポリシー プランニングの 2 つの使いやすい機能を備えています。GPMC インターフェイスを使用して、プログラムからグループ ポリシーのロギング セッションとプランニング セッションの結果を取得できます。たとえば、グループ ポリシーのロギング セッションから結果を取得するには、RSoP Windows Management Instrumentation (WMI) プロバイダを使用する必要があります。

RSoPLogging.vbs (リスト 3 を参照) に、RSoP インターフェイスを使用し、ロギング クエリを実行して HTML 形式のロギング レポートを作成する方法の例を示します。このスクリプトの初めの数行で GPM オブジェクトと GPMConstants オブジェクトを作成します。次に、GPM オブジェクトの GetRSOP メソッドを使用して、GPMRSOP オブジェクトのインスタンスを作成します。このメソッドは 3 つのパラメータを取ります。1 つ目のパラメータは、RSoP モードを指定します。リスト 3 の Callout A のコードでは、RSoP モードを指定する一例として、GPMConstants オブジェクトの RSOPModeLogging プロパティを使用しています。RSoP プランニング セッションを実行する場合は、RSOPModePlanning プロパティを使用してください。2 つ目のパラメータで、WMI 名前空間にパスを指定します。このパスには、前の RSoP データがあります。この場合、前のデータがないので、パラメータは Null 文字列になります。3 つ目のパラメータは常に 0 です。

GPMRSOP オブジェクトのインスタンスを作成したら、GPMRSOP オブジェクトの LoggingComputer プロパティと LoggingUser プロパティの 2 つを RSoP ロギング クエリに設定します。LoggingComputer プロパティでは、ターゲット コンピュータの名前を指定します。この場合は、myworkstation です。LoggingUser プロパティでは、ターゲット ユーザーの名前を指定します。この場合は、Darren です。次に、ロギング クエリを実行するために、GPMRSOP オブジェクトの CreateQueryResults メソッドを呼び出します。このメソッドはパラメータを持ちません。

最後に、GPMRSOP オブジェクトの GenerateReportToFile メソッドを呼び出します。このメソッドは 2 つのパラメータを持ちます。1 つ目のパラメータで、生成されるレポートの種類 (HTML または XML) を指定します。このスクリプトでは、Constants オブジェクトの ReportHTML プロパティを使用して、HTML 形式のレポートを指定します。XML 形式のレポートを指定する場合は、ReportHTML プロパティではなく ReportXML プロパティを使用します。2 つ目のパラメータに、レポートのパス名を指定します。

GenerateReportToFile メソッドは、GPMResult オブジェクトへの参照を返します。GPMResult オブジェクトは Result と Status の 2 つのプロパティを持ちます。これらのプロパティで、レポートが実行を正常に終了したか、正常に実行できなかったかを判断します。ただし、RSoPLogging.vbs では、レポートが最後に作成されるので、レポートが正常に実行されたかどうかを知る必要はありません (レポートが作成されると、スクリプトの実行が終了したことになります)。したがって、スクリプトには GPMResult の参照が格納されません。

リスト 3 RSoPLogging.vbs

BEGIN COMMENT  
' Create the GPM and GPMConstants objects.  
END COMMENT  
Set GPMC = CreateObject("GPMgmt.GPM")  
Set Constants = GPMC.GetConstants()  
‘ BEGIN CALLOUT A  
BEGIN COMMENT  
' Create a reference to an RSoP object.  
END COMMENT  
Set RSOP= GPMC.GetRSOP(Constants.RSOPModeLogging,"",0)  
BEGIN COMMENT  
‘ END CALLOUT A  
' Set the RSoP logging session’s properties.  
END COMMENT  
RSOP.LoggingComputer="myworkstation"  
RSOP.LoggingUser="darren"  
BEGIN COMMENT  
' Execute the RSoP logging query and send  
the results to an HTML file.  
END COMMENT  
RSOP.CreateQueryResults()  
RSOP.GenerateReportToFile Constants.ReportHTML,  
"c:\reports\myrsop.html"  

GPMC が提供する新しい可能性

GPMC インターフェイスは、柔軟性を持つ強力な新機能であり、Microsoft が提供するドキュメントも充実しています。このインターフェイスを使用すると、グループ ポリシー インフラストラクチャを Windows 2000 ネイティブ ツールより簡単に制御できます。カスタム スクリプトを作成して、Microsoft が提供するスクリプトと組み合わせて使用すると、ほとんどの GPO 管理タスクを自動化できます。

© 2003 Windows & .NET Magazine. All rights reserved.

「Windows & .NET Magazine」のサンプル版を https://secure.pentontech.com/nt/windows/index.cfm?promocode=fs&Code=WI201XTN から入手してください。

「Windows & .NET Magazine」(英語) は、Windows IT 技術者向けのニュースや情報が掲載されたニュースレターです。電子メールを使い、無料で配信いたします。購読のお申し込みは、http://windowsitpro.com/news/ でお受けしております。

ここに記載されている情報は、ユーザーに役立つことを目的として提供されています。ただし、このドキュメントに記載されている情報を使用するにあたっては、ユーザーが責任を負うものとします。すべての情報は "現状のまま" 提供され、その正確さ、完全性、特定目的への適合性、権利侵害の有無については、明示的にも暗黙的にもなんら保証するものではありません。また、ここに引用されているサード パーティ製品と情報はマイクロソフトの作成によるものではなく、マイクロソフトが推奨、サポート、保証するものでもありません。マイクロソフトでは、本文書の情報を基に行った操作による直接的、間接的、偶発的、派生的、あるいは特殊な損害に対して、本文中に損害の可能性が記載されている場合も含めて、一切の責任を負いません。記載されている製品の価格は、将来予告なしに変更されることがあります。


コミュニティ コンテンツ   コミュニティ コンテンツとは
新しいコンテンツの追加 RSS  注釈
Processing
© 2009 Microsoft Corporation. All rights reserved. 使用条件 | 商標 | プライバシー
Page view tracker