www.geekybob.com

Just a short, simple blog for Bob to share his thoughts.

Viewing current FTP7 sessions using VBScript

06 July 2007 • by 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!

Scripting MIDI Events in Sibelius

11 May 2007 • by Bob • Scripting, MIDI

OK - I have to admit, when you realize that you are making software choices based on scripting language support you start to get the feeling that there are times when you just have to accept the fact that you are a geek.

Here's a case in point: I write music as a hobby, and when shopping for a program to write sheet music with, I chose Sibelius because I discovered that they have a really cool scripting language called "ManuScript". OK - so the name is kind of silly, but it's pretty cool to write code with.

The way it works is that you create what Sibelius calls a "plug-in", and you assign it to a category that will be used as the menu under which your plug-in will be displayed. Once you've done all that, you can start writing code.

For example, I needed to add sustain pedal MIDI events to an entire piano score, and doing so manually would have been a tedious exercise. So I made my life easier and created a quick plug-in that adds the MIDI events to apply the sustain pedal at full level to the beginning of every measure, and then adds the MIDI events to lift the sustain pedal at the end of every measure:

// Verify that a score is open.
if (Sibelius.ScoreCount=0)
{
   Sibelius.MessageBox("Please open a score.");
   return false;
}

// Retrieve a score object for the active score.
score = Sibelius.ActiveScore;
// Retrieve an object for the current selection.
selection = score.Selection;

