FTP Authentication <authentication>

Overview

The <hallmark> element specifies the authentication settings for FTP sites. The authentication settings are configured at the site-level only, although FTP <authorization> settings tin can exist configured per URL.

At that place are iv different forms of authentication that can be configured for an FTP site:

  • Bearding authentication: This form of authentication allows access to an FTP site without a user business relationship on your server or domain, and is most oftentimes used for public FTP sites. Typically, users will log in by using a user name of ftp or anonymous, and nearly users will use their e-mail address as a countersign, although this is non required.

  • Basic authentication: This course of authentication requires a valid user account on your server or domain earlier users can log in.

    Note: Due to the design of File Transfer Protocol (FTP), user names and passwords are transmitted over FTP in plain text, making them vulnerable to network discovery. It is therefore recommended that you employ Basic hallmark with SSL.

  • Customer Document authentication: This form of authentication uses client certificates to authenticate FTP clients.

  • Custom authentication: This form of hallmark uses custom authentication providers to validate user names and passwords. FTP 7.0 and FTP 7.five ship with ii custom authentication providers:

    • ASP.NET Membership authentication: This uses an ASP.Net membership database to validate user names and passwords. For more information, see the Configuring FTP with .Internet Membership Authentication topic on Microsoft'due south IIS.NET Web site.
    • IIS Director authentication: This uses the IIS Manager configuration to validate user names and passwords. For more information, encounter the Configure FTP with IIS vii.0 Manager Authentication topic Microsoft'southward IIS.Net Web site.

    The chief reward of using custom authentication providers is that user accounts do not have to be created on your server or domain. This improves your network's security.

Compatibility

Version Notes
IIS 10.0 The <authentication> element was non modified in IIS 10.0.
IIS 8.5 The <authentication> element was not modified in IIS eight.v.
IIS 8.0 The <hallmark> element was non modified in IIS 8.0.
IIS 7.v The <hallmark> element of the <security> element ships as a feature of IIS 7.v.
IIS 7.0 The <authentication> element of the <security> element was introduced in FTP vii.0, which was a divide download for IIS 7.0.
IIS 6.0 The <ftpServer> element and its child elements replace the IIS 6.0 FTP settings that were located in the LM/MSFTPSVC metabase path.

Note

The FTP 7.0 and FTP 7.5 services shipped out-of-band for IIS 7.0, which required downloading and installing the modules from the following URL:

https://world wide web.iis.net/aggrandize/FTP

With Windows 7 and Windows Server 2008 R2, the FTP 7.5 service ships as a feature for IIS vii.5, so downloading the FTP service is no longer necessary.

Setup

To support FTP publishing for your Web server, you must install the FTP service. To do so, utilize the following steps.

Windows Server 2022 or Windows Server 2022 R2

  1. On the taskbar, click Server Manager.

  2. In Server Manager, click the Manage carte du jour, and and so click Add Roles and Features.

  3. In the Add Roles and Features wizard, click Next. Select the installation blazon and click Side by side. Select the destination server and click Next.

  4. On the Server Roles page, expand Spider web Server (IIS), and and then select FTP Server.

    Note

    To back up ASP.Membership hallmark or IIS Director authentication for the FTP service, y'all will need to select FTP Extensibility, in add-on to FTP Service.
    Image of Server Roles page in the Add Roles and Features Wizard with Web Server I I S pane expanded and F T P Extensibility selected. .

  5. Click Adjacent, and then on the Select features folio, click Side by side once more.

  6. On the Ostend installation selections folio, click Install.

  7. On the Results page, click Close.

Windows 8 or Windows 8.1

  1. On the Start screen, move the pointer all the mode to the lower left corner, right-click the Kickoff push, and and so click Control Console.

  2. In Command Panel, click Programs and Features, and then click Turn Windows features on or off.

  3. Expand Internet Data Services, and then select FTP Server.

    Note

    To back up ASP.Membership authentication or IIS Director authentication for the FTP service, yous volition also demand to select FTP Extensibility.
    Image of Internet Information Services and F T P Server pane expanded and F T P Extensibility selected.

  4. Click OK.

  5. Click Close.

