WMI, IIS, CIM and other cursewords
Finally, after hours of reading through mind-numbingly overcomplicated documentation about the incredible plural architectures for Windows system management (not that I wanted to know any of that, mind you) and their various benighted APIs and tools ...
I present, the answer, or at least the kernel of one:
ref: http://msdn2.microsoft.com/en-us/library/ms524913.aspx
I present, the answer, or at least the kernel of one:
// Make connections to WMI, to the IIS namespace on MyMachine, and to the Web service. var locatorObj = new ActiveXObject("WbemScripting.SWbemLocator"); var providerObj = locatorObj.ConnectServer("MyMachine", "root/MicrosoftIISv2"); var serviceObj = providerObj.Get("IIsWebService='W3SVC'"); // Build binding object, which is a required parameter of the CreateNewSite method. // Use the SpawnInstance WMI method since we are creating a new instance of an object. var Bindings = new Array(); Bindings[0] = providerObj.get("ServerBinding").SpawnInstance_(); Bindings[0].IP = ""; Bindings[0].Port = "8383"; Bindings[0].Hostname = ""; // Create the new Web site using the CreateNewSite method of the IIsWebService object. try { var strSiteObjPath; strSiteObjPath = serviceObj.CreateNewSite("MyNewSite", Bindings, "C:\\Inetpub\\Wwwroot"); } catch(e) { WScript.Echo("*** Error Creating Site: " + e + " " + e.Number + ", " + e.Description + " ***"); WScript.Quit(1); } // strSiteObjPath is in the format of IIsWebServer='W3SVC/1180970907' // To parse out the absolute path, W3SVC/1180970907, use the SWbemObjectPath WMI object. var objPath = new ActiveXObject("WbemScripting.SWbemObjectPath"); objPath.Path = strSiteObjPath; strSitePath = objPath.Keys.Item(""); // var some properties on the root virtual directory which was created by CreateNewSite. var vdirObj = providerObj.Get("IIsWebVirtualDirSetting='" + strSitePath + "/ROOT'"); vdirObj.AuthFlags = 5; // AuthNTLM + AuthAnonymous vdirObj.EnableDefaultDoc = true; vdirObj.DirBrowseFlags = 0x4000003E; // date, time, size, extension, longdate vdirObj.AccessFlags = 513; // read, script vdirObj.AppFriendlyName = "Root Application"; // Save the new settings to the metabase vdirObj.Put_(); // CreateNewSite does not start the server, so start it now. var serverObj = providerObj.Get(strSiteObjPath); serverObj.Start; WScript.Echo("A New site called MyNewSite was created with the path and unique site identification number of " + strSitePath);
ref: http://msdn2.microsoft.com/en-us/library/ms524913.aspx