6. July 2007
Bob
FTP , Scripting
A few weeks ago my friend Jaroslav posted a blog entry about viewing the current FTP7 sessions using Javascript, and I followed that up with a blog post about viewing the current FTP7 sessions using VBScript.
This blog entry follows up on those postings by showing you how to view the current FTP7 sessions using C#. To do so, start a new Windows Console Application project using C# in Visual Studio 2005 on a computer running Windows Server 2008 with the new FTP7 server installed. You will need to add a reference to the AppHostAdminLibrary by manually browsing to the nativerd.dll file that's located in the %WinDir%\System32\InetSrv folder. After you've added the reference, replace all of the C# code from the project template with the following C# code:
using System;
using System.Collections.Generic;
using System.Text;
using AppHostAdminLibrary;
namespace FtpDumpSessions
{
class FtpDumpSessions
{
static void Main(string[] args)
{
AppHostWritableAdminManager objAdminManager =
new AppHostWritableAdminManager();
// get the collection of sites
IAppHostElement objSitesElement =
objAdminManager.GetAdminSection(
"system.applicationHost/sites",
"MACHINE/WEBROOT/APPHOST");
uint intSiteCount =
objSitesElement.Collection.Count;
Console.WriteLine(
"Site count: {0}",
intSiteCount);
try
{
// loop through the sites collection
for (int intSite = 0;
intSite < intSiteCount;
++intSite)
{
// get a site
IAppHostElement objFtpSite =
objSitesElement.Collection[intSite];
// get the FTP section
IAppHostElement objFtpSiteElement =
objFtpSite.ChildElements["ftpServer"];
// get the sessions collection
IAppHostElement objFtpSessions =
objFtpSiteElement.ChildElements["sessions"];
uint intSessionCount =
objFtpSessions.Collection.Count;
Console.WriteLine(
"\tFTP sessions for {0}: {1}",
objFtpSite.Properties["name"].Value, intSessionCount);
// loop through the sessions
for (int intSession = 0;
intSession < intSessionCount;
++intSession)
{
IAppHostElement objFtpSession =
objFtpSessions.Collection[intSession];
// loop through each session's properties
for (int intProperty = 0;
intProperty < objFtpSession.Properties.Count;
++intProperty)
{
Console.WriteLine(
"\t\t{0}: {1}",
objFtpSession.Properties[intProperty].Name,
objFtpSession.Properties[intProperty].Value);
}
}
}
}
catch (System.Exception ex)
{
Console.WriteLine(
"\r\nError: {0}",
ex.Message);
}
}
}
}
When you compile and run the project, you should see a listing of all users connected to your FTP7 sites.
That's about it for this post - have fun!
6. July 2007
Bob
FTP , Scripting
A few weeks ago my friend Jaroslav posted a blog entry about viewing the current FTP7 sessions using Javascript, and I followed that up with a blog post about viewing the current FTP7 sessions using C#.
This blog entry follows up on those postings by showing you how to view the current FTP7 sessions using VBScript. To do so, copy the following VBScript code to Windows Notepad and save the file as "ftp_sessions.vbs" on a computer running Windows Server 2008 with the new FTP7 server installed:
Option Explicit
Dim objAdminManager, objSiteCollection, objFtpSiteElement
Dim objSite, objFtpSession, objFtpSessions, objFtpProperty
Dim intSite, intFtpSession, intFtpProperty
Dim intSiteCount, intFtpSessionCount, intFtpPropertyCount
Set objAdminManager = WScript.CreateObject("Microsoft.ApplicationHost.AdminManager")
' get the collection of sites
Set objSiteCollection = objAdminManager.GetAdminSection( _
"system.applicationHost/sites", "MACHINE/WEBROOT/APPHOST" )
intSiteCount = CInt(objSiteCollection.Collection.Count)
WScript.Echo String(40,"*")
WScript.Echo "Site count: " & intSiteCount
WScript.Echo String(40,"*")
' loop through the sites collection
For intSite = 0 To intSiteCount-1
' get a site
Set objSite = objSiteCollection.Collection.Item(intSite)
' get the FTP section
Set objFtpSiteElement = objSite.ChildElements.Item("ftpServer")
' get the sessions collection
Set objFtpSessions = objFtpSiteElement.ChildElements.Item("sessions")
intFtpSessionCount = CInt(objFtpSessions.Collection.Count)
WScript.Echo String(40,"=")
WScript.Echo "FTP sessions for " & _
objSite.Properties.Item("name").Value & _
": " & intFtpSessionCount
WScript.Echo String(40,"=")
' loop through the sessions
For intFtpSession = 0 To intFtpSessionCount - 1
Set objFtpSession = objFtpSessions.Collection.Item(intFtpSession)
intFtpPropertyCount = CInt(objFtpSession.Properties.Count)
' loop through each session's properties
For intFtpProperty = 0 To intFtpPropertyCount - 1
Set objFtpProperty = objFtpSession.Properties.Item(intFtpProperty)
WScript.Echo CStr(objFtpProperty.Name) & ": " & CStr(objFtpProperty.Value)
Next
WScript.Echo String(40,"-")
Next
Next
To make sure that you don't see any message box pop-ups, run the script from the command-line using the following syntax:
cscript.exe ftp_sessions.vbs
That's about it for this post - have fun!