Just looking for the relevant documentation. An example is not necessary, but would be appreciated.
We have a situation where we are having to create 100s of virt
NOT TESTED (from an old code base and written by a former contractor of mine)
using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
using System.IO;
namespace Common.DirectoryServices
{
public class IISManager
{
private string _webSiteID;
public string WebSiteID
{
get { return _webSiteID; }
set { _webSiteID = value; }
}
private string _strServerName;
public string ServerName
{
get
{
return _strServerName;
}
set
{
_strServerName = value;
}
}
private string _strVDirName;
public string VDirName
{
get
{
return _strVDirName;
}
set
{
_strVDirName = value;
}
}
private string _strPhysicalPath;
public string PhysicalPath
{
get
{
return _strPhysicalPath;
}
set
{
_strPhysicalPath = value;
}
}
private VDirectoryType _directoryType;
public VDirectoryType DirectoryType
{
get
{
return _directoryType;
}
set
{
_directoryType = value;
}
}
public enum VDirectoryType
{
FTP_DIR, WEB_IIS_DIR
};
public string CreateVDir()
{
System.DirectoryServices.DirectoryEntry oDE;
System.DirectoryServices.DirectoryEntries oDC;
System.DirectoryServices.DirectoryEntry oVirDir;
//try
// {
//check whether to create FTP or Web IIS Virtual Directory
if (this.DirectoryType == VDirectoryType.WEB_IIS_DIR)
{
oDE = new DirectoryEntry("IIS://" +
this._strServerName + "/W3SVC/" + _webSiteID + "/Root");
}
else
{
oDE = new DirectoryEntry("IIS://" +
this._strServerName + "/MSFTPSVC/1/Root");
}
//Get Default Web Site
oDC = oDE.Children;
//Add row
oVirDir = oDC.Add(this._strVDirName,
oDE.SchemaClassName.ToString());
//Commit changes for Schema class File
oVirDir.CommitChanges();
//Create physical path if it does not exists
if (!Directory.Exists(this._strPhysicalPath))
{
Directory.CreateDirectory(this._strPhysicalPath);
}
//Set virtual directory to physical path
oVirDir.Properties["Path"].Value = this._strPhysicalPath;
//Set read access
oVirDir.Properties["AccessRead"][0] = true;
//Create Application for IIS Application (as for ASP.NET)
if (this.DirectoryType == VDirectoryType.WEB_IIS_DIR)
{
oVirDir.Invoke("AppCreate", true);
oVirDir.Properties["AppFriendlyName"][0] = this._strVDirName;
}
//Save all the changes
oVirDir.CommitChanges();
return null;
// }
//catch (Exception exc)
//{
// return exc.Message.ToString();
//}
}
}
}
Evidently you can also do this via PowerShell scripting:
$objIIS = new-object System.DirectoryServices.DirectoryEntry("IIS://localhost/W3SVC/1/Root")
$children = $objIIS.psbase.children
$vDir = $children.add("NewFolder",$objIIS.psbase.SchemaClassName)
$vDir.psbase.CommitChanges()
$vDir.Path = "C:\Documents and Settings\blah\Desktop\new"
$vDir.defaultdoc = "Default.htm"
$vDir.psbase.CommitChanges()
Here is the documentation: MSDN - Using IIS Programmatic Administration
The WIX installer tool creates a way to manage this - you would define them as a part of the installation build instructions. It make some work to get all of the project configured but after that maintenance should be a breeze... Here is an excerpt from the Tutorial on creating the Virtual Directory entries...
The WiX toolset has additional libraries that allow the installer to perform additional tasks like creating a web directory in IIS. To use these extensions, all you have to do is to link against the appropriate WiX library. The linker will include the necessary helper DLLs into the installation package automatically.
First, we have to create the web site with the files belonging to it:
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='InstallDir' Name='Acme'>
<Component Id='default.phpComponent' Guid='YOURGUID-5314-4689-83CA-9DB5C04D5742'>
<File Id='default.htmFile' Name='default.htm' LongName='default.htm' KeyPath='yes' DiskId='1' Source='default.htm' />
</Component>
</Directory>
</Directory>The next step is to create the virtual directory:
<Component Id='TestWebVirtualDirComponent' Guid='YOURGUID-6304-410E-A808-E3585379EADB'>
<WebVirtualDir Id='TestWebVirtualDir' Alias='Test' Directory='InstallDir' WebSite='DefaultWebSite'>
<WebApplication Id='TestWebApplication' Name='Test' />
</WebVirtualDir>
</Component>
</Directory>Finally, create an entry to reference the web site:
<WebSite Id='DefaultWebSite' Description='Default Web Site'>
<WebAddress Id='AllUnassigned' Port='80' />
</WebSite>
It is easier to do it with vbscript too..
' This code creates a virtual directory in the default Web Site
' ---------------------------------------------------------------
' From the book "Windows Server Cookbook" by Robbie Allen
' ISBN: 0-596-00633-0
' ---------------------------------------------------------------
' ------ SCRIPT CONFIGURATION ------
strComputer = "rallen-w2k3"
strVdirName = "<VdirName>" 'e.g. employees
strVdirPath = "<Path>" 'e.g. D:\resumes
' ------ END CONFIGURATION ---------
set objIIS = GetObject("IIS://" & strComputer & "/W3SVC/1")
set objWebSite = objIIS.GetObject("IISWebVirtualDir","Root")
set objVdir = objWebSite.Create("IISWebVirtualDir",strVdirName)
objVdir.AccessRead = True
objVdir.Path = strVdirPath
objVdir.SetInfo
WScript.Echo "Successfully created virtual directory: " & objVdir.Name