Freigeben über


FTP-Protokolldateien <logFile>

Übersicht

Das Element <logFile> wird verwendet, um die Aktivitätsprotokollierungsoptionen für eine FTP-Site zu konfigurieren.

Sie können beispielsweise die Protokollierung aktivieren oder deaktivieren, die Informationskategorien angeben, die in der Protokolldatei gespeichert werden sollen, und das Verzeichnis ändern, in dem die Protokolldatei gespeichert wird. Sie können das <logFile>-Element auch verwenden, um basierend auf der Protokolldateigröße oder dem Zeitintervall und der maximalen Größe (in Byte) einer Protokolldatei zu steuern, wie oft IIS eine neue Protokolldatei erstellt.

Hinweis

Im Gegensatz zu Websites, die das IIS-, NCSA- oder W3C-Format für Protokolldateien verwenden können, speichert der FTP 7-Dienst nur Protokolldateien im W3C-Format.

Sie können die von IIS protokollierten Informationskategorien festlegen, indem Sie das Attribut logExtFileFlags bearbeiten. Die Standardwerte sind Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, FtpStatus, Win32Status, FtpSubStatus, ServerPort, Session und FullPath.

Kompatibilität

Version Hinweise
(IIS 10.0 UND HÖHER) Das <logFile> Element wurde in IIS 10.0 nicht geändert.
IIS 8.5 Das <logFile> Element wurde in IIS 8.5 nicht geändert.
IIS 8.0 Das <logFile> Element wurde in IIS 8.0 nicht geändert.
IIS 7.5 Das <logFile>-Element des <ftpServer>-Elements wird als Feature von IIS 7.5 bereitgestellt.
IIS 7.0 Das <logFile>-Element des <ftpServer>-Elements wurde in FTP 7.0 als separater Download für IIS 7.0 eingeführt.
IIS 6.0 N/V

Hinweis

Die Dienste FTP 7.0 und FTP 7.5 wurden für IIS 7.0 out-of-band ausgeliefert. Dazu musste der Dienst von der folgenden URL heruntergeladen und installiert werden:

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

Bei Windows 7 und Windows Server 2008 R2 wird der FTP 7.5-Dienst als Feature für IIS 7.5 bereitgestellt, sodass das Herunterladen des FTP-Diensts nicht mehr erforderlich ist.

Setup

Um die FTP-Veröffentlichung für Ihren Webserver zu unterstützen, müssen Sie den FTP-Dienst installieren. Führen Sie dazu die folgenden Schritte aus:

Windows Server 2012 oder Windows Server 2012 R2

  1. Klicken Sie auf der Taskleiste auf Server-Manager.

  2. Klicken Sie im Server-Manager auf Verwalten und dann auf Rollen und Features hinzufügen.

  3. Klicken Sie im Assistenten zum Hinzufügen von Rollen und Features auf Weiter. Wählen Sie den Installationstyp aus, und klicken Sie auf Weiter. Wählen Sie den Zielserver aus, und klicken Sie auf Weiter.

  4. Erweitern Sie auf der Seite Serverrollen den Eintrag Webserver (IIS), und wählen Sie dann FTP-Server aus.

    Hinweis

    Um die Authentifizierung mittels ASP-Mitgliedschaft oder IIS-Manager für den FTP-Dienst zu unterstützen, müssen Sie zusätzlich zu FTP-Dienst die Option FTP-Erweiterbarkeit auswählen.
    Screenshot of the F T P Extensibility option being highlighted. .

  5. Klicken Sie auf Weiter und wählen Sie dann auf der Seite Features auswählen erneut Weiter aus.

  6. Klicken Sie auf der Seite Installationsauswahl bestätigen auf Installieren.

  7. Klicken Sie auf der Seite Ergebnisse auf Schließen.

