Migrating from SBS 2003 to Windows Server Essentials 2012 R2

migr2Just as a heads up, most of the Technet articles I found on doing a SBS 2003 to Windows Server 2012 R2 Essentials migration cover Server 2012, not 2012 R2 and they all mention installing the server in “Migration Mode” and grabbing the “Server Migration Prep Tool” from a folder on the DVD called support\tools.


Server 2012 Essentials R2 is a separate product than Server 2012 Essentials, and the two, tho related, do not share some bits.

I found out the hard way by doing an install, then seeing the Migration Mode stuff, and restarting the install, only to find there was no migration mode option.

But, they do have a document that spells it all out for you, without using the missing Migration Mode install… Lots of threads with “I just installed Server 2012 R2 Essentials and I am also not seeing the migration install option anywhere.” messages.  Happily someone pointed them (and me) here:

Migrate from Previous Versions to Windows Server 2012 R2 Essentials or Windows Server Essentials Experience which can be found here:  http://technet.microsoft.com/en-us/library/dn408633.aspx

Posted so I don’t lose the link, and maybe people Googling will find it easier than I did. 🙂

Installing Chrome on a Windows 2008 R2 Terminal Server

Chrome is a pretty fantastic browser; in fact, I’m using it right now!  However, it wants to live in your AppData directory, and that’s a drag for users on Terminal Servers since administrators can’t easily install the application into that location, and users can’t install it themselves if they’re not administrators…

But Google has come to the rescue with an alternate installer that you can grab from their website: http://support.google.com/chrome/bin/answer.py?hl=en&answer=126299

So, log yoursef on the terminal server as an adminsitrator and download the Alternate installer for all user accounts.

Google is going to freak you out with a big button that says “Accept and Install” after you review the EULA.  DON’T PANIC! You;’ll be allowed to download the installer (ChromeStandaloneSetup.exe) and install it using the Programs app in the Control Panel, as you install all programs on the terminal server.  (You do use that, right?)

Backing Up To Multiple Removable Drives in Windows 2008 R2

These days, we use a dock that accepts SATA drives as a target for backing up client systems.  It allows for the most flexibility as data resources grow, easy swapping of media, etc.

However, Windows 2008 Server Backup doesn’t like this arrangement.  The wizard wants all targets present at the time of configuration.  Since we only have one dock (and a minimum of two drives), if we try to add additional hard drives to the job, the wizard fails with the error: “The filename, directory name, or volume label syntax is incorrect” and the backup job is not modified.

Happily, Microsoft comes to the rescue with a KnowledgeBase article which outlines the three options:

  1. Reattach all disks (not an option in our situation)
  2. Delete the missing disk (not an option when there’s only one disk configured; you have to delete the whole job… plus, we *want* the missing disk to be part of the job since *all* disks except the one that’s connected will be missing)
  3. Do some command line voodoo.  (Bingo!)

So, the steps are:

  1. Find “Command Prompt” in the start menu and “Run as Administrator” from the right-click menu
  2. Get the drive ID of the disk we want to add to the job as we’ll need it for the next step:
    1. At the command prompt, type wbadmin get disks
    2. Each drive attached to the system will be listed; so find the removable disk and copy the long string of numbers (and the brackets) that make up the “Disk Identifier”  Copy this to the clipboard (using Mark, Paste from the Window menu… I use ALT+SPACE, E, M as a keyboard shortcut)
  3. At the command prompt, now type WBADMIN ENABLE BACKUP -addtarget:{PASTE-YOUR-DISK-ID-HERE} (I use the keyboard shortcut ALT+SPACE, E, P)
  4. You’ll get a one or a bunch of prompts (depending on if the drive is formatted for backups or not, if existing backups are present on the disk, etc.) which mimic the questions in the wizard about the disk, answer appropriately.
  5. Finally, make sure you answer Y to the question “Do you want to enable scheduled backups with the above settings?”

The script will finish running and eventually leave you back at a command prompt.  You can close the window.

Now, when you look at the Backup screen, you’ll see multiple targets in the DESTINATION settings, and the Destination Usage drop down will show the drive that’s connected PLUS the disconnected drive.

And we’re all set.

Back Up Microsoft Virtual Server Images…

This article first appeared at the now-closed Win32Scripting site. Since I find it useful, and my bookmark no longer works, I have been unable to reach its author, Jeff Trumbull, so I hope he doesn’t mind that I’ve archived it.

