Compartilhar via


Configurações no nível do site FTP <ftpServer>

Visão geral

O elemento <ftpServer> do elemento <site> especifica as configurações no nível do site para recursos FTP para sites FTP.

No IIS 6.0, as configurações do serviço FTP foram armazenadas em uma seção separada da metabase que não sites da Web. No IIS 7 e posteriores, as configurações de FTP são armazenadas no arquivo ApplicationHost.config dentro dos mesmos elementos <site> e <siteDefaults> que armazenam as configurações para sites da Web. Por isso, as configurações especificadas no elemento <ftpServer> não podem ser delegadas, nem podem ser especificadas dentro dos elementos <location>.

Observação

Configurações adicionais de FTP são armazenadas na seção <system.ftpServer> do arquivo ApplicationHost.config e essas configurações são especificadas nos elementos <location>.

Compatibilidade

Versão Observações
IIS 10.0 O elemento <ftpServer> não foi modificado no IIS 10.0.
IIS 8.5 O elemento <ftpServer> não foi modificado no IIS 8.5.
IIS 8.0 O elemento <ftpServer> não foi modificado no IIS 8.0.
IIS 7.5 O elemento <ftpServer> é fornecido como um recurso do IIS 7.5.
IIS 7.0 O elemento <ftpServer> foi introduzido no FTP 7.0, que era um download separado para o IIS 7.0.
IIS 6,0 O elemento <ftpServer> e seus elementos filho substituem as configurações de FTP do IIS 6.0 que estavam localizadas no caminho de metabase LM/MSFTPSVC.

Observação

Os serviços FTP 7.0 e FTP 7.5 eram fornecidos fora de banda para o IIS 7.0, o que exigia o download e a instalação de módulos do seguinte URL:

https://www.iis.net/expand/FTP

Com o Windows 7 e o Windows Server 2008 R2, o serviço FTP 7.5 é fornecido como um recurso para o IIS 7.5 e, portanto, o download do serviço FTP não é mais necessário.

Instalação

Para dar suporte à publicação FTP para seu servidor Web, você deve instalar o serviço FTP. Para fazer isso, execute as etapas a seguir.

Windows Server 2012 R2 ou Windows Server 2012

  1. Na barra de tarefas, clique em Gerenciador do Servidor.

  2. No Gerenciador do Servidor, clique no menu Gerenciar e clique em Adicionar Funções e Recursos.

  3. No assistente Adicionar Funções e Recursos, clique em Avançar. Selecione o tipo de instalação e clique em Avançar. Selecione o servidor de destino e clique em Avançar.

  4. Na página Funções de servidor, expanda Servidor Web (IIS) e, em seguida, selecione Servidor FTP.

    Observação

    Para dar suporte à autenticação do ASP.Membership ou do Gerenciador do IIS para o serviço FTP, você precisará selecionar a Extensibilidade de FTP além do Serviço FTP.
    Screenshot of the Server Roles page. F T P Extensibility is highlighted. .

  5. Selecione Avançar e, em seguida, na página Selecionar recursos, selecione Avançar novamente.

  6. Na página Confirmar seleções de instalação, clique em Instalar.

  7. Na página Resultados , clique em Fechar.

Windows 8 ou Windows 8.1

  1. Na tela Iniciar, mova o ponteiro até o canto inferior esquerdo, clique com o botão direito do mouse no botão Iniciar e clique em Painel de Controle.

  2. Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar recursos do Windows.

  3. Expanda Serviços de Informações da Internet e selecione Servidor FTP.

    Observação

    Para dar suporte à autenticação do ASP.Membership ou do Gerenciador do IIS para o serviço FTP, você também precisará selecionar Extensibilidade de FTP.
    Screenshot of the Windows Features dialog box. F T P Extensibility is highlighted in the expanded menu.

  4. Clique em OK.

  5. Clique em Fechar.