Windows 8 oder Windows 8.1

  1. Bewegen Sie auf dem Startbildschirm den Mauszeiger ganz nach links unten, klicken Sie mit der rechten Maustaste auf die Starttaste und klicken Sie dann auf Systemsteuerung.

  2. Klicken Sie in der Systemsteuerungauf Programme und dann auf „Windows-Features aktivieren oder deaktivieren“.

  3. Erweitern Sie Internetinformationsdienste, und wählen Sie dann FTP-Server aus.

    Hinweis

    Zur Unterstützung der Authentifizierung für den FTP-Dienst durch ASP-Mitgliedschaft oder den IIS-Manager müssen Sie auch FTP-Erweiterbarkeit auswählen.
    Screenshot of the F T P Extensibility folder being highlighted.

  4. Klicken Sie auf OK.

  5. Klicken Sie auf Schließen.

Windows Server 2008 R2

  1. Klicken Sie auf der Taskleiste auf Start, zeigen Sie auf Verwaltungstools, und klicken Sie dann auf Server-Manager.

  2. Erweitern Sie im Hierarchiebereich des Server-Managers die Rollenund klicken Sie dann auf den Webserver (IIS) .

  3. Scrollen Sie im Bereich Webserver (IIS) zum Abschnitt Rollendienste, und klicken Sie dann auf Rollendienste hinzufügen.

  4. Erweitern Sie auf der Seite Rollendienste auswählen des Assistenten zum Hinzufügen von Rollendiensten die Option FTP-Server.

  5. Wählen Sie FTP-Dienst aus.

    Hinweis

    Zur Unterstützung der Authentifizierung für den FTP-Dienst durch ASP-Mitgliedschaft oder den IIS-Manager müssen Sie auch FTP-Erweiterbarkeit auswählen.
    Screenshot of the F T P Service option being highlighted.

  6. Klicken Sie auf Weiter.

  7. Klicken Sie auf der Seite Installationsauswahl bestätigen auf Installieren.

  8. Klicken Sie auf der Seite Ergebnisse auf Schließen.

Windows 7

  1. Klicken Sie auf der Taskleiste auf Start und dann auf Systemsteuerung.

  2. Klicken Sie in der Systemsteuerungauf Programmeund dann auf Windows-Features aktivieren oder deaktivieren.

  3. Erweitern Sie Internetinformationsdienste und dann FTP Server.

  4. Wählen Sie FTP-Dienst aus.

    Hinweis

    Zur Unterstützung der Authentifizierung für den FTP-Dienst durch ASP-Mitgliedschaft oder den IIS-Manager müssen Sie auch FTP-Erweiterbarkeit auswählen.
    Screenshot of the Internet Information Services folder's sub folders.

  5. Klicken Sie auf OK.

Windows Server 2008 oder Windows Vista

  1. Laden Sie das Installationspaket von der folgenden URL herunter:

  2. Befolgen Sie die Anweisungen in der folgenden exemplarischen Vorgehensweise, um den FTP-Dienst zu installieren:

Gewusst wie