Author: Jeff Trumbull

Backup files that make a Microsoft virtual server with only about 1 minute of down time. Suspends the virtual server, takes a shadow copy , starts the virtual server then copies virtual server files. This could be used to copy any open files. Requires vshadow.exe from vss sdk.


On Error Resume Next

Set objShell = CreateObject ("WScript.Shell")
set objFSO=CreateObject("Scripting.FileSystemObject")
Set virtualServer = CreateObject("VirtualServer.Application")
DestBackupDir = "your backup path"
sExCmd = "CreateVSS.cmd"
Set oFileSys = CreateObject("Scripting.FileSystemObject")
if oFileSys.FileExists(sExCmd) then oFileSys.DeleteFile(sExCmd)
set oExCmd = oFileSys.CreateTextFile(sExCmd, CopyOverwrite)

For each objVM in virtualServer.VirtualMachines
     ‘See if vm machine is running. If so then do backup
     If objVM.State = 5 then
          ‘Save state the virtual machine
          set saveTask = objVM.Save
          ‘Loop waiting for task completion – and display status
          while not saveTask.isComplete
              WScript.Sleep 1000
               ‘Copy .VMC and .VSV files
               MyArray = Split(objVM.File,"\")
               Filename = MyArray(Ubound(MyArray))
               objFSO.CopyFile objVM.File,DestBackupDir & Filename
               MyArray = Split(objVM.SavedStateFilePath,"\")
               Filename = MyArray(Ubound(MyArray))
               objFSO.CopyFile objVM.SavedStateFilePath,DestBackupDir & Filename
          End If
Set objVM = Nothing

‘ Create Shadow copy of VM drive
oExCmd.WriteLine "vshadow.exe -script=setvar1.cmd -p d:"
oExCmd.WriteLine "call setvar1.cmd"
oExCmd.WriteLine "vshadow.exe -el=%SHADOW_ID_1%,x:"
Result = objShell.run(sExCmd,vbMinimized, TRUE)

‘ Start VM machine up from saved state
For each objVM in virtualServer.VirtualMachines
          ‘See if vm machine is Saved. If so then resume
           If objVM.State = 2 then
               ‘Start virtual machine
           End If

Set objVM = Nothing
WScript.Sleep 10000

If Result = 0 then
         ‘Loop through all vm machines
         For each objVM in virtualServer.VirtualMachines
            ‘See if vm machine is running. If so copy shadow backup of vm disk drives
             If objVM.State = 5 then
                  ‘Copy virtual hard disks and undo disks
                  For each vhd in objVM.HardDiskConnections
                       MyArray = Split(vhd.undoHardDisk.file,"\")
                       Filename = MyArray(Ubound(MyArray))
                       SourceName = "x" & Right(vhd.undoHardDisk.file,Len(vhd.undoHardDisk.file)-1)
                       wscript.echo vhd.undoHardDisk.file
                       wscript.echo SourceName
                       objFSO.CopyFile SourceName,DestBackupDir & Filename
                       MyArray = Split(vhd.HardDisk.file,"\")
                       Filename = MyArray(Ubound(MyArray))
                       SourceName = "x" & Right(vhd.HardDisk.file,Len(vhd.HardDisk.file)-1)
                       objFSO.CopyFile SourceName,DestBackupDir & Filename
             End If
End If

‘ Shutdown all shadow copy instances
if oFileSys.FileExists(sExCmd) then oFileSys.DeleteFile(sExCmd)
set oExCmd = oFileSys.CreateTextFile(sExCmd, CopyOverwrite)
oExCmd.WriteLine "Echo y | vshadow.exe -da"
Result = objShell.run(sExCmd,vbMinimized, TRUE)

‘Script ends
wscript.echo "done"

Using Access and Outlook to Send To Mailing Lists

Perhaps the most popular article on the site explains how to send email to a bunch of people using Access and Outlook.

It has garnered its fair share of comments and emails, and one came in today that I figured I’d share and then elaborate on.

The mail reads (in part):

I have a following question: How to modify this module to be able to send messages to various mailing lists that I predefine in respective queries? In other words, I have in my database 3 categories of customers (in 3 different queries) andI want to address them with a different message. Do I need to create 3 macros running 3 modules each referring to a separate query with a given category of customers or is there another way to do it?

You don’t have to create modules for each list, you just need to be able to tell the macro which query you want to use before running it.
Continue reading Using Access and Outlook to Send To Mailing Lists