Taking advantage of operating system features, IIS introduces a set of programming interfaces using Windows Management Instrumentation (WMI) that provide more powerful and flexible ways to administer your web sites. The IIS WMI provider offers a better alternative to ADSI for managing the metabase and COM admininstrative objects, such as the IIS Admin objects, programmatically.
The Windows Management Instrumentation (WMI) is used by Windows 2000, management tools and scripts to manage systems composed of numerous devices, resources and applications. WMI technology enables these systems and components to be represented using the Common Information Model (CIM). CIM can model anything in the managed environment regardless of data source location by providing a consistent and unified view of all types of logical and physical objects. Managed objects are represented using object-oriented constructs such as classes. These classes include properties that describe data and methods that describe behavior. In addition to data modeling, WMI offers a powerful set of base services that include query-based information retrieval and event notification. Access to these services and to the management data is made possible with a single Component Object Model (COM) programming interface. Complete WMI documentation is available from MSDN and titled "WMI Reference."
The IIS Windows Management Instrumentation (WMI) provider acts as an intermediary between WMI and one or more managed objects, such as the metabase. When a management application, such as a script, sends a request for data or invokes a method, the provider accesses the managed object and returns the requested information to the application.
The IIS WMI provider is designed to provide equal functionality as the IIS ADSI provider for metabase configuration and IIS management tasks. The provider accesses IIS metabase data through COM object interfaces, allowing your application to access the metabase schema and methods on objects instantiated from the metabase. The WMI provider establishes relationships between objects, allowing you to tie together the various objects and all the objects contained within it, like a virtual directory and all the directories and virtual directories contained within.
The WMI provider reads a metabase as a database of records, where each record is represented as an instance of a class. Each instance can then be queried to determine content, state, associations, properties, and the like. Management tasks can then be performed using the instance of the class.
The WMI schema is congruent with the IIS ADSI Admin Objects schema, differing only in object and data models. The two offer equivalent functionality. Therefore, a script can be written for a similar task using both the ADSI and WMI models. The effects on the metabase are equivalent.
Note For this beta release, default property values in ADSI schema are not supported. The WMI provider returns NULL.
The following table compares the architecture and features of the IIS ADSI provider with those of the IIS WMI provider.
| Issue | ADSI provider | WMI provider |
|---|---|---|
Query capabilities |
No |
Yes, by querying the returned |
Object model |
COM |
COM |
Extensible schema |
Yes |
No, but yes for future versions |
Access routes |
Scripts and programs |
Scripts and programs |
Association of related data |
Properties are related |
An association in WMI |
Container object |
Yes. |
Associations are used to approximately |
Samples that illustrate the benefits of the WMI provider follow. These are offered only as examples and are not intended for production use.
An administrator must create a web site that includes a set of virtual directories. The following script illustrates how it is possible create a web site and all related directories by using the WMI provider for IIS.
var
strWMIProvider = "winmgmts:root/MicrosoftIISv2";
var providerObj;
// Get WMI provider
instance
var providerObj =
GetObject(strWMIProvider);
var classObj,
serverObj;
classObj =
providerObj.get("IIs_WebServerSetting");
serverObj =
classObj.SpawnInstance_();
serverObj.Name =
siteName;
serverObj.ServerComment =
"WMIsite2";
serverObj.ServerBindings = new
Array(":8080:");
serverObj.AuthAnonymous =
true;
serverObj.Put_();
// Creating the virtual
dir
var vdirClass,
vdirObj;
vdirClass =
providerObj.get("IIs_WebVirtualDirSetting");
vdirObj =
vdirClass.SpawnInstance_();
vdirObj.Name = siteName +
"/ROOT";
vdirObj.Path =
"C:\\inetpub\\wmisite";
vdirObj.AccessRead =
true;
vdirObj.AccessScript =
true;
vdirObj.AccessWrite =
false;
//vdirObj.AccessExecute =
false;
//vdirObj.AccessSource =
false;
vdirObj.Put_();
//create the actual fs
directory
var fsObj = new
ActiveXObject("Scripting.FileSystemObject");
fsObj.CreateFolder("c:\inetpub\wmisite");
// Starts the new
server
serverObj =
providerObj.get("IIs_WebServer='" + siteName + "'");
serverObj.Start();
An ISP administrator wants to remove a site but doesn’t know the site’s ID. The administrator knows only the Server’s Comment. Using ADSI, the administrator would have to write code to enumerate everything beneath w3svc, then look for the site that contains the desired ServerComment. With the WMI provider, it is an easy query and Delete_(). The following script illustrates how it is possible to remove a user and all related material by using the IIS WMI provider.
var providerObj = GetObject("winmgmts:root/MicrosoftIISv2");
var siteObj = providerObj.ExecQuery("select * from IIS_WebServerSetting where ServerComment = 'WMIsite2'");
var e = new Enumerator(siteObj);
for (; !e.atEnd(); e.moveNext()) { e.item().Delete_();
}
An administrator must discover all virtual directories that have write permissions enabled. Using the IIS WMI provider, by executing a quick query on the IIS WMI provider, searching for all Iis_WebVirtualDirSetting objects to see if their AccessWrite property is set. The administrator could then cycle through the array of instances returned and perform whatever action needed, such as setting the AccessWrite bit to FALSE. The following Jscript illustrates how it is possible to query for this data and to set the AccessWrite bit accordingly.
var objProvider = var objProvider =
GetObject("winmgmts://ericdetest/root/MicrosoftIISv2");
var arrVdirs = objProvider.ExecQuery("select
* from IIs_WebVirtualDirSetting where AccessWrite =
true");
if (arrVdirs.Count > 0)
{
WScript.Echo("These virtual directories have write permission set to
true:");
for (e = new
Enumerator(arrVdirs); ! e.atEnd(); e.moveNext()) {
WScript.Echo(e.item().Name);
e.item().AccessWrite = "FALSE";
e.item().Put_();
}
}
else {
WScript.Echo("No
vdirs have write permission set");
}
© 1997-2001 Microsoft Corporation. All rights reserved.