So konfigurieren Sie Protokollierungsoptionen für eine FTP-Site

  1. Öffnen Sie den Internet Information Services (IIS) Manager:

    • Wenn Sie Windows Server 2012 oder Windows Server 2012 R2 verwenden:

      • Klicken Sie der der Taskleiste auf Server-Managerdann auf Toolsund dann auf den Internet Information Services (IIS) Manager.
    • Wenn Sie Windows 8 oder Windows 8.1 verwenden:

      • Halten Sie die Windows-Taste gedrückt, drücken Sie den Buchstaben X, und klicken Sie dann auf "Systemsteuerung".
      • Klicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
    • Wenn Sie Windows Server 2008 oder Windows Server 2008 R2 verwenden:

      • Klicken Sie auf der Taskleiste auf Start, zeigen Sie auf Verwaltungund dann auf den Internet Information Services (IIS) Manager.
    • Wenn Sie Windows Vista oder Windows 7 verwenden:

      • Klicken Sie auf der Taskleiste auf Start und dann auf Systemsteuerung.
      • Doppelklicken Sie auf Verwaltungund doppelklicken Sie dann auf den Internet Information Services (IIS) Manager.
  2. Erweitern Sie im Bereich Verbindungen den Servernamen, und navigieren Sie zu der Site, für die Sie die Protokollierung konfigurieren möchten.

  3. Doppelklicken Sie im Bereich Start auf FTP-Protokollierung.
    Screenshot of the Home pane with the F T P Logging option being highlighted. - Klicken Sie im Abschnitt Protokolldateirollover auf W3C-Felder auswählen ...

  4. Wählen Sie die Felder für Ihre Protokolldateien aus und klicken Sie dann auf OK.
    Screenshot of the W 3 C Logging Fields dialog box, showing multiple fields to select.

  5. Geben Sie unter Verzeichnis den Pfad an, in dem die Protokolldatei gespeichert werden soll. Der Standardwert ist %SystemDrive%\inetpub\logs\LogFiles.

  6. Geben Sie im Abschnitt Protokolldateirollover eine der folgenden Optionen an:

    • Zeitplan: Eine neue Protokolldatei basierend auf einem der folgenden Werte erstellen:

      • Stündlich: Jede Stunde wird eine neue Protokolldatei erstellt.
      • Täglich: Jeden Tag wird eine neue Protokolldatei erstellt.
      • Wöchentlich: Jede Woche wird eine neue Protokolldatei erstellt.
      • Monatlich: Jeden Monat wird eine neue Protokolldatei erstellt.
    • Maximale Dateigröße (in Bytes): Eine neue Protokolldatei erstellen, wenn die Datei eine bestimmte Größe (in Bytes) erreicht. Die minimale Dateigröße ist 1.048.576 Bytes. Wenn für dieses Attribut ein kleinerer Wert als 1.048.576 Bytes festgelegt wird, wird implizit ein Standardwert von 1.048.576 Bytes angenommen.

    • Keine neue Protokolldatei erstellen: Es gibt eine einzige Protokolldatei, die ständig weiter wächst, wenn Informationen protokolliert werden.

    • Wählen Sie Lokale Zeit für Dateibenennung und Rollover verwenden, um anzugeben, dass die Protokolldateibenennung und die Uhrzeit des Protokolldateirollovers die lokale Serverzeit verwendet. Wenn diese Option nicht ausgewählt ist, wird UTC (Coordinated Universal Time) verwendet.
      Screenshot of the Log File Rollover section, showing the Schedule and Maximum file size options.

  7. Wählen Sie im Bereich Aktionen die Option Übernehmen aus.

Konfiguration

Attribute

Attribut Beschreibung
directory Optionales Zeichenfolgeattribut.

Gibt das Protokollierungsverzeichnis an, in dem die Protokolldatei und mit der Protokollierung zusammenhängende Unterstützungsdateien gespeichert werden.

Der Standardwert ist %SystemDrive%\inetpub\logs\LogFiles.
enabled Optionales boolesches Attribut.

true, wenn Protokollierung aktiviert wird; andernfalls false.

Der Standardwert ist true.
localTimeRollover Optionales boolesches Attribut.

true, wenn eine neue Protokolldatei basierend auf der Ortszeiterstellt wird. false für die koordinierte Weltzeit (Coordinated Universal Time, UTC, zuvor Greenwich Mean Time, GMT).

Hinweis: Unabhängig von der Einstellung basiert der Zeitstempel jedes Protokolldatensatzes der erweiterten W3C-Protokollierung auf der UTC-Zeit.

Der Standardwert ist false.
logExtFileFlags Optionales Flags-Attribut.

Gibt die Informationskategorien an, die während der Protokollierung von Ereignissen für eine Site in die Protokolldatei (bei Verwendung des erweiterten W3C-Formats für Protokolldateien) oder in die ODBC-Datenquelle geschrieben werden. Das Attribut logExtFileFlags kann auf einen oder mehrere der folgenden Werte festgelegt werden. Wenn Sie mehrere Werte angeben, trennen Sie diese durch ein Komma (,).

Die Standardwerte sind Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, FtpStatus, Win32Status, FtpSubStatus, ServerPort, Session und FullPath.
Wert Beschreibung
BytesRecv Protokolliert die Anzahl der vom Server empfangenen Bytes.

Der numerische Wert ist 8192.
BytesSent Protokolliert die Anzahl der vom Server gesendeten Bytes.

Der numerische Wert ist 4096.
ClientIP Protokolliert die IP-Adresse des Clients, von dem die Anforderung stammt.

Der numerische Wert ist 4.
ClientPort Protokolliert den Port des Clients, von dem die Anforderung stammt.