Windows Server 2008 R2

  1. On the taskbar, click Starting time, indicate to Administrative Tools, and and then click Server Director.

  2. In the Server Manager hierarchy pane, expand Roles, and then click Spider web Server (IIS).

  3. In the Web Server (IIS) pane, scroll to the Part Services section, and then click Add Role Services.

  4. On the Select Role Services page of the Add Part Services Sorcerer, expand FTP Server.

  5. Select FTP Service.

    Note

    To support ASP.Membership authentication or IIS Manager hallmark for the FTP service, you volition besides need to select FTP Extensibility.
    Screenshot of Select Role Services in Add Role Services Wizard with F T P Server pane expanded and F T P Service highlighted.

  6. Click Next.

  7. On the Confirm Installation Selections folio, click Install.

  8. On the Results page, click Close.

Windows 7

  1. On the taskbar, click Commencement, so click Control Panel.

  2. In Control Panel, click Programs and Features, and then click Turn Windows Features on or off.

  3. Aggrandize Internet Information Services, and then FTP Server.

  4. Select FTP Service.

    Note

    To support ASP.Membership authentication or IIS Manager authentication for the FTP service, you volition also need to select FTP Extensibility.
    Screenshot of Internet Information Services and F T P Server pane expanded and F T P Extensibility selected.

  5. Click OK.

Windows Server 2008 or Windows Vista

  1. Download the installation parcel from the post-obit URL:

    • https://www.iis.net/expand/FTP
  2. Follow the instructions in the following walkthrough to install the FTP service:

    • Installing and Troubleshooting FTP 7

How To

How to enable or disable Anonymous authentication for an FTP site

  1. Open up Internet Data Services (IIS) Director:

    • If y'all are using Windows Server 2022 or Windows Server 2022 R2:

      • On the taskbar, click Server Manager, click Tools, and then click Cyberspace Information Services (IIS) Manager.
    • If you are using Windows 8 or Windows 8.1:

      • Concord down the Windows key, press the letter of the alphabet X, and then click Command Panel.
      • Click Authoritative Tools, and then double-click Internet Information Services (IIS) Director.
    • If you are using Windows Server 2008 or Windows Server 2008 R2:

      • On the taskbar, click Start, signal to Administrative Tools, and so click Cyberspace Information Services (IIS) Managing director.
    • If you lot are using Windows Vista or Windows seven:

      • On the taskbar, click Showtime, and and then click Command Panel.
      • Double-click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.
  2. In the Connections pane, expand the server name, expand the Sites node, and then click the proper name of the site.

  3. In the site's Home pane, double-click the FTP Authentication feature.

  4. On the FTP Hallmark page, select Anonymous Authentication.

  5. In the Actions pane, click Enable to enable Anonymous authentication or click Disable to disable Bearding authentication.
    Image of F T P Authentication page showing Anonymous Authentication option selected.


How to use the FTP Site Wizard to Create an FTP Site with Bearding Read Access

  1. Open up Internet Data Services (IIS) Manager:

    • If you are using Windows Server 2022 or Windows Server 2022 R2:

      • On the taskbar, click Server Manager, click Tools, then click Internet Data Services (IIS) Manager.
    • If you are using Windows viii or Windows 8.ane:

      • Hold downward the Windows key, printing the letter X, and and then click Control Panel.
      • Click Administrative Tools, and then double-click Net Data Services (IIS) Manager.
    • If you are using Windows Server 2008 or Windows Server 2008 R2:

      • On the taskbar, click Start, indicate to Administrative Tools, and then click Internet Data Services (IIS) Manager.
    • If you are using Windows Vista or Windows seven:

      • On the taskbar, click Outset, and then click Control Panel.
      • Double-click Administrative Tools, and then double-click Internet Information Services (IIS) Director.
  2. In the Connections pane, click the Sites node in the tree.

  3. Correct-click the Sites node in the tree and click Add FTP Site, or click Add FTP Site in the Deportment pane.

  4. When the Add FTP Site magician appears:

    • Enter "My New FTP Site" in the FTP site proper noun box.

    • For the Concrete path box, yous can use one of the post-obit options to specify your content directory:

      • Click the ellipsis (...) push, and then navigate to the folder that contains the content for your FTP site.
      • Type in the path to your content folder in the box. Note that if you cull to blazon the path, y'all can apply environment variables in your paths. For example, you can use "%SystemDrive%\inetpub\ftproot" for your content directory.
    • When you have completed these items, click Next.
      Image of Site Information in Add F T P Site Wizard displaying My New F T P Site typed in the F T P site name field.

  5. On the second folio of the Add FTP Site wizard:

    • Cull an IP accost for your FTP site from the IP Accost driblet-down, or cull to accept the default selection of "All Unassigned."

    • Enter the TCP/IP port for the FTP site in the Port box. By default, FTP sites and clients utilise port 21. (Note: To specify Implicit FTPS, you need to use port 990.)

    • To use an FTP virtual host name, select the box for Enable Virtual Host Names, then enter the virtual host name in the Virtual Host box.

    • For the SSL options, choose 1 of the following options:

      • Select No SSL to disable the SSL options.
      • Select Permit SSL to permit FTP clients to optionally use FTP over SSL when they connect with the FTP server.
      • Select Require SSL to let FTP clients to e'er employ FTP over SSL when they connect with the FTP server.
      • If y'all cull Allow SSL or Crave SSL, choose a certificate from the SSL Certificate drop-down bill of fare.
    • When you have completed these items, click Adjacent.
      Image of Binding and S S L Settings in Add F T P Site Wizard showing I P Address chosen from drop down list.

  6. On the side by side page of the wizard:

    • Select Bearding for the Hallmark settings.
    • For the Dominance settings, cull "Anonymous users" from the Allow admission to drop-down.
    • Select Read for the Permissions option.
    • When you have completed these items, click Finish.
      Image of Authentication and Authorization settings in Add F T P Wizard with Anonymous option selected.