Windows Server 2008 R2

  1. Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador do Servidor.

  2. No painel de hierarquia do Gerenciador do Servidor, expanda Funções e clique em Servidor Web (IIS).

  3. No painel Servidor Web (IIS), role até a seção Serviços de Função e clique em Adicionar Serviços de Função.

  4. Na página Selecionar Serviços de Função do Assistente para Adicionar Serviços de Função, expanda Servidor FTP.

  5. Selecione Serviço FTP.

    Observação

    Para dar suporte à autenticação do ASP.Membership ou do Gerenciador do IIS para o serviço FTP, você também precisará selecionar Extensibilidade de FTP.
    Screenshot of the Add Role Services Wizard. The Role Services page is displayed and F T P Service is highlighted.

  6. Clique em Avançar.

  7. Na página Confirmar Seleções de Instalação, clique em Instalar.

  8. Na página Resultados , clique em Fechar.

Windows 7

  1. Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.

  2. Em Painel de Controle, clique em Programas e Recursos e clique em Ativar ou desativar Recursos do Windows.

  3. Expanda Serviços de Informações da Internet e, em seguida, Servidor FTP.

  4. Selecione Serviço FTP.

    Observação

    Para dar suporte à autenticação do ASP.Membership ou do Gerenciador do IIS para o serviço FTP, você também precisará selecionar Extensibilidade de FTP.
    Screenshot of the Windows Features Wizard. The turn Windows features on or off page is displayed.

  5. Clique em OK.

Windows Server 2008 ou Windows Vista

  1. Baixe o pacote de instalação do seguinte URL:

  2. Siga as instruções no seguinte passo a passo para instalar o serviço FTP:

Instruções

Como habilitar ou desabilitar a autenticação anônima para um site FTP

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows 8 ou Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:

      • Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows Vista ou Windows 7:

      • Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
      • Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, expanda o nome do servidor, expanda o nó Sites e selecione o nome do site.

  3. No painel Página Inicial do site, clique duas vezes no recurso Autenticação FTP.

  4. Na página Autenticação FTP, selecione Autenticação anônima.

  5. No painel Ações, selecione Habilitar para habilitar a autenticação anônima ou selecione Desabilitar para desabilitar a autenticação anônima.
    Screenshot of the I I S Manager window displaying the F T P Authentication page.


Como usar o Assistente de Site FTP para criar um site FTP com acesso de leitura anônimo

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows 8 ou Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:

      • Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows Vista ou Windows 7:

      • Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
      • Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, clique no nó Sites na árvore.

  3. Clique com o botão direito do mouse no nó Sites na árvore e clique em Adicionar Site FTP ou clique em Adicionar Site FTP no painel Ações.

  4. Quando o assistente Adicionar site FTP for exibido:

    • Insira "Meu Novo Site FTP" na caixa Nome do site FTP.

    • Para a caixa Caminho físico, você pode usar uma das seguintes opções para especificar seu diretório de conteúdo:

      • Clique no botão de reticências (...) e navegue até a pasta que contém o conteúdo do site FTP.
      • Digite o caminho para a pasta de conteúdo na caixa. Observe que, se optar por digitar o caminho, você poderá usar variáveis de ambiente nos caminhos. Por exemplo, você pode usar "%SystemDrive%\inetpub\ftproot" para o diretório de conteúdo.
    • Quando concluir esses itens, clique em Avançar.
      Screenshot of the Add F T P Site wizard. The Site Information page is displayed.

  5. Na segunda página do assistente Adicionar Site FTP:

    • Escolha um endereço IP para seu site FTP na lista suspensa Endereço IP ou aceite a seleção padrão de "Todos os não atribuídos".

    • Insira a porta TCP/IP para o site FTP na caixa Porta. Por padrão, sites e clientes FTP usam a porta 21. (Observação: para especificar FTPS implícito, você precisa usar a porta 990.)

    • Para usar um nome de host virtual FTP, selecione a caixa para Habilitar Nomes do Host Virtual e, em seguida, insira o nome do host virtual na caixa Host Virtual.

    • Para as opções de SSL, escolha uma das seguintes opções:

      • Selecione Nenhuma SSL para desabilitar as opções de SSL.
      • Selecione Permitir SSL para permitir que os clientes FTP usem FTP sobre SSL como opção ao se conectarem ao servidor FTP.
      • Selecione Exigir SSL para permitir que os clientes FTP sempre usem FTP sobre SSL ao se conectarem ao servidor FTP.
      • Se você escolher Permitir SSL ou Exigir SSL, escolha um certificado no menu suspenso Certificado SSL.
    • Quando concluir esses itens, clique em Avançar.
      Screenshot of the Add F T P Site wizard. The Binding and S S L Settings page is displayed.

  6. Na próxima página do assistente:

    • Selecione Anônimo para as configurações de Autenticação.
    • Para as configurações de Autorização, escolha "Usuários anônimos" na lista suspensa Permitir acesso a.
    • Selecione Ler para a opção Permissões.
    • Quando concluir esses itens, clique em Concluir.
      Screenshot of the Add F T P Site wizard. The Authentication and Authorization Information page is displayed.

