Exchange 2007 and Public Folders

It appears that the rumors of the demise of Public Folders has been greatly exaggerated. Per the Exchange Team Blog, Exchange 12 (Exchange 2007) will continue to support public folders and will actually improve manageability.

Personally, I recommend using SharePoint Services (Windows SharePoint Services – WSS) and SharePoint Portal Server (SPS) for collaborate application development for all future in-house initiatives and strongly suggest moving any public folder applications that you might have to WSS or SPS in the near future.

The writing is on the wall that WSS and SPS are the way to do this in the future.



Clustering IIS and SQL on the Same Boxes


That pretty much summarizes my feelings on this topic.

I have seen this proposed as a configuration before many times. The web guys say they need HA SQL for their web site data and then they figure that since they are getting a cluster that they can use it for IIS, too. No, don’t do it. While at first glance it makes some sense, if you start thinking big picture, then you start seeing the problems. First off, the big picture for an HA website with HA SQL backend should look like this:

  1. Clients connect to the Internet to access the web site.
  2. The client then connects to the web site through the firewall. The firewall protects the IIS servers in the web site. This is where best practices start to kick in. Using NLB with IIS provides a scalable and highly available web platform.
  3. The IIS server communicates with the SQL MSCS cluster behind another firewall. Again, a best practice to keep the SQL data from being compromised in the event the web server is compromised.

The result?

  • IIS is protected, scalable, and highly available
  • SQL is extremely well protected and highly available

The alternative solution (meant to save money) is to use one MSCS cluster to host SQL and IIS. In this solution:

  1. Clients connect to the Internet to access the web site
  2. The client then connects to the web site through the firewall. The firewall protects the IIS servers in the web site.
  3. The IIS server communicates with SQL on the same cluster perferrably on the same node at the same time.

The problems with this configuration are:

  • SQL is not as well protected
  • IIS is no longer scalable
  • IIS 6.0 is not MSCS cluster aware

In order to make it work (IIS and SQL on the same MSCS cluster), you need to:

  1. Create a resource group
  2. Use the generic resource script for IIS 6.0
  3. Create your SQL instance in the same resource group

Since SQL and IIS are in the same resource group, they will failover together and be on the same node all of the time. You will want to do this because if there are problems with a node causing one of the resources to fail, you probably will want all of the resources to fail, too.

However, again, I strongly recommend against putting IIS and SQL on the same MSCS implementation.

Cluster Training Survey

As it has been blogged before, Rodney R. Fournier and I run training summits for Windows Server 2003 clustering through and some other partners.

We would really appreciate it if you (the reader) could take about 5 minutes and give us your feedback at:

They are simple questions from simple people (me).


Update, here are the results and some comments:

Q1. If you were to take a Windows clustering class, which would you find to be the most important to you?

  • Server Clustering in General (MSCS) 13.89%

  • Network Load Balancing 0.00%

  • Step-by-Step Labs 25.00%

  • Specific Information on how to Cluster Certain Apps (i.e. Exchange and SQL) 61.11%

While the labs are top notch, it is a good thing that we also decided to develop a couple of modules on specific applications. 🙂

Q2. What would be the most important factor in choosing to attend a class on clustering?

  • Cost 27.59%

  • Location 13.79%

  • Time of the Year 0.00%

  • Trainer Experience 41.38%

  • Course Materials 17.24%

I am glad people are getting the message that trainer experience and ability really matter. I am a bit concerned by the cost factor, but I am going to assume that if the cost is reasonable that it will not be an obstacle.

Q3. Which location for a class would you prefer most?

  • Denver 20.00%

  • Minneapolis 0.00%

  • New York 20.00%

  • Washington DC 16.00%

  • Seattle 44.00%

Seattle? I threw that one in as an after thought. I put in Denver because it is my home and it is a hub for a couple of airlines. I put in Minneapolis because we have some scheduled for there and I wondered what people thought. I am a bit shocked by the strong showing for Seattle, though.

Q4. What would you find more important to you in a trainer?

  • Microsoft Certified Trainer (MCT) 25.00%

  • Microsoft Most Valued Professional (MVP) 57.14%

  • Published Author 3.57%

  • Well Known Speaker at Conferences 14.29%

I have to admit that I was a bit shocked at this one. The MVP brand certainly is well recognized, but much more than I thought.

Q5. Which would you prefer in attending training on the road?

  • Price for Class Alone – You find own accomodations 17.24%

  • Bundled Price – Accomodations are part of the fee 13.79%

  • Option Between the two 68.97%

I don’t know why I wasted my time on this one. 🙂 It really was pretty obvious.

File and Print Migration

It is a pretty common scenario for most companies. The old file and print server (they are usually combined on the same server in most organizations) is getting old and needs to be refreshed with new hardware. This task sounds pretty simple, but it can be a major pain. After all, every client machine has hard coded mappings (unless you use scripts to deploy all of them) for file shares and printer shares.

Print Migrator 3.1 and the File Server Migration Tool (FSMT) can both be downloaded from Microsoft’s website. These two tools can then be used to help migrate from one server to another, which works pretty well. The FSMT is pretty slick in that it also configures the new file server with a DFS root that uses the old file server’s name, so it is almost 100% transparent to clients.

While these tools exist, I find it just as easy to use a manual process

  1. Build New Server 

  2. Create Printers and share them – You can use the print migrator tool to do this, but I prefer to do it manually so that I can update drivers at the same time and test them

  3. Create File Shares – You can use the FSMT to do this, but I prefer to copy the shares key from the registry and import it into the new server

  4. Migrate File data using Robocopy – Make sure you use the /mir switch or the /copyall switch depending on which version you use to get all of the NTFS permissions – I generally use robocopy /e /r:0 /w:0 /copyall /xo

  5. Copy existing logon scripts and then edit them to create new logon scripts with references to the new file server

  6. Create a script to remap home drives to the new file server

  7. Create printer script to change all printers to the new location

  8. Migrate a few test users in a pilot

  9. Use robocopy on a regular basis to keep all content synched

  10. Test, test, and test some more with more pilot users until confident that everything works

  11. Migrate everyone else

  12. Retire old server

The script that I use as part of the logon script to reset the printers follows:

‘HKEY_CLASSES_ROOT (0x80000000)

‘HKEY_CURRENT_USER (0x80000001)

‘HKEY_LOCAL_MACHINE (0x80000002)

‘HKEY_USERS (0x80000003)


‘On Error Resume Next

const HKEY_LOCAL_MACHINE = &H80000002

const HKEY_CURRENT_USER = &H80000001

strComputer = “.”

strOldServer1 = “OldServerNameHere”

strNewServer = “NewServerNameHere”

Set oReg=GetObject(“winmgmts:{impersonationLevel=impersonate}!\\” &_

strComputer & “\root\default:StdRegProv”)

strKeyPath = “Printers\Connections”

oReg.EnumKey HKEY_CURRENT_USER, strKeyPath, arrSubKeys

For Each subkey In arrSubKeys

    IF INSTR(1,subkey,strOldServer1,vbTextCompare) Then

        strDeleteKey = strKeyPath + “\” + subkey

        oReg.DeleteKey HKEY_CURRENT_USER, strDeleteKey 

        strAddKey = Replace(strDeleteKey,strOldServer1,strNewServer)

        oReg.CreateKey HKEY_CURRENT_USER, strAddKey

        oReg.SetStringValue HKEY_CURRENT_USER, strAddKey, “Provider”, “win32spl.dll”

        oReg.SetStringValue HKEY_CURRENT_USER, strAddKey, “Server”, “\\” & strNewServer


    END IF


I hope this helps the next poor guy that has to do one of these so called simple migrations.