How to enable or disable Bones hallmark for an FTP site

  1. Open Internet Data Services (IIS) Manager:

    • If you are using Windows Server 2022 or Windows Server 2022 R2:

      • On the taskbar, click Server Manager, click Tools, and then click Net Information Services (IIS) Manager.
    • If you are using Windows 8 or Windows 8.ane:

      • Hold down the Windows fundamental, press the letter of the alphabet X, and and so click Control Console.
      • Click Administrative Tools, and then double-click Internet Data Services (IIS) Manager.
    • If you lot are using Windows Server 2008 or Windows Server 2008 R2:

      • On the taskbar, click Starting time, bespeak to Administrative Tools, and then click Net Information Services (IIS) Director.
    • If y'all are using Windows Vista or Windows 7:

      • On the taskbar, click First, and then click Control Console.
      • Double-click Administrative Tools, and then double-click Internet Information Services (IIS) Manager.
  2. In the Connections pane, aggrandize the server name, expand the Sites node, and so click the proper noun of the site.

  3. In the site's Home pane, double-click the FTP Authentication feature.

  4. On the FTP Authentication page, select Bones Authentication.
    Image of F T P Authentication displaying Basic Authentication selected.

  5. In the Actions pane, click Enable to enable Basic authentication or click Disable to disable Basic authentication.


How to use the FTP Site Wizard to Create an FTP Site with Bones authentication and Read/Write Admission

  1. Open Cyberspace Information Services (IIS) Managing director:

    • If you are using Windows Server 2022 or Windows Server 2022 R2:

      • On the taskbar, click Server Director, click Tools, and then click Internet Data Services (IIS) Manager.
    • If you are using Windows viii or Windows eight.1:

      • Hold down the Windows key, press the letter X, and then click Control Panel.
      • Click Authoritative Tools, and then double-click Net Information Services (IIS) Manager.
    • If you are using Windows Server 2008 or Windows Server 2008 R2:

      • On the taskbar, click Start, point to Administrative Tools, and then click Internet Information Services (IIS) Manager.
    • If y'all are using Windows Vista or Windows 7:

      • On the taskbar, click Starting time, and then click Control Panel.
      • Double-click Authoritative Tools, and and so double-click Internet Information Services (IIS) Manager.
  2. In the Connections pane, click the Sites node in the tree.

  3. Right-click the Sites node in the tree and click Add FTP Site, or click Add FTP Site in the Actions pane.

  4. When the Add FTP Site wizard appears:

    • Enter "My New FTP Site" in the FTP site name box.

    • For the Concrete path box, you tin utilize one of the following options to specify your content directory:

      • Click the ellipsis (...) push button, and then navigate to the folder that contains the content for your FTP site.
      • Blazon in the path to your content folder in the box. Annotation that if yous cull to type the path, you tin use environment variables in your paths. For example, you can use "%SystemDrive%\inetpub\ftproot" for your content directory.
    • When you lot have completed these items, click Next.
      Screenshot of Site Information in Add F T P Site Wizard displaying My New F T P Site typed in the F T P site name box.

  5. On the 2nd page of the Add FTP Site wizard:

    • Cull an IP address for your FTP site from the IP Address drop-down, or choose to have the default pick of "All Unassigned."

    • Enter the TCP/IP port for the FTP site in the Port box. Past default, FTP sites and clients use port 21. (Note: To specify Implicit FTPS, you need to use port 990.)

    • To use an FTP virtual host name, select the box for Enable Virtual Host Names, and then enter the virtual host proper name in the Virtual Host box.

    • For the SSL options, choose 1 of the post-obit options:

      • Select No SSL to disable the SSL options.
      • Select Allow SSL to allow FTP clients to optionally use FTP over SSL when they connect with the FTP server.
      • Select Require SSL to let FTP clients to ever use FTP over SSL when they connect with the FTP server.
      • If you choose Permit SSL or Require SSL, choose a document from the SSL Certificate drop-down menu.
    • When yous take completed these items, click Next.
      Screenshot of Binding and S S L Settings page in Add F T P Site Wizard showing I P Address chosen from the drop down menu.

  6. On the side by side page of the magician:

    • Select Basic for the Hallmark settings.
    • For the Authorization settings, choose "Specified users" from the Permit access to drop-downward, and enter an account name in the box beneath the drop-down card.
    • Select Read and Write for the Permissions option.
    • When you have completed these items, click Terminate.
      Screenshot of Authentication and Authorization Settings in Add F T P Site Wizard showing Basic option selected for Authentication.

