SWbemServices オブジェクト
SWbemServices オブジェクトのメソッドを使用して、ローカル ホストまたはリモート ホスト上の名前空間に対して操作を実行できます。 このオブジェクトは、VBScript CreateObject 呼び出しでは作成できません。
メンバー
SWbemDateTime オブジェクトには、次の種類のメンバーがあります。
メソッド
SWbemDateTime オブジェクトには、次のメソッドがあります。
メソッド | 説明 |
---|---|
AssociatorsOf | 1 つ以上の関連付けクラスを使用して、指定したリソースに関連付けられている管理対象リソースのインスタンスを取得します。 元のエンドポイントのオブジェクト パスを指定すると、AssociatorsOf は、反対側のエンドポイントにある管理対象リソースを返します。
AssociatorsOf メソッドは、"ASSOCIATORS OF" WQL クエリが実行するのと同じ関数を実行します。 |
AssociatorsOfAsync | 指定したオブジェクトに関連付けられているオブジェクト (クラスまたはインスタンス) のコレクションを非同期的に返します。 |
削除 | 管理対象リソース (または CIM リポジトリからのクラス定義) のインスタンスを削除します。 |
DeleteAsync | オブジェクト パスで指定されたクラスまたはインスタンスを非同期的に削除します。 |
ExecMethod | 管理対象リソース クラス定義によって定義されたメソッドを実行する別の方法を提供します。 主に、スクリプト言語で out パラメーターがサポートされていない状況で使用されます。 たとえば、JScript では out パラメーターはサポートされていません。 |
ExecMethodAsync | メソッド プロバイダーによってエクスポートされたメソッドを非同期的に実行します。 |
ExecNotificationQuery | イベント サブスクリプション クエリを実行してイベントを受信します。 イベント サブスクリプション クエリは、監視するマネージド環境への変更を定義するクエリです。 変更が発生すると、WMI インフラストラクチャは、呼び出し元のスクリプトへの変更を説明するイベントを配信します。 |
ExecNotificationQueryAsync | クエリを非同期的に実行してイベントを受信します。 |
ExecQuery | クエリを実行して、WMI 管理対象リソース (またはクラス定義) のインスタンスのコレクションを取得します。
ExecQuery を使用すると、ExecQuery に渡されるクエリで定義した条件に一致する、フィルター処理されたインスタンスのコレクションを取得できます。 |
ExecQueryAsync | クエリを非同期的に実行してオブジェクトを取得します。 |
Get | オブジェクト パスに基づいて、管理対象リソース (またはクラス定義) の 1 つのインスタンスを取得します。 |
GetAsync | オブジェクト パスに基づいて、クラス定義またはインスタンスであるオブジェクトを非同期的に取得します。 |
InstancesOf | クラス名に基づいて、管理対象リソースのすべてのインスタンスを取得します。 既定では、InstancesOf はディープ取得を実行します。 つまり、InstancesOf は、メソッドに渡されたクラス名で識別されるリソースのインスタンスを取得し、ターゲット クラスのサブクラスである (下に定義されている) すべてのリソースのすべてのインスタンスも取得します。 |
InstancesOfAsync | ユーザー指定の選択条件に従って、指定したクラスのインスタンスを非同期的に返します。 |
ReferencesTo | 指定したリソースを参照するすべての関連付けを返します。
ReferencesTo を理解する最善の方法は、それを AssociatorsOf メソッドと比較することです。
AssociationorsOf は、関連付けの反対側にある動的リソースを返します。
ReferencesTo は関連付け自体を返します。
ReferencesTo メソッドは、"REFERENCES OF" WQL クエリが実行するのと同じ関数を実行します。 |
ReferencesToAsync | 特定のクラスまたはインスタンスを参照するすべての関連付けクラスまたはインスタンスのコレクションを非同期的に返します。 |
SubclassesOf | CIM リポジトリから、指定したクラスのすべてのサブクラスを取得します。 |
SubclassesOfAsync | 指定したクラスのサブクラスのコレクションを非同期的に返します。 |
プロパティ
SWbemDateTime オブジェクトには、次のプロパティがあります。
プロパティ | アクセスの種類 | 説明 |
---|---|---|
Security_ |
読み取り専用 |
SWbemServices オブジェクトのセキュリティ設定を取得または設定するために使用します。 |
解説
メソッドは、同期モード、非同期モード、または半同期モードのいずれかで呼び出すことができます。 詳細については、「メソッドの呼び出し」を参照してください。
概要
SWbemServices は、2 つの主要な役割を果たします。 最初に、SWbemServices オブジェクトは、ターゲット コンピューター上の WMI 名前空間への認証された接続を表します。 次に、SWbemServices は、WMI 管理対象リソースの取得に使用する Automation オブジェクトです。 SWbemServices オブジェクトへの参照は、次の 2 つの方法のいずれかで取得できます。
これまでに示したほとんどの WMI スクリプトで示されているように、VBScript GetObject 関数を WMI モニカー "winmgmts:" と組み合わせて使用できます。 次の例は、WMI 接続の最も簡単な形式です。 この例では、ローカル コンピューターの既定の名前空間 (通常は "Root\CIMv2") に接続します。
Set objSWbemServices = GetObject("winmgmts:")
SWbemLocator オブジェクト ConnectServer メソッドを使用して、SWbemServices オブジェクトへの参照を取得することもできます。
SWbemServices オブジェクトへの参照を取得した後、オブジェクト参照を使用し、SWbemServices を使用して利用できる 18 個のメソッドのうち 1 つを呼び出します。 SWbemServices は、呼び出すメソッドに応じて、3 つの異なる WMI スクリプト ライブラリ オブジェクト (SWbemObjectSet、SWbemObject、または SWbemEventSource) のいずれかを返すことができます。 各メソッドが返すオブジェクトの種類を把握しておくと、スクリプトで実行する必要がある次の手順を決定するのに役立ちます。 たとえば、SWbemObjectSet を取得した場合、コレクション内の各 SWbemObject にアクセスするには、コレクションを列挙する必要があります。 SWbemObject を取得した場合は、最初にコレクションを列挙することなく、オブジェクトのメソッドとプロパティにすぐにアクセスできます。
動作モード
SWbemServices では、同期、非同期、半同期の 3 つの操作モードがサポートされています。
Synchronous。 同期モードでは、スクリプトは SWbemServices メソッドが完了するまでブロック (一時停止) されます。 スクリプトが待機するだけでなく、WMI が管理対象リソースのインスタンスを取得する場合は、データの最初のバイトが呼び出し元のスクリプトに返される前に、WMI がメモリ内に SWbemObjectSet 全体をビルドします。 これは、スクリプトのパフォーマンスと、スクリプトを実行しているコンピューターに悪影響を及ぼす可能性があります。 たとえば、Windows イベント ログから何千ものイベントを同期的に取得すると、時間がかかり、大量のメモリが使用される可能性があります。 これらの理由から、同期操作は、既定で同期される 3 つのメソッド (Delete、ExecMethod、Get) を除いて推奨されません。 これらのメソッドでは大きなデータ セットが返されないため、半同期操作は必要ありません。
[非同期] 。 非同期モードでは、スクリプトは 9 つの非同期メソッドのいずれかを呼び出し、すぐに戻ります。 つまり、非同期メソッドが呼び出されるとすぐに、スクリプトは次のコード行の実行を再開します。 非同期メソッドを使用するには、スクリプトで最初に SWbemSink オブジェクトと、イベント ハンドラーと呼ばれる特別なサブルーチンを作成する必要があります。 WMI は非同期操作を実行し、操作の完了時にイベント ハンドラー サブルーチンを呼び出してスクリプトに通知します。
半同期。 半同期モードは、同期と非同期の折衷案です。 半同期操作は同期操作よりもパフォーマンスが優れていますが、非同期操作を処理するために必要な追加の知識とスクリプト作成手順は必要ありません。 これは、ほとんどの WMI クエリの既定の操作の種類です。
半同期モードでは、スクリプトは 6 つのデータ取得メソッドのいずれかを呼び出し、すぐに戻ります。 スクリプトが実行を続けると、WMI はバックグラウンドで管理対象リソースを取得します。 リソースが取得されると、SWbemObjectSet 経由ですぐにスクリプトに戻ります。 コレクション全体がアセンブルされるのを待たずに、管理対象リソースへのアクセスを開始できます。
CIM_DataFile や Win32_NTLogEvent など、多数のインスタンス (1,000 を超える多くの意味) を持つ管理対象リソースを操作する場合は、半同期操作に注意が必要です。 注意点は、WMI が管理対象リソースのインスタンスを処理する方法の結果です。 管理対象リソースの各インスタンスについて、WMI は SWbemObject オブジェクトを作成してキャッシュします。 管理対象リソースに多数のインスタンスが存在する場合、インスタンスの取得によって使用可能なリソースが独占され、スクリプトとコンピューターの両方のパフォーマンスが低下するおそれがあります。
この問題を回避するために、wbemFlagForwardOnly フラグを使用して、半同期メソッド呼び出しを最適化できます。 wbemFlagForwardOnly フラグを wbemFlagReturnImmediately フラグ (既定の半同期フラグ) と組み合わせることで、WMI に転送専用の SWbemObjectSet を返すように指示します。これにより、大きなデータ セットのパフォーマンスの問題が解消されます。 ただし、wbemFlagForwardOnly フラグの使用にはコストを伴います。 転送専用の SWbemObjectSet は、1 回だけ列挙できます。 転送専用の SWbemObjectSet 内の各 SWbemObject にアクセスすると、インスタンスに割り当てられたメモリが解放されます。
Delete、ExecMethod、Get、および 9 つの非同期メソッドを除き、半同期が既定の推奨される操作モードです。
一般的に使用されるメソッド
システム管理スクリプトで最もよく使用されるメソッドは、InstancesOf、ExecQuery、Get、ExecNotificationQuery です。 InstancesOf はよく使用されますが、必ずしも情報を取得するための推奨される方法ではありません (ただし、間違いなく最も簡単な方法です)。
要件
要件 | 値 |
---|---|
サポートされている最小のクライアント |
Windows Vista |
サポートされている最小のサーバー |
Windows Server 2008 |
Header |
|
タイプ ライブラリ |
|
[DLL] |
|
CLSID |
CLSID_SWbemServices |
IID |
IID_ISWbemServices |