Como habilitar ou desabilitar a autenticação Básica para um site FTP

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows 8 ou Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:

      • Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows Vista ou Windows 7:

      • Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
      • Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, expanda o nome do servidor, expanda o nó Sites e selecione o nome do site.

  3. No painel Página Inicial do site, clique duas vezes no recurso Autenticação FTP.

  4. Na página Autenticação FTP, selecione Autenticação Básica.
    Screenshot of the I I S Manager window. The F T P Authentication page is displayed.

  5. No painel Ações, selecione Habilitar para habilitar a autenticação Básica ou selecione Desabilitar para desabilitar a autenticação Básica.


Como usar o Assistente de Site FTP para criar um site FTP com autenticação Básica e acesso de leitura/gravação

  1. Abra o Gerenciador dos Serviços de Informações da Internet (IIS):

    • Caso você esteja usando o Windows Server 2012 ou o Windows Server 2012 R2:

      • Na barra de tarefas, clique em Gerenciador do Servidor, em Ferramentas e em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows 8 ou Windows 8.1:

      • Mantenha pressionada a tecla Windows, pressione a letra X e clique em Painel de Controle.
      • Clique em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Caso você esteja usando o Windows Server 2008 ou o Windows Server 2008 R2:

      • Na barra de tarefas, clique em Iniciar, vá para Ferramentas Administrativas e clique em Gerenciador dos Serviços de Informações da Internet (IIS).
    • Se você estiver usando o Windows Vista ou Windows 7:

      • Na barra de tarefas, clique em Iniciar e, depois, em Painel de Controle.
      • Clique duas vezes em Ferramentas Administrativas e clique duas vezes em Gerenciador dos Serviços de Informações da Internet (IIS).
  2. No painel Conexões, clique no nó Sites na árvore.

  3. Clique com o botão direito do mouse no nó Sites na árvore e clique em Adicionar Site FTP ou clique em Adicionar Site FTP no painel Ações.

  4. Quando o assistente Adicionar site FTP for exibido:

    • Insira "Meu Novo Site FTP" na caixa Nome do site FTP.

    • Para a caixa Caminho físico, você pode usar uma das seguintes opções para especificar seu diretório de conteúdo:

      • Clique no botão de reticências (...) e navegue até a pasta que contém o conteúdo do site FTP.
      • Digite o caminho para a pasta de conteúdo na caixa. Observe que, se optar por digitar o caminho, você poderá usar variáveis de ambiente nos caminhos. Por exemplo, você pode usar "%SystemDrive%\inetpub\ftproot" para o diretório de conteúdo.
    • Quando concluir esses itens, clique em Avançar.
      Screenshot of the Add F T P Site wizard displaying the Site Information page.

  5. Na segunda página do assistente Adicionar Site FTP:

    • Escolha um endereço IP para seu site FTP na lista suspensa Endereço IP ou aceite a seleção padrão de "Todos os não atribuídos".

    • Insira a porta TCP/IP para o site FTP na caixa Porta. Por padrão, sites e clientes FTP usam a porta 21. (Observação: para especificar FTPS implícito, você precisa usar a porta 990.)

    • Para usar um nome de host virtual FTP, selecione a caixa para Habilitar Nomes do Host Virtual e, em seguida, insira o nome do host virtual na caixa Host Virtual.

    • Para as opções de SSL, escolha uma das seguintes opções:

      • Selecione Nenhuma SSL para desabilitar as opções de SSL.
      • Selecione Permitir SSL para permitir que os clientes FTP usem FTP sobre SSL como opção ao se conectarem ao servidor FTP.
      • Selecione Exigir SSL para permitir que os clientes FTP sempre usem FTP sobre SSL ao se conectarem ao servidor FTP.
      • Se você escolher Permitir SSL ou Exigir SSL, escolha um certificado no menu suspenso Certificado SSL.
    • Quando concluir esses itens, clique em Avançar.
      Screenshot of the Add F T P Site window displaying the Binding and S S L Settings page.

  6. Na próxima página do assistente:

    • Selecione Básica para as configurações de Autenticação.
    • Para as configurações de Autorização, escolha "Usuários especificados" na lista suspensa Permitir acesso a e insira um nome de conta na caixa abaixo do menu suspenso.
    • Selecione Leitura e Gravação para a opção Permissões.
    • Quando concluir esses itens, clique em Concluir.
      Screenshot of the Add F T P Site window displaying the Authentication and Authorization Information page.