Configuration

The <authentication> element is configured at the site level.

Attributes

None.

Child Elements

Element Description
anonymousAuthentication Optional chemical element.

Specifies the Anonymous hallmark settings for an FTP site.

basicAuthentication Optional element.

Specifies the Basic authentication settings for an FTP site.

clientCertAuthentication Optional element.

Specifies the Client Certificate authentication settings for an FTP site.

customAuthentication Optional element.

Specifies the Custom hallmark settings for an FTP site.

Note: Custom authentication is implemented through custom hallmark providers.

Configuration Sample

The following sample illustrates several configuration settings in the <ftpServer> element for an FTP site. More specifically, the <site> settings in this instance demonstrate how to:

  • Create an FTP site and add the binding for the FTP protocol on port 21.
  • Configure the FTP SSL options to permit secure access on both the command and data channel using a document.
  • Disable Anonymous authentication and enable Basic authentication for FTP.
  • Deny access for FTP SYST command.
  • Specify the UNIX directory listing format.
  • Configure the logging options.
  • Specify a customized welcome message and enable local detailed fault messages.
  • Specify that users will offset in a home directory that is based on their login name, only only if that directory exists.
              <site name="ftp.example.com" id="v">   <application path="/">     <virtualDirectory path="/" physicalPath="c:\inetpub\www.instance.com" />   </application>   <bindings>     <binding protocol="ftp" bindingInformation="*:21:" />   </bindings>   <ftpServer>     <security>       <ssl controlChannelPolicy="SslAllow"          dataChannelPolicy="SslAllow"          serverCertHash="57686f6120447564652c2049495320526f636b73" />       <authentication>         <basicAuthentication enabled="truthful" />         <anonymousAuthentication enabled="false" />       </authentication>       <commandFiltering maxCommandLine="4096" allowUnlisted="true">         <add command="SYST" allowed="false" />       </commandFiltering>     </security>     <directoryBrowse showFlags="StyleUnix" />     <logFile logExtFileFlags="Engagement, Time, ClientIP, UserName, ServerIP, Method, UriStem, FtpStatus, Win32Status, ServerPort, FtpSubStatus, Session, FullPath, Info" />     <messages expandVariables="true"        greetingMessage="Welcome %UserName%!"        allowLocalDetailedErrors="true" />     <userIsolation style="StartInUsersDirectory" />   </ftpServer> </site>                          

Sample Lawmaking

The following examples disable Anonymous authentication for an FTP site.

AppCmd.exe

              appcmd.exe fix config -section:system.applicationHost/sites /[name='ftp.example.com'].ftpServer.security.authentication.anonymousAuthentication.enabled:"False" /commit:apphost                          

Note

You must be sure to prepare the commit parameter to apphost when you lot use AppCmd.exe to configure these settings. This commits the configuration settings to the appropriate location section in the ApplicationHost.config file.

