SBS 2008 to SBS 2008 Migration Fails When "Windows SBS User Policy" Edited

[Today's post comes to us courtesy of Justin Crosby and Chris Puckett]

Windows Small Business Server 2008 creates a group policy called "Windows SBS User Policy", one of the tasks of this group policy is to add a few shortcuts (OWA, RWW, and WSS) to IE on SBS clients.  If this list is modified AND you attempt a SBS 2008 to SBS 2008 migration the migration will irrecoverably fail.  You will receive this following installation issue and be unable to complete the migration:

The installation of Windows Small Business Server 2008 cannot finish.

At this point, you must restore the original server from backup and completely start the migration process over.  To avoid this issue please complete the following steps prior to a SBS 2008 to SBS 2008 migration:

Note: This only needs to be done if the policy has been edited. If you're not sure, there is no harm in doing these steps as a precaution.

  1. Open gpmc.msc and edit the "Windows SBS User Policy".
  2. Navigate to User Configuration -> Policies -> Windows Settings -> Internet Explorer Maintenance -> URLs.
  3. View the properties of Favorites and Links.
  4. Make a note of all the Favorites and Links (This has likely been customized from the default).
  5. Remove all the Favorites and Links and save the policy.

Once you complete the migration, the favorites for OWA, RWW and Companyweb will be automatically recreated. You will then have to manually re-add your custom URLs.

SBSSetup.log Errors:  

[908] 080925.155308.3044: Setup: Task ConfigureIE succeeded.
[908] 080925.155308.3200: TaskManagement: In TaskScheduler.RunTasks(): The "ConfigureIE" Task or the "NET" TaskProcessor threw an Exception during the ITaskProcessor.Run() call:System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.WindowsServerSolutions.ClientSetup.IEUtility._normalFavoritesEX()
   at Microsoft.WindowsServerSolutions.ClientSetup.IEUtility..ctor()
   at Microsoft.WindowsServerSolutions.ClientSetup.IEUtility.DelIEFavorites(String keyName)
   at Microsoft.WindowsServerSolutions.IWorker.Tasks.ConfigureIE.Run(ITaskDataLink DataLink)
   at Microsoft.WindowsServerSolutions.TaskManagement.TaskProcessors.NetTaskProcessor.Run(Task currentTask, ITaskDataLink dataLink)
   at Microsoft.WindowsServerSolutions.TaskManagement.Data.Task.Run(ITaskDataLink dataLink, IDictionary`2 taskProcessorMap)
   at Microsoft.WindowsServerSolutions.TaskManagement.TaskScheduler.RunTasks(String taskListId, String stateFileName)

[908] 080925.155308.3200: Setup: An error was encountered on the TME thread: System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.WindowsServerSolutions.ClientSetup.IEUtility._normalFavoritesEX()
   at Microsoft.WindowsServerSolutions.ClientSetup.IEUtility..ctor()
   at Microsoft.WindowsServerSolutions.ClientSetup.IEUtility.DelIEFavorites(String keyName)
   at Microsoft.WindowsServerSolutions.IWorker.Tasks.ConfigureIE.Run(ITaskDataLink DataLink)
   at Microsoft.WindowsServerSolutions.TaskManagement.TaskProcessors.NetTaskProcessor.Run(Task currentTask, ITaskDataLink dataLink)
   at Microsoft.WindowsServerSolutions.TaskManagement.Data.Task.Run(ITaskDataLink dataLink, IDictionary`2 taskProcessorMap)
   at Microsoft.WindowsServerSolutions.TaskManagement.TaskScheduler.RunTasks(String taskListId, String stateFileName)
   at Microsoft.WindowsServerSolutions.Setup.SBSSetup.ProgressPagePresenter._RunTasks(Object sender, DoWorkEventArgs e)
[2228] 080925.155308.5384: Setup: _UnhandledExceptionHandler: Setup encountered an error: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.Reflection.TargetInvocationException: The TME thread failed (see the inner exception). ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at Microsoft.WindowsServerSolutions.ClientSetup.IEUtility._normalFavoritesEX()
   at Microsoft.WindowsServerSolutions.ClientSetup.IEUtility..ctor()
   at Microsoft.WindowsServerSolutions.ClientSetup.IEUtility.DelIEFavorites(String keyName)
   at Microsoft.WindowsServerSolutions.IWorker.Tasks.ConfigureIE.Run(ITaskDataLink DataLink)
   at Microsoft.WindowsServerSolutions.TaskManagement.TaskProcessors.NetTaskProcessor.Run(Task currentTask, ITaskDataLink dataLink)
   at Microsoft.WindowsServerSolutions.TaskManagement.Data.Task.Run(ITaskDataLink dataLink, IDictionary`2 taskProcessorMap)
   at Microsoft.WindowsServerSolutions.TaskManagement.TaskScheduler.RunTasks(String taskListId, String stateFileName)
   at Microsoft.WindowsServerSolutions.Setup.SBSSetup.ProgressPagePresenter._RunTasks(Object sender, DoWorkEventArgs e)
   at System.ComponentModel.BackgroundWorker.WorkerThreadStart(Object argument)
   --- End of inner exception stack trace ---
   at Microsoft.WindowsServerSolutions.Setup.SBSSetup.ProgressPagePresenter.TasksCompleted(Object sender, RunWorkerCompletedEventArgs e)
   --- End of inner exception stack trace ---
   at System.RuntimeMethodHandle._InvokeMethodFast(Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeTypeHandle typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
   at System.Delegate.DynamicInvokeImpl(Object[] args)
   at System.Windows.Forms.Control.InvokeMarshaledCallbackDo(ThreadMethodEntry tme)
   at System.Windows.Forms.Control.InvokeMarshaledCallbackHelper(Object obj)
   at System.Threading.ExecutionContext.runTryCode(Object userData)
   at System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode code, CleanupCode backoutCode, Object userData)
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
   at System.Windows.Forms.Control.InvokeMarshaledCallback(ThreadMethodEntry tme)
   at System.Windows.Forms.Control.InvokeMarshaledCallbacks()
   at System.Windows.Forms.Control.WndProc(Message& m)
   at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   at Microsoft.WindowsServerSolutions.Common.Wizards.Framework.WizardFrameView.Create()
   at Microsoft.WindowsServerSolutions.Common.Wizards.Framework.WizardChainEngine.Launch()
   at Microsoft.WindowsServerSolutions.Setup.SBSSetup.MainClass._LaunchWizard()
   at Microsoft.WindowsServerSolutions.Setup.SBSSetup.MainClass.RealMain(String[] args)
   at Microsoft.WindowsServerSolutions.Setup.SBSSetup.MainClass.Main(String[] args)
[2228] 080925.155308.5696: Setup: Removed the password.
[2228] 080925.155308.5696: Setup: Deleting scheduled task at path MicrosoftWindowsWindows Small Business Server 2008 with name Setup
[2228] 080925.155308.5852: Setup: Removed SBSSetup from the RunOnce.