Officially Supported Guest Operating Systems in Hyper-V 2012

My excellent friend, Aidan Finn, just posted on his blog the official list of supported guest operating systems for Hyper-V 2012.

I couldn’t help but notice that Windows XP and Windows Server 2003 were still on that list.  Question:  Will this be the last Hyper-V they will be supported on?  I haven’t got a clue.  I’m not a virtualization expert.  There is the fact that we are about to see support for XP and Server 2003 expire, but then there’s the fact that if MS doesn’t support them, they might be handing market share over to VMWare.  Of course, let us not forget that Windows Server 2012 isn’t here yet and even when it does get here, that means 10 years of support for virtualizing XP and Server 2003 from Microsoft.

Interesting points to ponder.  My company has one app that requires XP/Server 2003 and we are working hard to replace it.  I’m hoping that in two years, XP/Server 2003 will have fallen off my radar.  I recommend your making similar plans if you can.


Access 2013, Word 2013, and Excel 2013

It appears Office 2013 is well on its way.  Three of the teams have already made formal announcements via their blogs.

From the Official Microsoft Word Blog:

From the Official Microsoft Excel Blog:

From the Official Microsoft Access Blog:


Quick Intro to the Juniper SRX Series Security Services Gateway Part III

If you haven’t already, be sure to check out Part I and Part II.

In this third installment, we’ll look at what you will find when you first turn on the Juniper SRX Series Security Services Gateway and to get you through some initial configuration.  Be reminded that, as we discussed in one of the previous articles, the SRX I’m using was sold by Dell with the Dell Logo on the device and in the software.  Dell once sold the SRX as the PowerConnect J-SRX Series.  Therefore, while I fully expect there to be some differences between what I have and what you have (one not sold by Dell), I do expect them to be minimal. 

When you first power on the SRX, the first port is usually defaulted to be the port you connect to your ISP.  The other ports are arranged into switching ports all on the same vLAN.  DHCP is turned on and will start giving out IP addresses in the 192.168.1.x range.  As you may have guessed by now, the default IP address of the SRX is

While I did mention that we will not be concerned with the Graphical User Interface of the SRX, it is the fastest way to get the machine initially configured.  If you are going to use Internet Explorer, be sure to put the address in your trusted sites and make certain the trusted sites security setting is set to low.  Otherwise, much of the SRX website (referred to by Juniper as J-Web) will not work.  Below is the initial logon screen.


Do remember that you will not see the Dell logo or references to Dell if your SRX is not branded by and resold by Dell.  The default username is root and the default password is blank.  The root user is the super user of the SRX, and that shows off the SRX’s Unix heritage.  Once you log on the first time, you’ll see the initial setup screen.


From here you can fill in some basic information to get the device working.  Here are the values I’m entering:

  • Host Name:  I set this to “Juniper”.  You may call the device anything you wish to distinguish it on your network.
  • Domain Name:  I leave this blank.
  • Root Password:  Of course, having a blank password is NEVER a good idea.  There are no restrictions on the password, so it is your responsibility to choose something strong.
  • Verify Root Password:  What is says.
  • DNS Name Servers:  Replace these with the ones assigned by your ISP.
  • Domain Search:  Leave blank
  • Default Gateway:  Provided by your ISP.
  • Loopback Address:  Leave Blank
  • fe-0/0/0.0 Address:  If you have an SRX210, this field may read ge-0/0/0.0 Address depending on what kind of interface you have.  If you are going to get addresses assigned by your ISP via DHCP, leave this field blank.  Otherwise, fill in your static IP address here.
  • Enable DHCP on fe-0/0/0.0:  If you have an SRX210, this field may read ge-0/0/0.0 Address depending on what kind of interface you have. If you are going to get addresses assigned by your ISP via DHCP, check this box.  Otherwise, make sure it is unchecked.
  • Time Zone:  Pretty obvious, those I have never cared for this particular way of choosing time zones.  Why can’t people just use Eastern Standard, Pacific, Central, Mountain, etc.?  Finding the closes city that matches yours is a pain sometimes.
  • NTP Servers:  Fill these in if you so desire.
  • Allow Telnet Access:  Make sure this is checked.  The majority of examples I give will be using Telnet as the way to connect to the device.
  • Allow JUNOScript over Clear-Text Access:  Uncheck this.
  • Allow SSH Access:  Make sure this is checked.  We may use it later.

Now click Apply and wait for a few moments.  Once you are done, you’ll see a dashboard like this one:


This dashboard is fairly useful if you want to get a quick estimate of machine condition.  The first thing we need to do is create a new user to use other than the all powerful root.  Go ahead and click on the CONFIGURE tab at the top, then on the left menu that appears click on SYSTEM PROPERTIES and under that click USER MANAGEMENT.  You should now see something like this:


In the upper-right hand corner, click the Edit button.  In the new window that appears, click Add.  In the Add-User field, fill out the User Name, Full Name, Password, and Confirm Password fields.  Choose Super-User as the login class.  Don’t worry about the User ID field as it is not required.  Your entry should look something like this:


Notice I called my new user Administrator.  First, I’m a Windows guy.  Get used to it.  Smile  Second, usernames are Case Sensitive.  Keep that in mind regarding the SRX.  Go ahead and click OK all the way out until you see the SRX validate your settings and then the prompt telling you that you have to commit your changes.  You’ll find the Commit Options button at the top under the Troubleshoot tab.  On that menu, click Commit.  You’ll then see a Configuration Delivery progress window appear.  Once that window goes away, you’ll see the user you just created.


You can go ahead and close the J-Web user interface.  It is doubtful we will ever use it again.  You can probably see why just by the “clunky” feel it has.

Once you are done with these initial settings, you should now have Internet access with your new SRX.  In the next post, I’ll go over the default security settings the SRX puts in place for you.  After that, another brief technical over view on interface types and things like that.  We will then be done with our quick intro series on the Juniper SRX Series Security Services Gateway and will be ready for more serious material.


Sometimes in SSIS, You Just Need to Wait

In one SQL Server Integration Services (SSIS) package Data Flow, I have two OLE DB Commands that have to run one after the other.


The problem is that I am updating the same table in a Microsoft Access 2000 Database in both steps.  So, when there are many records, the second OLE DB Command throws an error complaining about the table being locked.  Of course, the table is locked by the first OLE DB Command that needs just a few more seconds to finish what it was doing. 

So how can I give enough time for the first OLE DB Command to finish before invoking the second one?  Well, in this particular case, I am blessed with the fact that I am pretty much guaranteed that there will most likely never be more than 40 records to go through this data flow when it runs (this information is from a single provider doctor office and 40 is the most patients he can see in one day).  So, all I need is a stop gap. 

The solution is to add a Script Component between the two OLE DB Commands.  Once there, edit the Script Component and add the following two lines:


What we are doing is calling the Sleep function in C# and telling it to count to 10 (the argument is in milliseconds).  This way, the first OLE DB Command has 10 seconds to finish; thereby unlocking the table, before the next one begins – and with 40 records that should be plenty of time.

I do not claim this solution to be elegant; however, it does work as intended and it solves the problem.  I welcome more elegant solutions in the comments.

For more information about the System.Threading.Thread.Sleep() function, see this MSDN web page.


Using Group Policy to Enable Network Discovery in a Domain

If you use Windows Vista or Windows 7 in a domain, you’ll notice that users probably can’t browse network resources such as file shares.  Also, when they do try to access a file share by typing in the URL to it, they’ll get a menu in Windows Explorer asking if they want to enable Network Discovery. 


Enabling network discovery requires Administrative rights and, subsequently, throws up a UAC prompt.  If your user is set up as a true Standard User, the UAC prompt will ask for an Administrator username and password. 

Obviously, this is not ideal if you have set up several machines at one time and aren’t about to give your users Administrative rights.  There is a nice solution, however.  On a domain controller, open up the Group Policy Management tool under Administrative Tools and navigate to:

Computer Policy\Policies\Administrative Templates\Network\Link-Layer Topology Discovery.  There are two settings there. 


The first setting allows the computer to find network resources such as file shares.  The second setting allows other computers to find this one.  You should certainly enable the first.  The second is dependent on whether you are sharing anything from this computer.


If Connecting to Someone Else’s FTP/SFTP/FTPS Server Using SSIS, Be Kind