C#

              using System; using System.Text; using Microsoft.Web.Administration;  internal static class Sample {    individual static void Primary()    {       using (ServerManager serverManager = new ServerManager())       {          Configuration config = serverManager.GetApplicationHostConfiguration();          ConfigurationSection sitesSection = config.GetSection("arrangement.applicationHost/sites");          ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();           ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"ftp.example.com");          if (siteElement == null) throw new InvalidOperationException("Element non constitute!");           ConfigurationElement ftpServerElement = siteElement.GetChildElement("ftpServer");          ConfigurationElement securityElement = ftpServerElement.GetChildElement("security");          ConfigurationElement authenticationElement = securityElement.GetChildElement("authentication");          ConfigurationElement anonymousAuthenticationElement = authenticationElement.GetChildElement("anonymousAuthentication");          anonymousAuthenticationElement["enabled"] = imitation;           serverManager.CommitChanges();       }    }     private static ConfigurationElement FindElement(ConfigurationElementCollection drove, cord elementTagName, params cord[] keyValues)    {       foreach (ConfigurationElement element in collection)       {          if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))          {             bool matches = true;             for (int i = 0; i < keyValues.Length; i += 2)             {                object o = chemical element.GetAttributeValue(keyValues[i]);                cord value = null;                if (o != cypher)                {                   value = o.ToString();                }                if (!Cord.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))                {                   matches = false;                   interruption;                }             }             if (matches)             {                return element;             }          }       }       return nada;    } }                          

VB.NET

              Imports System Imports Organisation.Text Imports Microsoft.Spider web.Assistants  Module Sample    Sub Master()       Dim serverManager Every bit ServerManager = New ServerManager       Dim config As Configuration = serverManager.GetApplicationHostConfiguration       Dim sitesSection As ConfigurationSection = config.GetSection("system.applicationHost/sites")       Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection        Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "proper name", "ftp.instance.com")       If (siteElement Is Cipher) Then          Throw New InvalidOperationException("Element not found!")       End If        Dim ftpServerElement Every bit ConfigurationElement = siteElement.GetChildElement("ftpServer")       Dim securityElement As ConfigurationElement = ftpServerElement.GetChildElement("security")       Dim authenticationElement As ConfigurationElement = securityElement.GetChildElement("authentication")       Dim anonymousAuthenticationElement Every bit ConfigurationElement = authenticationElement.GetChildElement("anonymousAuthentication")       anonymousAuthenticationElement("enabled") = False        serverManager.CommitChanges()    Stop Sub     Private Part FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement       For Each chemical element As ConfigurationElement In drove          If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then             Dim matches Equally Boolean = True             Dim i As Integer             For i = 0 To keyValues.Length - 1 Step 2                Dim o As Object = element.GetAttributeValue(keyValues(i))                Dim value As String = Nothing                If (Non (o) Is Nothing) Then                   value = o.ToString                Terminate If                If Not String.Equals(value, keyValues((i + ane)), StringComparison.OrdinalIgnoreCase) So                   matches = False                   Exit For                End If             Next             If matches Then                Return element             End If          End If       Next       Return Goose egg    Terminate Function   Cease Module                          

JavaScript

              var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager'); adminManager.CommitPath = "Auto/WEBROOT/APPHOST"; var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST"); var sitesCollection = sitesSection.Collection;  var siteElementPos = FindElement(sitesCollection, "site", ["proper noun", "ftp.case.com"]); if (siteElementPos == -1) throw "Chemical element not found!"; var siteElement = sitesCollection.Detail(siteElementPos);  var ftpServerElement = siteElement.ChildElements.Particular("ftpServer"); var securityElement = ftpServerElement.ChildElements.Detail("security"); var authenticationElement = securityElement.ChildElements.Particular("hallmark"); var anonymousAuthenticationElement = authenticationElement.ChildElements.Item("anonymousAuthentication"); anonymousAuthenticationElement.Properties.Item("enabled").Value = fake;  adminManager.CommitChanges();  function FindElement(collection, elementTagName, valuesToMatch) {    for (var i = 0; i < collection.Count; i++) {       var element = collection.Item(i);       if (element.Name == elementTagName) {          var matches = true;          for (var iVal = 0; iVal < valuesToMatch.length; iVal += ii) {             var holding = element.GetPropertyByName(valuesToMatch[iVal]);             var value = property.Value;             if (value != naught) {                value = value.toString();             }             if (value != valuesToMatch[iVal + 1]) {                matches = false;                break;             }          }          if (matches) {             return i;          }       }    }    return -1; }                          