Configuração

O elemento <ftpServer> específico do site é configurado no nível do <site>.

Atributos

Atributo Descrição
allowUTF8 Atributo Boolean opcional.

true se UTF8 estiver habilitado; caso contrário, false.

O valor padrão é true.
serverAutoStart Atributo Boolean opcional.

true se o IIS deve iniciar o site FTP automaticamente quando o serviço FTP é iniciado; caso contrário, false.

O valor padrão é true.
state Atributo de enumeração somente leitura gerado dinamicamente.

Especifica o estado atual em tempo de execução para um site FTP. Os valores possíveis são:
Nome Descrição
Starting Especifica que o site FTP está sendo iniciado.

O valor numérico é 0.
Started

Especifica que o site FTP está em execução no momento.

O valor numérico é 1.

Stopping Especifica que o site FTP está parando.

O valor numérico é 2.
Stopped

Especifica que o site FTP foi interrompido.

O valor numérico é 3.

Unknown Especifica que o site FTP está em um estado desconhecido.

O valor numérico é 4.
Não há nenhum valor padrão e o atributo não é configurável. None.
lastStartupStatus Atributo uint somente leitura gerado dinamicamente.

Especifica o estado de quando o site FTP foi iniciado pela última vez.

Não há nenhum valor padrão e o atributo não é configurável.

Elementos filho

Elemento Descrição
connections Elemento opcional.

Especifica as configurações específicas da conexão para um site FTP.
security Elemento opcional.

Especifica as configurações relacionadas à segurança para um site FTP.
customFeatures Elemento opcional.

Especifica uma coleção de provedores FTP personalizados que foram desenvolvidos usando extensibilidade FTP.
messages Elemento opcional.

Especifica as mensagens relacionadas à conexão que um site FTP exibirá para clientes FTP.
fileHandling Elemento opcional.

Especifica as configurações de tratamento de arquivo para um site FTP.
firewallSupport Elemento opcional.

Especifica as configurações de um site FTP que são necessárias para conexões FTP feitas por meio de um firewall.
userIsolation Elemento opcional.

Especifica o comportamento de pesquisa do diretório base para conexões FTP. Por exemplo, os usuários podem ser restritos a um diretório base que se baseie em seu nome de logon.
directoryBrowse Elemento opcional.

Especifica as opções de listagem de diretório para um site FTP. Essas configurações afetam como o serviço FTP exibirá listagens de diretório para clientes FTP.
logfile Elemento opcional.

Especifica as opções de registro em log para um site FTP.
sessions Elemento somente leitura gerado dinamicamente.

Contém uma coleção de sessões FTP conectadas no momento. Cada sessão contém vários metadados, como o endereço IP do cliente, o comando atualmente executado etc.

Métodos

Método Descrição
Start Inicia um site FTP.
Stop Interrompe um site FTP.
FlushLog Libera o arquivo de log para um site FTP.

Exemplo de configuração

O exemplo a seguir ilustra vários conjuntos de configuração no elemento <ftpServer> para um site FTP. Mais especificamente, as configurações <site> neste exemplo demonstram como:

  • Crie um site FTP e adicione a associação para o protocolo FTP na porta 21.
  • Configure as opções de SSL do FTP para permitir acesso seguro no controle e no canal de dados usando um certificado.
  • Desabilite a autenticação Anônima e habilite autenticação Básica para FTP.
  • Negar acesso ao comando SYST do FTP.
  • Especifique o formato de listagem do diretório UNIX.
  • Configure as opções de registro em log.
  • Especifique uma mensagem de boas-vindas personalizada e habilite mensagens de erro detalhadas locais.
  • Especifique que os usuários iniciarão em um diretório base que se baseie em seu nome de logon, mas somente se esse diretório existir.