In SQL Server Integration Services, there is a FTP Task you can use to upload and download files to or from, respectively, a FTP site.  If you need to upload or download from a SFTP or FTPS site, you’ll need Ivan Peev’s SFTP Task from CozyRoc (  I’ll have a lot more to say about Ivan and his superb suite of tools for SSIS later.  The issue we are talking about today is showing some common courtesy to the owner of the FTP site via a way you probably haven’t thought of.

A few months ago, I got a call from Joel Hoover who maintains the FTP site for RealMed, our clearinghouse we use to send electronic claims through (  Joel informed me that, according to his logs, when we downloaded or uploaded files to his site, we were making upwards of almost 500 connections per day.  After doing some quick math, I realized that we should, at most, be making about 6 connections per day since we only download or upload files from their site 6 times a day, so where did he get 500 from?  I informed him that this must be some sort of mistake but then he emailed me a screenshot of the logs with concrete evidence that, yes, we were connecting to this site around 500 times per day – sometimes more.  I did some digging and found the culprit. 

In SQL Server Integration Services, each Task that executes something against a data source must have a Connection Manager.  The FTP Task is no exception.  It has a FTP Connection Manager (or SSH if you are using Ivan’s tool).  And, like most of the other Connection Managers, it has configurable properties – and I’m betting some of you know where I’m going with this already.  Here is a screenshot:


Notice the properly value RetainSameConnection.  By default this is typically set to FALSE.  You have to remember to set it to TRUE.  So, what was happening is that as I looped through all the files on Joel’s FTP site in my SSIS package, I was constantly:

Open connection
perform some operation
Drop connection
open connection
perform some operation
drop connection
open connection
perform some operation
drop connection

You can probably see how the FTP owner, Joel, was freaking out over this.  By changing that one value, I was able to reduce our number of connections from well over 500 down to about half a dozen for the entire day.  By setting the value of RetainSameConnection to TRUE, the first connection made to the FTP site is retained for all future uses of that Connection Manager throughout the life of the SSIS package.

In fact, I would say that, unless you are changing your connection string in your connection manager (i.e. looping through csv files, for example), I would recommend always changing the value of RetainSameConnection to TRUE.  This will reduce the overall overhead of your SSIS package and not hammer your data source so much.


Paul Thurrott and Raymond Chen

Paul Thurrott is one of my favorite authors and I do follow his blog religiously.  Paul has written books such as Windows 7 Secrets which can be found on here.  He is also currently working on Windows 8 Secrets, his book about the new Windows operating system due later in 2012.  Be sure to check out his site – I have the link on the right.

Raymond Chen is my programming god and I also follow his blog religiously.  He is a developer at Microsoft on the Windows Shell team which is Windows Explorer, the Start Menu, and desktop.  He also has a book at, The Old New Thing, which is a must-read for all Windows developers.  Do check out his blog, The Old New Thing.  Again, link on the right.

A few years ago, I was not able to go to one of the big Microsoft events of the year after spending a lot of time planning to go.  However, Paul and Raymond were going.  So, I got brave and emailed both of them, explaining my plight, and I requested a picture of the two of them together.  I honestly did not expect a response so imagine my surprise when they both responded and made plans to meet each other!  They even kept copying me on the email exchange – including sharing phone numbers!  I barely expected them to respond, but to actually charge me with that kind of trust was shocking to say the least. 

I found the picture digging through my files so I thought I would share.  Raymond Chen (left) and Paul Thurrott (right).



Accessing a remote file share in SQL Server Integration Services

Imagine the following scenario or something close to it:

  • You have an IPSEC VPN to another network from yours.
  • There are some CSV (or other) files on a file share that you need to access.
  • The computer owning the file share is not a member of your Windows domain.
  • For some reason (just pick one) the idea of installing a FTP service or other thing on the remote computer is not an option.

This presents a problem because, unless the person who owns the remote computer is willing to seriously compromise security (and you have the guts to ask him to do so), you aren’t getting to those files using SSIS – at least not in a completely automated fashion.  Or are you?

Using SQL Server Integration Services, you can access a remote file share with a username and password provided by the remote computer owner while SSIS is running as a scheduled task using the SQL Agent – completely automated.  Check out the following screen shot.


The rest of the SSIS package is cut off as it is irrelevant to our discussion.  We are interested in, specifically, the Execute Process Task.  Let’s double-click on that task to see what’s up.


In the execute process task we are doing something I am certain most of you have done before – use the command interpreter – cmd.exe – to map a network drive using the NET USE command.  For those that need a refresher on the NET USE command, visit this TechNet web page.

Let’s go through the fields to see what we have.

  • RequireFullFileName – False

Indicates whether the task fails if the executable is not found in the specified path. We aren’t worried about this since we know CMD.EXE is in %windir%\system32. 

  • Executable – c:\windows\system32\cmd.exe

The fully qualified path to the executable you want to run.  I assume you have installed Windows to the default directory. Use %windir% if you are not sure or have Windows installed some place else.  So that would be %windir%\system32\cmd.exe.

  • Arguments – /C net use y: machineIP\sharename /USER:username password

Specifies the arguments for the executable. In this case, the NET USE command and its arguments.  Also, notice that we are throwing the “/C’” switch to cmd.exe. That means to carry out the command specified by string and then terminate.  We don’t want a command prompt lingering around after we are done.  Basically, do your job and leave is what we are saying.

  • WorkingDirectory – c:\windows\system32

Specifies the working directory of the executable. Set to the path that cmd.exe is found in. Use %windir% if you are not sure or have installed Windows elsewhere.

  • FailTaskIfReturnCodeIsNotSuccessValue – True

If we get a failure code for the return value of the command, then fail the task.  You, in most cases I’m sure, want this to be true.

  • SuccessValue – 0

Obviously, we must spell out the success value to look out for.  CMD.EXE usually returns a value of 0 if a command is successful.

  • TimeOut – 0

It should take no time at all to map a drive.  The default value is fine.

  • WindowsStyle – Hidden

Remember, we are running this fully automated.  You probably will not even be logged on the computer when this SSIS package runs.  Therefore, you do not want a Window.

Once this task runs in SSIS, you should then be able to access any files in the remote file share.  Do keep in mind that what you can do with those files is up to the remote administrator.  If you cannot write to the files and need to, you may need to ask the remote administrator for write privileges.  Also, accessing this drive will work as long as the SSIS package is executing.  Once execution of the SSIS package is complete, the file share access goes away as it is not persistent. 

I’d be interested to know if this helps anyone.