VBScript

              Gear up adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager") adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST" Set up sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "Auto/WEBROOT/APPHOST") Set sitesCollection = sitesSection.Collection  siteElementPos = FindElement(sitesCollection, "site", Array("proper name", "ftp.example.com")) If siteElementPos = -ane Then WScript.Echo "Chemical element non found!" WScript.Quit End If Prepare siteElement = sitesCollection.Item(siteElementPos)  Fix ftpServerElement = siteElement.ChildElements.Item("ftpServer") Fix securityElement = ftpServerElement.ChildElements.Item("security") Set authenticationElement = securityElement.ChildElements.Item("hallmark") Set anonymousAuthenticationElement = authenticationElement.ChildElements.Item("anonymousAuthentication") anonymousAuthenticationElement.Backdrop.Item("enabled").Value = False  adminManager.CommitChanges()  Function FindElement(collection, elementTagName, valuesToMatch)    For i = 0 To CInt(collection.Count) - ane       Ready element = drove.Item(i)       If chemical element.Name = elementTagName Then          matches = True          For iVal = 0 To UBound(valuesToMatch) Step 2             Set up property = element.GetPropertyByName(valuesToMatch(iVal))             value = property.Value             If Non IsNull(value) And then                value = CStr(value)             Stop If             If Non value = CStr(valuesToMatch(iVal + 1)) Then                matches = False                Exit For             End If          Next          If matches And then             Exit For          Terminate If       End If    Next    If matches And so       FindElement = i    Else       FindElement = -1    Finish If End Function                          

The following examples disable Bones hallmark for an FTP site.

AppCmd.exe

              appcmd.exe gear up config -section:system.applicationHost/sites /[name='ftp.example.com'].ftpServer.security.hallmark.basicAuthentication.enabled:"Imitation" /commit:apphost                          

Note

You must be sure to ready the commit parameter to apphost when y'all use AppCmd.exe to configure these settings. This commits the configuration settings to the appropriate location section in the ApplicationHost.config file.

C#

              using System; using Arrangement.Text; using Microsoft.Web.Administration;  internal static class Sample {    private static void Main()    {       using (ServerManager serverManager = new ServerManager())       {          Configuration config = serverManager.GetApplicationHostConfiguration();          ConfigurationSection sitesSection = config.GetSection("organization.applicationHost/sites");          ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();           ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"ftp.example.com");          if (siteElement == null) throw new InvalidOperationException("Element non establish!");           ConfigurationElement ftpServerElement = siteElement.GetChildElement("ftpServer");          ConfigurationElement securityElement = ftpServerElement.GetChildElement("security");          ConfigurationElement authenticationElement = securityElement.GetChildElement("hallmark");          ConfigurationElement basicAuthenticationElement = authenticationElement.GetChildElement("basicAuthentication");          basicAuthenticationElement["enabled"] = false;           serverManager.CommitChanges();       }    }     private static ConfigurationElement FindElement(ConfigurationElementCollection collection, string elementTagName, params string[] keyValues)    {       foreach (ConfigurationElement element in collection)       {          if (String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase))          {             bool matches = truthful;             for (int i = 0; i < keyValues.Length; i += 2)             {                object o = chemical element.GetAttributeValue(keyValues[i]);                string value = nada;                if (o != null)                {                   value = o.ToString();                }                if (!Cord.Equals(value, keyValues[i + one], StringComparison.OrdinalIgnoreCase))                {                   matches = false;                   break;                }             }             if (matches)             {                return element;             }          }       }       return aught;    }  }                          