<site name="ftp.example.com" id="5">
  <application path="/">
    <virtualDirectory path="/" physicalPath="c:\inetpub\www.example.com" />
  </application>
  <bindings>
    <binding protocol="ftp" bindingInformation="*:21:" />
  </bindings>
  <ftpServer>
    <security>
      <ssl controlChannelPolicy="SslAllow"
         dataChannelPolicy="SslAllow"
         serverCertHash="57686f6120447564652c2049495320526f636b73" />
      <authentication>
        <basicAuthentication enabled="true" />
        <anonymousAuthentication enabled="false" />
      </authentication>
      <commandFiltering maxCommandLine="4096" allowUnlisted="true">
        <add command="SYST" allowed="false" />
      </commandFiltering>
    </security>
    <directoryBrowse showFlags="StyleUnix" />
    <logFile logExtFileFlags="Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, FtpStatus, Win32Status, ServerPort, FtpSubStatus, Session, FullPath, Info" />
    <messages expandVariables="true"
       greetingMessage="Welcome %UserName%!"
       allowLocalDetailedErrors="true" />
    <userIsolation mode="StartInUsersDirectory" />
  </ftpServer>
</site>

O exemplo a seguir ilustra várias configurações relacionadas à segurança no elemento <system.ftpServer> para um site FTP. Mais especificamente, as configurações <location> neste exemplo demonstram como:

  • Especifique uma regra de autorização FTP para acesso de leitura e gravação para o grupo de administradores.
  • Especifique as opções de filtragem de solicitação FTP que negam arquivos *.exe, *.bat e *.cmd.
  • Especifique os limites de solicitação FTP para um comprimento máximo de conteúdo de 1000000 bytes e um comprimento máximo de URL de 1024 bytes.
  • Bloqueie o acesso FTP ao diretório virtual _vti_bin, que é usado com as Extensões de Servidor do FrontPage.
  • Especifique as opções de filtragem de IP FTP que permitem o acesso de 127.0.0.1 e negam o acesso do intervalo de endereços IP 169.254.0.0/255.255.0.0.
<location path="ftp.example.com">
  <system.ftpServer>
    <security>
      <authorization>
        <add accessType="Allow" roles="administrators" permissions="Read, Write" />
      </authorization>
      <requestFiltering>
        <fileExtensions allowUnlisted="true">
          <add fileExtension=".exe" allowed="false" />
          <add fileExtension=".bat" allowed="false" />
          <add fileExtension=".cmd" allowed="false" />
        </fileExtensions>
        <requestLimits maxAllowedContentLength="1000000" maxUrl="1024" />
        <hiddenSegments>
          <add segment="_vti_bin" />
        </hiddenSegments>
      </requestFiltering>
      <ipSecurity enableReverseDns="false" allowUnlisted="true">
        <add ipAddress="127.0.0.1" allowed="true" />
        <add ipAddress="169.254.0.0" subnetMask="255.255.0.0" allowed="false" />
      </ipSecurity>
    </security>
  </system.ftpServer>
</location>

Exemplo de código

Os exemplos a seguir configuram um site FTP para usar o estilo UNIX para listagens de diretório e exibir o armazenamento de diretório disponível em bytes.

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites /[name='ftp.example.com'].ftpServer.directoryBrowse.showFlags:"StyleUnix, DisplayAvailableBytes" /commit:apphost

Observação

Defina o parâmetro commit para apphost quando usar AppCmd.exe para definir essas configurações. Isso confirma as definições de configuração para a seção de local apropriado no arquivo ApplicationHost.config.

C#

using System;
using System.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("system.applicationHost/sites");
         ConfigurationElementCollection sitesCollection = sitesSection.GetCollection();

         ConfigurationElement siteElement = FindElement(sitesCollection, "site", "name", @"ftp.example.com");
         if (siteElement == null) throw new InvalidOperationException("Element not found!");

         ConfigurationElement ftpServerElement = siteElement.GetChildElement("ftpServer");
         ConfigurationElement directoryBrowseElement = ftpServerElement.GetChildElement("directoryBrowse");
         directoryBrowseElement["showFlags"] = @"StyleUnix, DisplayAvailableBytes";

         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 = true;
            for (int i = 0; i < keyValues.Length; i += 2)
            {
               object o = element.GetAttributeValue(keyValues[i]);
               string value = null;
               if (o != null)
               {
                  value = o.ToString();
               }
               if (!String.Equals(value, keyValues[i + 1], StringComparison.OrdinalIgnoreCase))
               {
                  matches = false;
                  break;
               }
            }
            if (matches)
            {
               return element;
            }
         }
      }
      return null;
   }
}