if (selection.IsPassage)
{
   // Loop through the highlighted measures.
   for each Bar b in selection
   {
      // Add MIDI sustain pedal events.
      b.AddText(1,"~C64,127",TechniqueTextStyle);
      b.AddText(b.Length,"~C64,0",TechniqueTextStyle);
   }
   // Return a status message.    Sibelius.MessageBox("Finished."); }

I should point out, however, that this is meant to be a brief example of what you can do. Running this same plug-in on the same selection will re-add the sustain pedal events to your score; I didn't add any advanced logic to check for the existence of any prior sustain pedal events. If anyone wants to take on that challenge, have fun and don't forget to share your results!

FrontPage 2002 Server Extensions Beta for Longhorn and Vista

28 April 2007 • by Bob • FrontPage, IIS

Following up on my FrontPage Server Extensions on Vista and Longhorn blog post from last February, I'm happy to announce that Microsoft and Ready to Run Software have released the first beta version of the Microsoft FrontPage 2002 Server Extensions (FPSE 2002) for Windows Server Code Name "Longhorn" and Windows Vista.

The beta version of FPSE 2002 can be downloaded from the following URL:

http://go.microsoft.com/fwlink/?LinkId=86544

Additional documentation about installing and using this version of FPSE 2002 can be found at the following URL:

http://go.microsoft.com/fwlink/?LinkId=88546

It should be noted that this version of FPSE 2002 is a beta release and is therefore unsupported. Also, this version of FPSE 2002 introduces no new functionality; it is essentially the same version of FPSE 2002 that was created for Windows Server 2003 that has been updated to work on Windows Server Code Name "Longhorn" and Windows Vista. That being said, this version of FPSE 2002 will enable web hosters and developers to author their web content on servers or workstations that are running IIS 7.0 on Windows Server Code Name "Longhorn" and Windows Vista.

Feedback about this release can be sent to fpbeta@rtr.com.

FTP 7 Beta is released!

26 April 2007 • by Bob • FTP, IIS

It's been a long time in development, but Microsoft has released a beta version of a new FTP service that we have completely rewritten for Windows Server code name "Longhorn". This new FTP service contains many great new features, such as:

  • Integration of Web sites and FTP sites, allowing you to optionally host Web content and Web authoring on the same site by adding FTP settings.
  • Adoption of the IIS 7.0 administration and configuration files, allowing .NET-style configuration of your FTP sites and using the new IIS 7.0 administration tool to manage your FTP settings.
  • Data security through Secure Sockets Layer (SSL) and FTPS
  • Support for additional Internet FTP standards such as UTF8 and IPv6.
  • Hosting multiple FTP sites on the same IP address through the use of FTP virtual host names.
  • Enhanced user isolation that allows you to create complex heirarchies of virtual directories to lock users into specific content locations.
  • Improved supportability through improved W3C logging, detailed local error messages, and ETW tracing.

There are way too many features to list in such a short space, so a good place for addtional information is the "What’s New for Microsoft and FTP?" article. I encourage you to download the beta version of the new FTP service today, and listed below are the links for the download pages for each of the individual installation packages:

After installing the new FTP server, the following walkthroughs on the www.iis.net web site should help get you started:

In closing, the beta version of this new FTP service has a lot to offer, and we've put a lot of time and effort into making what we think is a great start for the future of FTP for IIS. About the only piece of bad news that I have for anyone is that this new FTP service will not work on Windows Server 2003 with IIS 6.0.

All in all, our team is excited to see people start testing with this beta version. And lest I forget, my special thanks go to:

  • Jaro, Emily, Daniel – for building it
  • Suditi, Cip, Jeong – for testing it
  • Janani, Andrew, Reagan – for making it look pretty

Thanks everyone!

FrontPage Server Extensions on Vista and Longhorn

08 February 2007 • by Bob • FrontPage, IIS

As most people that have installed IIS 7 on Windows Vista or Windows codenamed "Longhorn" have realized, there are no options to install the FrontPage Server Extensions, leaving the only possibly way to edit your web site that is hosted on a Vista/Longhorn computer is to edit the web site locally using the file system, or to use FTP to upload your files to a remote Vista/Longhorn computer.

The FrontPage Server Extensions (FPSE) 2002 are part of the Office XP system of products. The Office XP system, including FPSE 2002, left mainstream support on July 11th, 2005, according to the Office lifecycle policy. At that time, the FrontPage Server Extensions were removed from the Microsoft Download Center. Office policy is to remove software from the Download Center that is no longer supported. This policy allows us to focus our support efforts on the latest technologies. FPSE 2002 continues to be available on Windows Server 2003 in the Add Windows Components section of the Add/Remove Programs control panel.

FPSE 2002 will continue to be supported by security updates through the end of the extended support period, and all existing security content will remain available. For more information on the support lifecycle policy, see the Microsoft Lifecycle web page at the following URL:

http://support.microsoft.com/?pr=lifecycle

Because Microsoft realizes that the FrontPage Server Extensions are essential to many web hosting companies, the Internet Information Services product team is researching the development of an updated version of FPSE 2002 that will work with Microsoft Windows codenamed "Longhorn" and Microsoft Windows Vista.

Useful FrontPage Links

04 January 2007 • by Bob • FrontPage

 

I had a bunch of FrontPage shortcuts lying around, so I thought that I should list them together in a single blog.

FrontPage Themes and Templates

Much like inserting a hit counter on your web page, nothing screams "amateur" faster than using one of the built-in FrontPage themes or templates to design your web site. That being said, not all FrontPage themes and templates are bad - it's just that many of them are so awful that they give the rest of the market a bad name.

Personally, I have seen several professionally-designed templates that use FrontPage's Dynamic Web Templates (*.DWT) to construct the look and feel for some really great-looking web sites. It pays to be choosy, of course, and find the right theme/template that works for your target audience. With that in mind, I have several theme and template sites listed below.

For a large collection of non-FrontPage-specific templates, see the Open Source Web Design website at the following URL:

FrontPage Add-ins

At one time there were a bunch of add-ins for FrontPage lying around on the Internet, but sadly those days are gone. Just the same, here are a few of the remaining links that contain Add-ins for FrontPage:

FrontPage Administration

This is probably one of the most useful links for the FrontPage Server Extensions, but be forewarned - it's not an easy guide to follow:

FrontPage Software Development Kits (SDKs)

The FrontPage SDKs are no longer available from Microsoft, so I have them mirrored here:

File DescriptionFile LinkFile Size
FrontPage 1.0 SDK fpsdk10.zip 3.25 mb
FrontPage 1.1 SDK fpsdk11.zip 706.24 kb
FrontPage 97 SDK fpsdk20.zip 1.04 mb
FrontPage 98 SDK fpsdk30.zip 1.46 mb
FrontPage 2000 SDK fpsdk40.zip 797.12 kb
FrontPage 2002 SDK fpsdk50.zip 1.52 mb

2025 UPDATE: This post was written several years ago, and many of the links were no longer there. However, during a review of old blogs, I updated the old URLs to use the Internet Archive, so the links in this blog appear to work as they did when the blog was first written.

Using WSH to create an off-line backup of a FrontPage-enabled Web Site

02 January 2007 • by Bob • FrontPage, Scripting

As the old adage says, "Necessity is the mother of invention." With that in mind, I had a friend drop by my office the other day and ask me a question that started me on another quest for code.

What he asked me was whether there was a way where he could create an off-line backup of his web site. Of course, there are whole sections of the industry these days that are devoted to such things, but he wanted a simple way to create a backup on his home or work computer of his web site that is hosted at an ISP. Some time ago I wrote a FrontPage VBA macro for another friend that could be used to automate publishing, but only from within the FrontPage application itself. Since the FrontPage application exists as a COM object, I theorized that I could rewrite the code from the macro into a Windows Script Host (WSH) application that should do the trick. The code that you see below is the results of my little 'experiment'.

Usage Notes:

  • To use this script, you need to have a copy of FrontPage installed on the computer where you run the script.
  • In the script code you will need to update the source web site's URL and destination folder, as well as the user name and password to use when opening the source web site.
  • The WSH script will create a folder under "c:\backups" that will contain a folder named for your web site, and then it will create folders underneath the web site folder that are a concatenation of the current date and time. (This allows automating or manually re-running the script several times.)

Once you have taken the above items into account, copy & paste the script code into Notepad and save it to your computer with a "*.vbs" file extension. To execute the code, just double-click the script. The script will pop-up a message box when it has finished publishing a copy of the web site to your computer.

Option Explicit

' --------------------------------------------------
'
' Declare our constants.
'
' --------------------------------------------------

Const fpPublishAddToExistingWeb = 2
Const fpPublishCopySubwebs = 4
Const fpPublishLogInTempDir = 8
Const fpPublishCopyAllFiles = 64

' --------------------------------------------------
'
' This section defines the publishing variables.
'
' --------------------------------------------------

Dim strSourceUrl, strDestinationFolder
Dim strUsername, strPassword
Dim strBackupDate, strBackupTime

strBackupDate = Cstr(Year(Date())) & _
    Right("00" & Cstr(Month(Date())),2) & _
    Right("00" & Cstr(Day(Date())),2)
strBackupTime = Right("00" & Cstr(Hour(Time())),2) & _
    Right("00" & Cstr(Minute(Time())),2) & _
    Right("00" & Cstr(Second(Time())),2)

strSourceUrl = "https://www.example.com/"
strDestinationFolder = "c:\Backups\www.example.com\" & _
    strBackupDate & "_" & strBackupTime

strUsername = "server\administrator"
strPassword = "Password1"

' --------------------------------------------------
'
' This section checks to see if FrontPage is
' installed, and exits if it is not installed.
'
' --------------------------------------------------

' wait 10 seconds to "debounce" the server
WScript.Sleep 10000

' get a FrontPage Application object
Dim objFP: Set objFP = WScript.CreateObject("FrontPage.Application")

' exit if the object does not exist
If Err.Number = -2147352567 Then WScript.Quit

' --------------------------------------------------
'
' This section publishes the webs.
'
' --------------------------------------------------

' sanitize the publishing path
strDestinationFolder = CleanPath(strDestinationFolder)

' only continue the path can actually be created
If MakePath(strDestinationFolder) = True Then

    ' open the root web on the source
    objFP.Webs.Open strSourceUrl, strUsername, strPassword

    ' publish the root web to the destination
    objFP.ActiveWeb.Publish strDestinationFolder, _
        fpPublishAddToExistingWeb + fpPublishCopySubwebs + fpPublishCopyAllFiles + fpPublishLogInTempDir

    ' close the root web
    objFP.ActiveWeb.Close

End If

' --------------------------------------------------
'
' This section cleans up and exits.
'
' --------------------------------------------------

Set objFP = Nothing
WScript.Quit

' ----------------------------------------
'
' This function builds a path
'
' PASS: File path to construct
' RETURN: TRUE/FALSE for success/failure
'
' ----------------------------------------

Function MakePath(tmpText)
    On Error Resume Next
    Dim tx,ty,tz
    Dim tmpFSO
    Dim blnTempStatus
    Set tmpFSO = WScript.CreateObject("Scripting.FileSystemObject")
    blnTempStatus = True
    ty = Split(tmpText,"\")
    For tx = 0 To UBound(ty)
        tz = tz & ty(tx) & "\"
        If tmpFSO.FolderExists(tz) = False Then
            tmpFSO.CreateFolder(tz)
            If Err.Number <> 0 Then blnTempStatus = False
        End If
    Next
    MakePath = blnTempStatus
End Function

' ----------------------------------------
'
' This function sanitizes a path for valid characters
'
' PASS: File path to construct
' RETURN: New path
'
' ----------------------------------------

Function CleanPath(tmpText)
    On Error Resume Next
    Const tmpValid = "\.-1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
    Dim tx,ty,tz
    For tx = 1 To Len(tmpText)
        ty = Mid(tmpText,tx,1)
        If (InStr(tmpValid,ty)>0) Or (tx=2 and ty=":") Then
            tz = tz & ty
        Else
            tz = tz & "_"
        End If
    Next
    CleanPath = tz
End Function

Happy coding!


Note: This blog was originally posted at http://blogs.msdn.com/robert_mcmurray/

Happy New Year!

30 December 2006 • by Bob • Random Thoughts

2006 is rapidly coming to a close, and the new year is almost upon us. Before I go home for the weekend I wanted to wish everyone:

Happy New Year! 

Gutes Neues Jahr!

Feliz Año Nuevo!

Bonne Année!

С Новым годом!

Determining Access Column Types for FrontPage Database Results Fields

14 December 2006 • by Bob • FrontPage

Summary

Sometimes you want to know where the database column types values are obtained when looking at the database results auto-generated code, but there is no easy way of determining that information by looking at the database results code. This is because the database column types are defined as field types in the database definition. This blog lists those definitions.


More Information

There are two different places where the column/field types will be listed:

  • In the ASP code = fp_sColTypes
  • In the WEBBOT code = s-columntypes

Below is a list of the column/field types in an Access database:

Data Type Value
AutoNumber - Long Integer  3
AutoNumber - Replication ID  72
Text  202
Memo  203
Number - Byte  17
Number - Integer  2
Number - Long Integer  3
Number - Single  4
Number - Double  5
Number - Replication ID  72
Number - Decimal  131
Date/Time  135
Currency - General Number  6
Currency - Currency  6
Currency - Euro  6
Currency - Fixed  6
Currency - Standard  6
Currency - Percent  6
Currency - Scientific  6
Yes/No - True/False  11
Yes/No - Yes/No  11
Yes/No - On/Off  11
OLE Object  205
Hyperlink  203

References

For more information on database field types, see the following Microsoft KB article:

This article contains the following section of code that lists several database column/field types:

* DEFINEs for field types - provided for reference only.

#DEFINE ADEMPTY 0
#DEFINE ADTINYINT 16
#DEFINE ADSMALLINT 2
#DEFINE ADINTEGER 3
#DEFINE ADBIGINT 20
#DEFINE ADUNSIGNEDTINYINT 17
#DEFINE ADUNSIGNEDSMALLINT 18
#DEFINE ADUNSIGNEDINT 19
#DEFINE ADUNSIGNEDBIGINT 21
#DEFINE ADSINGLE 4
#DEFINE ADDOUBLE 5
#DEFINE ADCURRENCY 6
#DEFINE ADDECIMAL 14
#DEFINE ADNUMERIC 131
#DEFINE ADBOOLEAN 11
#DEFINE ADERROR 10
#DEFINE ADUSERDEFINED 132
#DEFINE ADVARIANT 12
#DEFINE ADIDISPATCH 9
#DEFINE ADIUNKNOWN 13
#DEFINE ADGUID 72
#DEFINE ADDATE 7
#DEFINE ADDBDATE 133
#DEFINE ADDBTIME 134
#DEFINE ADDBTIMESTAMP 135
#DEFINE ADBSTR 8
#DEFINE ADCHAR 129
#DEFINE ADVARCHAR 200
#DEFINE ADLONGVARCHAR 201
#DEFINE ADWCHAR 130
#DEFINE ADVARWCHAR 202
#DEFINE ADLONGVARWCHAR 203
#DEFINE ADBINARY 128
#DEFINE ADVARBINARY 204
#DEFINE ADLONGVARBINARY 205
#DEFINE ADCHAPTER 136

Day 4 of IIS at TechEd IT Forum in Barcelona

18 November 2006 • by Bob • IIS

Well, today was the last day, and the Microsoft Tech∙Ed: IT Forum 2006 in Barcelona has come to an end. I started off the day doing a presentation about using LogParser 2.2 with IIS. Matthew Boettcher took the following photo during the presentation:

Following that presentation, Matthew and I hosted a Chalk & Talk session with Paul Wright and Chad Kraykovic from microsoft.com and Sergei Anatov from the IIS product team. Matthew started off by giving a small recap of the topics that had been covered in the Connected Systems Infrastructure track at Tech∙Ed, then we opened the floor for the next hour and a half to answer any questions. We had around 20 or so people, and between the various attendees we had a great discussion.

A new question that's cropped up with customers over the past few days is whether there will be a web version for the Longhorn Core SKU. I don't have an answer on that, but I wanted to mention that it seems like a lot of customers are interested.

Here's a shot of the exhibition hall around the lunch break:

I worked at the IIS booth for the next three hours after the Chalk & Talk session, then I said my goodbyes to Matthew, Ivan, and Sergei, and my part of this conference was over.

My thanks to all the customers that dropped by and gave us such great feedback!

Blog Navigation

You are on page 68 of 72 pages.

Disclaimer

All content within this blog represents my personal views and opinions only. This content is not intended to represent the views, positions, or strategies of my employer or any other organization with which I may be associated. All content and code samples are provided "as is" without warranty of any kind.