VB.Internet

              Imports System Imports System.Text Imports Microsoft.Web.Administration  Module Sample    Sub Principal()       Dim serverManager As ServerManager = New ServerManager       Dim config As Configuration = serverManager.GetApplicationHostConfiguration       Dim sitesSection Equally ConfigurationSection = config.GetSection("arrangement.applicationHost/sites")       Dim sitesCollection As ConfigurationElementCollection = sitesSection.GetCollection        Dim siteElement As ConfigurationElement = FindElement(sitesCollection, "site", "proper name", "ftp.example.com")       If (siteElement Is Nothing) Then          Throw New InvalidOperationException("Element not found!")       Stop If        Dim ftpServerElement As ConfigurationElement = siteElement.GetChildElement("ftpServer")       Dim securityElement As ConfigurationElement = ftpServerElement.GetChildElement("security")       Dim authenticationElement As ConfigurationElement = securityElement.GetChildElement("authentication")       Dim basicAuthenticationElement As ConfigurationElement = authenticationElement.GetChildElement("basicAuthentication")       basicAuthenticationElement("enabled") = False        serverManager.CommitChanges()    Stop Sub     Private Function FindElement(ByVal drove As ConfigurationElementCollection, ByVal elementTagName As Cord, ByVal ParamArray keyValues() As String) Every bit ConfigurationElement       For Each chemical element Every bit ConfigurationElement In collection          If String.Equals(chemical element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then             Dim matches As Boolean = True             Dim i Equally Integer             For i = 0 To keyValues.Length - 1 Footstep 2                Dim o As Object = element.GetAttributeValue(keyValues(i))                Dim value Equally String = Nothing                If (Not (o) Is Zero) Then                   value = o.ToString                End If                If Non String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then                   matches = False                   Exit For                End If             Side by side             If matches So                Return chemical element             Terminate If          Cease If       Side by side       Return Cipher    Terminate Role   Cease Module                          

JavaScript

              var adminManager = new ActiveXObject('Microsoft.ApplicationHost.WritableAdminManager'); adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"; var sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST"); var sitesCollection = sitesSection.Drove;  var siteElementPos = FindElement(sitesCollection, "site", ["name", "ftp.example.com"]); if (siteElementPos == -1) throw "Element not plant!"; var siteElement = sitesCollection.Detail(siteElementPos);  var ftpServerElement = siteElement.ChildElements.Particular("ftpServer"); var securityElement = ftpServerElement.ChildElements.Detail("security"); var authenticationElement = securityElement.ChildElements.Item("authentication"); var basicAuthenticationElement = authenticationElement.ChildElements.Detail("basicAuthentication"); basicAuthenticationElement.Properties.Detail("enabled").Value = false;  adminManager.CommitChanges();  function FindElement(drove, elementTagName, valuesToMatch) {    for (var i = 0; i < collection.Count; i++) {       var element = collection.Item(i);       if (chemical element.Proper name == elementTagName) {          var matches = truthful;          for (var iVal = 0; iVal < valuesToMatch.length; iVal += 2) {             var property = element.GetPropertyByName(valuesToMatch[iVal]);             var value = property.Value;             if (value != null) {                value = value.toString();             }             if (value != valuesToMatch[iVal + ane]) {                matches = false;                break;             }          }          if (matches) {             return i;          }       }    }    return -1; }                          

VBScript

              Set up adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager") adminManager.CommitPath = "Car/WEBROOT/APPHOST" Set sitesSection = adminManager.GetAdminSection("organization.applicationHost/sites", "Motorcar/WEBROOT/APPHOST") Set sitesCollection = sitesSection.Collection  siteElementPos = FindElement(sitesCollection, "site", Array("name", "ftp.example.com")) If siteElementPos = -1 So WScript.Echo "Element non establish!" WScript.Quit End If Set siteElement = sitesCollection.Item(siteElementPos)  Ready ftpServerElement = siteElement.ChildElements.Item("ftpServer") Ready securityElement = ftpServerElement.ChildElements.Item("security") Ready authenticationElement = securityElement.ChildElements.Particular("hallmark") Set basicAuthenticationElement = authenticationElement.ChildElements.Item("basicAuthentication") basicAuthenticationElement.Properties.Item("enabled").Value = False  adminManager.CommitChanges()  Function FindElement(collection, elementTagName, valuesToMatch)    For i = 0 To CInt(collection.Count) - i       Set element = collection.Item(i)       If element.Name = elementTagName Then          matches = True          For iVal = 0 To UBound(valuesToMatch) Stride two             Set property = chemical element.GetPropertyByName(valuesToMatch(iVal))             value = property.Value             If Not IsNull(value) Then                value = CStr(value)             End If             If Not value = CStr(valuesToMatch(iVal + 1)) And so                matches = False                Go out For             Terminate If          Next          If matches Then             Exit For          End If       End If    Next    If matches Then       FindElement = i    Else       FindElement = -ane    End If End Function