VB.NET

Imports System
Imports System.Text
Imports Microsoft.Web.Administration

Module Sample
   Sub Main()
      Dim serverManager As 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", "name", "ftp.example.com")
      If (siteElement Is Nothing) Then
         Throw New InvalidOperationException("Element not found!")
      End If

      Dim ftpServerElement As ConfigurationElement = siteElement.GetChildElement("ftpServer")
      Dim directoryBrowseElement As ConfigurationElement = ftpServerElement.GetChildElement("directoryBrowse")
      directoryBrowseElement("showFlags") = "StyleUnix, DisplayAvailableBytes"

      serverManager.CommitChanges()
   End Sub

   Private Function FindElement(ByVal collection As ConfigurationElementCollection, ByVal elementTagName As String, ByVal ParamArray keyValues() As String) As ConfigurationElement
      For Each element As ConfigurationElement In collection
         If String.Equals(element.ElementTagName, elementTagName, StringComparison.OrdinalIgnoreCase) Then
            Dim matches As 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 (Not (o) Is Nothing) Then
                  value = o.ToString
               End If
               If Not String.Equals(value, keyValues((i + 1)), StringComparison.OrdinalIgnoreCase) Then
                  matches = False
                  Exit For
               End If
            Next
            If matches Then
               Return element
            End If
         End If
      Next
      Return Nothing
   End Function


End 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.Collection;

var siteElementPos = FindElement(sitesCollection, "site", ["name", "ftp.example.com"]);
if (siteElementPos == -1) throw "Element not found!";
var siteElement = sitesCollection.Item(siteElementPos);

var ftpServerElement = siteElement.ChildElements.Item("ftpServer");
var directoryBrowseElement = ftpServerElement.ChildElements.Item("directoryBrowse");
directoryBrowseElement.Properties.Item("showFlags").Value = "StyleUnix, DisplayAvailableBytes";

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 += 2) {
            var property = element.GetPropertyByName(valuesToMatch[iVal]);
            var value = property.Value;
            if (value != null) {
               value = value.toString();
            }
            if (value != valuesToMatch[iVal + 1]) {
               matches = false;
               break;
            }
         }
         if (matches) {
            return i;
         }
      }
   }
   return -1;
}

VBScript

Set adminManager = createObject("Microsoft.ApplicationHost.WritableAdminManager")
adminManager.CommitPath = "MACHINE/WEBROOT/APPHOST"

Set sitesSection = adminManager.GetAdminSection("system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST")
Set sitesCollection = sitesSection.Collection

siteElementPos = FindElement(sitesCollection, "site", Array("name", "ftp.example.com"))
If siteElementPos = -1 Then
WScript.Echo "Element not found!"
WScript.Quit
End If

Set siteElement = sitesCollection.Item(siteElementPos)
Set ftpServerElement = siteElement.ChildElements.Item("ftpServer")
Set directoryBrowseElement = ftpServerElement.ChildElements.Item("directoryBrowse")
directoryBrowseElement.Properties.Item("showFlags").Value = "StyleUnix, DisplayAvailableBytes"

adminManager.CommitChanges()

Function FindElement(collection, elementTagName, valuesToMatch)
   For i = 0 To CInt(collection.Count) - 1
      Set element = collection.Item(i)
      If element.Name = elementTagName Then
         matches = True
         For iVal = 0 To UBound(valuesToMatch) Step 2
            Set property = element.GetPropertyByName(valuesToMatch(iVal))
            value = property.Value
            If Not IsNull(value) Then
               value = CStr(value)
            End If
            If Not value = CStr(valuesToMatch(iVal + 1)) Then
               matches = False
               Exit For
            End If
         Next
         If matches Then
            Exit For
         End If
      End If
   Next
   If matches Then
      FindElement = i
   Else
      FindElement = -1
   End If
End Function