Der numerische Wert ist 33554432.
ComputerName Protokolliert den Namen des Servers, auf dem der Protokolldateieintrag generiert wurde.

Der numerische Wert ist 32.
Date Protokolliert das Datum, an dem die Aktivität stattgefunden hat.

Der numerische Wert ist 1.
FtpStatus Protokolliert den HTTP-Statuscode.

Der numerische Wert ist 1024.
FtpSubStatus Protokolliert den Unterstatuscode des FTP-Fehlers.

Der numerische Wert ist 2097152.
FullPath Protokolliert den vollständigen relativen Pfad. Hinweis: Dies kann ein anderer URI sein, den der Client angefordert hat, der durch Festlegen des UriStem-Flags protokolliert wird.

Der numerische Wert ist 8388608.
Host Protokolliert den virtuellen Hostnamen, falls vorhanden.

Der numerische Wert ist 1048576.
Info Protokolliert erweiterte Debuginformationen, falls vorhanden.

Der numerische Wert ist 16777216.
Method Protokolliert die angeforderte Aktion. Beispiel: BENUTZER , PASSusw.

Der numerische Wert ist 128.
ServerIP Protokolliert die IP-Adresse des Servers, auf dem der Protokolldateieintrag generiert wurde.

Der numerische Wert ist 64.
ServerPort Protokolliert die Serverportnummer, die für die Site konfiguriert wurde.

Der numerische Wert ist 32768.
Session Protokolliert den eindeutigen Bezeichner für die FTP-Sitzung. Dies ist nützlich für die Analyse von Sitzungsaktivitäten in Ihren Protokollen.

Der numerische Wert ist 4194304.
SiteName Protokolliert den Internetdienstnamen und die Instanznummer für die Site.

Der numerische Wert ist 16.
Time Protokolliert den Zeitpunkt der Aktivität in der UTC-Zeit.

Der numerische Wert ist 2.
TimeTaken Protokolliert die zur Ausführung einer Anforderung benötigte Zeit. Die benötigte Zeit wird in Millisekunden aufgezeichnet.

Der numerische Wert ist 16384.
UriStem Protokolliert die Informationen zum Stamm des URI, der das Ziel der Aktion ist. Hinweis: Dies zeigt den URI-Stream genau so an, wie ihn der Client angefordert hat, was möglicherweise nicht der vollständige relative Pfad ist. Verwenden Sie für den vollständigen relativen Pfad das FullPath-Flag.

Der numerische Wert ist 256.
UserName Protokolliert den Namen des authentifizierten Benutzers, der auf Ihren Server zugegriffen hat. Anonyme Benutzer werden durch einen Bindestrich gekennzeichnet.

Der numerische Wert ist 8.
Win32Status Protokolliert den Windows-Statuscode.

Der numerische Wert ist 2048.
period Optionales Enumerationsattribut.

Gibt an, wie oft der FTP-Dienst eine neue Protokolldatei erstellt. Das period-Attribut kann einen der folgenden Werte haben.

Der Standardwert ist Daily.
Wert Beschreibung
Daily Erstellt täglich eine neue Protokolldatei.

Der numerische Wert ist 1.
Hourly Erstellt stündlich eine neue Protokolldatei.

Der numerische Wert ist 4.
MaxSize Erstellt eine neue Protokolldatei, wenn eine maximale Größe erreicht ist. Die maximale Größe wird im truncateSize-Attribut angegeben.

Der numerische Wert ist 0.
Monthly Erstellt monatlich eine neue Protokolldatei.

Der numerische Wert ist 3.
Weekly Erstellt wöchentlich eine neue Protokolldatei.

Der numerische Wert ist 2.
selectiveLogging Optionales Flags-Attribut.

Gibt die Ausführlichkeit für die FTP-Protokollierung an.

Der Standardwert ist LogSuccessful,LogError,LogInfrastructure.
Wert Beschreibung
LogError Gibt an, dass Fehler protokolliert werden. Die tatsächlich protokollierte Datenmenge hängt auch von der Einstellung der LogInfrastructure-Flag ab.

Der numerische Wert ist 2.
LogInfrastructure Gibt an, dass alle FTP-Befehle und Datenkanalaktivitäten auf niedriger Ebene protokolliert werden. Die Protokolle enthalten beispielsweise Einträge für DataChannelOpened, DataChannelClosed, PORT/EPRT, PASV/EPSV, wenn das LogInfrastructure-Flag gesetzt ist.

Der numerische Wert ist 4.
LogSuccessful Gibt an, dass erfolgreiche Aktivitäten protokolliert werden. Die tatsächlich protokollierte Datenmenge hängt auch von der Einstellung der LogInfrastructure-Flag ab.

Der numerische Wert ist 1.
truncateSize Optionales int64-Attribut.

Legt die maximale Größe der Protokolldatei (in Bytes) fest, ab der eine neue Protokolldatei erstellt wird. Dieser Wert gilt nur, wenn MaxSize für das period-Attribut ausgewählt wird. Die minimale Dateigröße ist 1,048,576 Bytes. Wenn für dieses Attribut ein kleinerer Wert als 1,048,576 Bytes festgelegt wird, wird implizit ein Standardwert von 1,048,576 Bytes angenommen.

Der Standardwert ist 20971520.

Untergeordnete Elemente

Keine.

Konfigurationsbeispiel

Das folgende Konfigurationsbeispiel zeigt ein FTP mit benutzerdefinierten Protokollierungsoptionen, die angeben, dass Infrastrukturbefehle nicht protokolliert werden, Protokolldateien täglich rotiert werden, und die zusätzliche Debugging-Option den Standardfeldern hinzugefügt wurde.

<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 serverAutoStart="true">
      <security>
          <authentication>
            <basicAuthentication enabled="true" />
            <anonymousAuthentication enabled="false" />
          </authentication>
      </security>
      <logFile period="Daily"
         logExtFileFlags="Date, Time, ClientIP, UserName, ServerIP, Method, UriStem, FtpStatus, Win32Status, ServerPort, FtpSubStatus, Session, FullPath, Info"
         selectiveLogging="LogSuccessful, LogError" />
   </ftpServer>
</site>

Beispielcode

Die folgenden Beispiele veranschaulichen die Aktivierung der Protokollierung für eine FTP-Site, das Konfigurieren des Protokolldateiverzeichnisses für eine FTP-Site für einen bestimmten Pfad und die Angabe des täglichen Recyclings von Protokolldateien.

AppCmd.exe

appcmd.exe set config -section:system.applicationHost/sites /[name='ftp.example.com'].ftpServer.logFile.directory:"C:\logs\LogFiles" /commit:apphost

appcmd.exe set config -section:system.applicationHost/sites /[name='ftp.example.com'].ftpServer.logFile.period:"Daily" /commit:apphost

appcmd.exe set config -section:system.applicationHost/sites /[name='ftp.example.com'].ftpServer.logFile.enabled:"True" /commit:apphost

Hinweis

Sie müssen unbedingt den Commitparameter auf apphost festlegen, wenn Sie AppCmd.exe verwenden, um diese Einstellungen zu konfigurieren. Dadurch werden die Konfigurationseinstellungen auf den entsprechenden Speicherortabschnitt in der Datei ApplicationHost.config festgelegt.

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 logFileElement = ftpServerElement.GetChildElement("logFile");
         logFileElement["directory"] = @"C:\logs\LogFiles";
         logFileElement["period"] = @"Daily";
         logFileElement["enabled"] = true;

         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 logFileElement As ConfigurationElement = ftpServerElement.GetChildElement("logFile")
      logFileElement("directory") = "C:\logs\LogFiles"
      logFileElement("period") = "Daily"
      logFileElement("enabled") = True

      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 logFileElement = ftpServerElement.ChildElements.Item("logFile");
logFileElement.Properties.Item("directory").Value = "C:\\logs\\LogFiles";
logFileElement.Properties.Item("period").Value = "Daily";
logFileElement.Properties.Item("enabled").Value = true;

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 logFileElement = ftpServerElement.ChildElements.Item("logFile")
logFileElement.Properties.Item("directory").Value = "C:\logs\LogFiles"
logFileElement.Properties.Item("period").Value = "Daily"
logFileElement.Properties.Item("enabled").Value = true

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