<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><title type="html">Ben Armstrong</title><subtitle type="html">Talking about Hyper-V and virtualization at Microsoft.</subtitle><id>http://blogs.msdn.com/b/virtual_pc_guy/atom.aspx</id><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/virtual_pc_guy/" /><link rel="self" type="application/atom+xml" href="http://blogs.msdn.com/b/virtual_pc_guy/atom.aspx" /><generator uri="http://telligent.com" version="5.6.50428.7875">Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><updated>2013-02-25T16:26:04Z</updated><entry><title>Hyper-V Replica and Name Resolution</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/06/14/hyper-v-replica-and-name-resolution.aspx" /><id>http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/06/14/hyper-v-replica-and-name-resolution.aspx</id><published>2013-06-14T07:13:35Z</published><updated>2013-06-14T07:13:35Z</updated><content type="html">&lt;p&gt;I have been running Hyper-V Replica in my house for a while now.&amp;#160; A while ago I noticed that some of my virtual machines kept on going into a critical replication state.&amp;#160; It took a while for me to figure out what was happening:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/3817.1_5F00_2E6C92F1.png" target="_blank"&gt;&lt;img title="1" style="display: inline; background-image: none;" border="0" alt="1" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/3733.1_5F00_thumb_5F00_78F3D0CB.png" width="644" height="419" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/1273.2_5F00_2674F08F.png" target="_blank"&gt;&lt;img title="2" style="display: inline; background-image: none;" border="0" alt="2" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/1780.2_5F00_thumb_5F00_0D0CED55.png" width="644" height="418" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Can you spot the difference between the working virtual machine and the failed one?&amp;#160; The failed virtual machine is replicating using the fully qualified domain name – while the working one is using the short network name.&amp;#160; Looking at the event log for this virtual machine confirmed that something was going wrong with name resolution:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/5415.5_5F00_0CA0BA60.png" target="_blank"&gt;&lt;img title="5" style="display: inline; background-image: none;" border="0" alt="5" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/6825.5_5F00_thumb_5F00_454B646D.png" width="644" height="463" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now for a confession.&amp;#160; I am a bit of a klutz when it comes to configuring name resolution.&amp;#160; For this reason my initial thought was to just change my virtual machines to all use the short network name for replication.&amp;#160; But there was a problem with this approach.&amp;#160; When you perform a planned failover using Hyper-V Replica we automatically switch to using the fully qualified domain name.&lt;/p&gt;  &lt;p&gt;So I bit the bullet and tracked down some colleagues who were able to help me sort out my DNS server – and once that was done Hyper-V Replica was rock solid again.&lt;/p&gt;  &lt;p&gt;Cheers,   &lt;br /&gt;Ben&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10425873" width="1" height="1"&gt;</content><author><name>Benjamin Armstrong</name><uri>http://blogs.msdn.com/Virtual-PC-Guy/ProfileUrlRedirect.ashx</uri></author><category term="Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Hyper_2D00_V/" /><category term="Windows Server 8" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Windows+Server+8/" /></entry><entry><title>Going to TechED?  See you there!</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/05/28/going-to-teched-see-you-there.aspx" /><id>http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/05/28/going-to-teched-see-you-there.aspx</id><published>2013-05-28T20:27:28Z</published><updated>2013-05-28T20:27:28Z</updated><content type="html">&lt;p&gt;Next week I am heading off to TechED.&amp;#160; What will I be talking about?&amp;#160; It’s a secret…&lt;/p&gt;  &lt;p&gt;Seriously.&amp;#160; I have two sessions which are currently showing up as:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/MDC-B330" target="_blank"&gt;&lt;img title="image" style="border: 0px currentcolor; display: inline;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/7536.image_5F00_656F8BEE.png" width="770" height="80" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://channel9.msdn.com/Events/TechEd/NorthAmerica/2013/MDC-B331" target="_blank"&gt;&lt;img title="image" style="border: 0px currentcolor; display: inline;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/5483.image_5F00_774C1FBB.png" width="552" height="75" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;And I can’t tell you any more than that.&amp;#160; But, if it is a secret – it has to be something good, right?&lt;/p&gt;  &lt;p&gt;I will also be on the show floor for most of the week, so feel free to hunt me down and have a chat about what you have been doing with Hyper-V!&lt;/p&gt;  &lt;p&gt;Cheers,   &lt;br /&gt;Ben&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10421885" width="1" height="1"&gt;</content><author><name>Benjamin Armstrong</name><uri>http://blogs.msdn.com/Virtual-PC-Guy/ProfileUrlRedirect.ashx</uri></author><category term="Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Hyper_2D00_V/" /><category term="TechEd" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/TechEd/" /><category term="TradeShow" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/TradeShow/" /></entry><entry><title>Rename the guest OS to match the virtual machine name on Hyper-V</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/05/13/rename-the-guest-os-to-match-the-virtual-machine-name-on-hyper-v.aspx" /><link rel="enclosure" type="application/zip" length="544" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-41-82-23/namecheck.zip" /><id>http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/05/13/rename-the-guest-os-to-match-the-virtual-machine-name-on-hyper-v.aspx</id><published>2013-05-13T20:02:00Z</published><updated>2013-05-13T20:02:00Z</updated><content type="html">&lt;p&gt;When you are managing a large number of virtual machines, it can get tricky to keep track of everything.&amp;nbsp; One thing that I see many people doing to help with this is to make sure that the guest operating system has the same network name as the virtual machine name.&amp;nbsp; This makes life a lot easier when moving between different tools.&lt;/p&gt;
&lt;p&gt;However, I tend to rename and copy virtual machines a lot, which makes it difficult to keep the virtual machine and guest operating system name synchronized.&amp;nbsp; To handle this I wrote the following script:&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="margin: 20px 0px 10px; padding: 4px; border: 1px solid silver; width: 97.5%; text-align: left; line-height: 12pt; overflow: auto; font-family: 'Courier New', courier, monospace; font-size: 8pt; cursor: text; direction: ltr; max-height: 2000px; background-color: #f4f4f4;"&gt;
&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: #008000;"&gt;# Get the virtual machine name from the parent partition&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;$vmName = (Get-ItemProperty &amp;ndash;path &amp;ldquo;HKLM:\SOFTWARE\Microsoft\Virtual Machine\Guest\Parameters&amp;rdquo;).VirtualMachineName&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: #008000;"&gt;# Replace any non-alphanumeric characters with an underscore&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;$vmName = [Regex]::Replace($vmName,&lt;span style="color: #006080;"&gt;"\W"&lt;/span&gt;,&lt;span style="color: #006080;"&gt;"_"&lt;/span&gt;)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: #008000;"&gt;# Trim names that are longer than 15 characters&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;$vmName = $vmName.Substring(0,[System.Math]::Min(15, $vmName.Length))&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="color: #008000;"&gt;# Check the trimmed and cleaned VM name against the guest OS name&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: #008000;"&gt;# If it is different, change the guest OS name and reboot&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; ($env:computername &lt;span style="color: #cc6633;"&gt;-ne&lt;/span&gt; $vmName) {(gwmi win32_computersystem).Rename($vmName); shutdown -r -t 0}&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;What this script does is:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Read the virtual machine name from the registry inside the virtual machine&lt;/li&gt;
&lt;li&gt;Clean up the virtual machine name and check it against the guest OS name&lt;/li&gt;
&lt;li&gt;If they match, move along&lt;/li&gt;
&lt;li&gt;If they do not match, rename the guest operating system and reboot&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I have this script inside my virtual machines, configured to run automatically when the guest operating system boots.&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br /&gt;Ben&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10418223" width="1" height="1"&gt;</content><author><name>Benjamin Armstrong</name><uri>http://blogs.msdn.com/Virtual-PC-Guy/ProfileUrlRedirect.ashx</uri></author><category term="Developing on Windows Virtual PC / Virtual Server / Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Developing+on+Windows+Virtual+PC+_2F00_+Virtual+Server+_2F00_+Hyper_2D00_V/" /><category term="Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Hyper_2D00_V/" /></entry><entry><title>Using PowerShell to configure live migration networks in a Hyper-V cluster</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/05/02/using-powershell-to-configure-live-migration-networks-in-a-hyper-v-cluster.aspx" /><id>http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/05/02/using-powershell-to-configure-live-migration-networks-in-a-hyper-v-cluster.aspx</id><published>2013-05-03T00:16:47Z</published><updated>2013-05-03T00:16:47Z</updated><content type="html">&lt;p&gt;A long time ago, &lt;a href="http://workinghardinit.wordpress.com/" target="_blank"&gt;Didier Van Hoye&lt;/a&gt; asked me how to configure the networks that should be used for live migration by a Hyper-V cluster using nothing but PowerShell.&amp;#160; Unfortunately, I never got around to getting an answer for him – until today.&lt;/p&gt;  &lt;p&gt;Didier – this one is for you.&lt;/p&gt;  &lt;p&gt;Now for a bit of background:&amp;#160; When you create a Hyper-V cluster, you need to configure which networks are used for virtual machine live migration.&amp;#160; You want to ensure that virtual machine live migration is going over a network with enough bandwidth available (a minimum of 500mbit per concurrent live migration is recommended) and where we are not going to disrupt other network traffic (i.e. do not have live migration run over your storage network).&amp;#160; You also want to ensure that the network used by live migration is appropriately secure – either physically secure, or using technology like IPsec – as we do not do any encryption of the data being sent over this network.&lt;/p&gt;  &lt;p&gt;You can do this through the UI quite easily:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/1754.image_5F00_3868AAA8.png" target="_blank"&gt;&lt;img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/1830.image_5F00_thumb_5F00_58178470.png" width="644" height="342" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;But how do you do this with PowerShell?&amp;#160; Well, after a lot of digging around it turns out that it is not that hard.&amp;#160; It is not obvious, but it is not hard.&amp;#160; If you only have one network for live migration – you can actually do this in one line.&amp;#160; If you know the cluster network name you can run:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;Get-ClusterResourceType -Name &amp;quot;Virtual Machine&amp;quot; | Set-ClusterParameter -Name MigrationExcludeNetworks -Value ([String]::Join(&amp;quot;;&amp;quot;,(Get-ClusterNetwork | Where-Object {$_.Name -ne &amp;quot;Migration Network&amp;quot;}).ID))&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Or, if you just know the IP subnet for the live migration network you can run this:&lt;/p&gt;  &lt;p&gt;&lt;font color="#0000ff" face="Courier New"&gt;Get-ClusterResourceType -Name &amp;quot;Virtual Machine&amp;quot; | Set-ClusterParameter -Name MigrationExcludeNetworks -Value ([String]::Join(&amp;quot;;&amp;quot;,(Get-ClusterNetwork | Where-Object {$_.Address -ne &amp;quot;192.168.210.0&amp;quot;}).ID))&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;So what is this doing?&lt;/p&gt;  &lt;p&gt;Well, it is getting the “Virtual Machine” resource from the cluster (which is actually a global resource – that is not specific to a single virtual machine – bad naming, I know) and then it is setting the “MigrationExcludeNetworks” parameter on this resource.&amp;#160; Which, unsurprisingly, is a list of the cluster networks to exclude from live migration.&lt;/p&gt;  &lt;p&gt;Where things get a little fiddly here is:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;This parameter wants the cluster network IDs rather than the names.&amp;#160; For example: instead of specifying “Management Network” I need to specify “b18643a5-0cab-4d7d-93bf-6b4dc983ed2b”.&amp;#160; This is annoying – but luckily the Get-ClusterNetwork Cmdlet returns this information through the “ID” property.&lt;/li&gt;    &lt;li&gt;This parameter takes a semi-colon separated list (and there must be no spaces – otherwise it gets mad at you).&amp;#160; Again, annoying but not the end of the world.&amp;#160; In the samples above I use [String]::Join to pull this off.&amp;#160; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;It would get quite fiddly (but not impossible) if you wanted to configure multiple networks for live migration – but hopefully you should have the gist of how to do it from reading this article.&lt;/p&gt;  &lt;p&gt;Cheers,   &lt;br /&gt;Ben&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10415787" width="1" height="1"&gt;</content><author><name>Benjamin Armstrong</name><uri>http://blogs.msdn.com/Virtual-PC-Guy/ProfileUrlRedirect.ashx</uri></author><category term="Developing on Windows Virtual PC / Virtual Server / Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Developing+on+Windows+Virtual+PC+_2F00_+Virtual+Server+_2F00_+Hyper_2D00_V/" /><category term="Windows Server 2008 R2" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Windows+Server+2008+R2/" /><category term="MED-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/MED_2D00_V/" /><category term="Windows Server 8" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Windows+Server+8/" /></entry><entry><title>PowerShell script to tell you if you need to update your Integration Services</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/04/29/powershell-script-to-tell-you-if-you-need-to-update-your-integration-services.aspx" /><link rel="enclosure" type="application/zip" length="889" href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-10-41-45-21/CheckICs.zip" /><id>http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/04/29/powershell-script-to-tell-you-if-you-need-to-update-your-integration-services.aspx</id><published>2013-04-29T17:33:00Z</published><updated>2013-04-29T17:33:00Z</updated><content type="html">&lt;p&gt;A while ago I did a &lt;a href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2012/03/06/using-powershell-to-check-integration-services-versions.aspx" target="_blank"&gt;blog post&lt;/a&gt; that showed you how easy it was to check what version of the Integration Services were installed inside your virtual machines.&amp;nbsp; However, a number of people came back to me and said: &amp;ldquo;Ben, I do not really care about the version number of the integration services &amp;ndash; what I want to know is whether I need to update the integration services or not&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;Hmm&amp;hellip;&lt;/p&gt;
&lt;p&gt;That is a much trickier problem to solve.&amp;nbsp; In fact, in Windows Server 2008 and Windows Server 2008 R2 it is not really possible to write a good script that will do this.&amp;nbsp; Luckily, it is possible to write a script for this in Windows 8 / Windows Server 2012.&amp;nbsp; Unfortunately, it is not the simplest script around.&lt;/p&gt;
&lt;p&gt;There are a couple of reasons for this:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;You can&amp;rsquo;t do this with the Hyper-V PowerShell cmdlets, you need to go straight to WMI&lt;/li&gt;
&lt;li&gt;This information is only available through GetSummaryInformation &amp;ndash; which is a rather strange interface&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;With that in mind &amp;ndash; here is the script that will get you the information you need:&lt;/p&gt;
&lt;div id="codeSnippetWrapper" style="margin: 20px 0px 10px; padding: 4px; border: 1px solid silver; width: 97.5%; text-align: left; line-height: 12pt; overflow: auto; font-family: 'Courier New', courier, monospace; font-size: 8pt; cursor: text; direction: ltr; max-height: 2000px; background-color: #f4f4f4;"&gt;
&lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: #008000;"&gt;# GetSummaryInformation documented here: http://msdn.microsoft.com/en-us/library/hh850062(v=vs.85).aspx&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="color: #008000;"&gt;# MSVM_SummaryInformation documented here: http://msdn.microsoft.com/en-us/library/hh850217(v=vs.85).aspx&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="color: #008000;"&gt;# Get the Management Service from the v2 namespace&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;$VMMS = gwmi -namespace root\virtualization\v2 Msvm_VirtualSystemManagementService&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: #008000;"&gt;# 1 == VM friendly name. 123 == Integration State&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;$RequestedSummaryInformationArray = 1,123&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;$vmSummaryInformationArray = $VMMS.GetSummaryInformation($null, $RequestedSummaryInformationArray).SummaryInformation&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: #008000;"&gt;# Create an empty array to store the results in&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;$outputArray = @()&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="color: #008000;"&gt;# Go over the results of the GetSummaryInformation Call&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; ($vmSummaryInformation &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; [array] $vmSummaryInformationArray)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;   {  &lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;   &lt;span style="color: #008000;"&gt;# Turn result codes into readable English&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;   &lt;span style="color: #0000ff;"&gt;switch&lt;/span&gt; ($vmSummaryInformation.IntegrationServicesVersionState)&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;      {&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;       1       {$vmIntegrationServicesVersionState = &lt;span style="color: #006080;"&gt;"Up-to-date"&lt;/span&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;       2       {$vmIntegrationServicesVersionState = &lt;span style="color: #006080;"&gt;"Version Mismatch"&lt;/span&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;       &lt;span style="color: #0000ff;"&gt;default&lt;/span&gt; {$vmIntegrationServicesVersionState = &lt;span style="color: #006080;"&gt;"Unknown"&lt;/span&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;      }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;   &lt;span style="color: #008000;"&gt;# Use Hyper-V PowerShell cmdlets to quickly get the integration version number&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;   $vmIntegrationServicesVersion = (get-vm $vmSummaryInformation.ElementName).IntegrationServicesVersion&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;   &lt;span style="color: #008000;"&gt;# Display "Unknown" if we got a null result&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;   &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; ($vmIntegrationServicesVersion &lt;span style="color: #cc6633;"&gt;-eq&lt;/span&gt; $null) {$vmIntegrationServicesVersion = &lt;span style="color: #006080;"&gt;"Unknown"&lt;/span&gt;}&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;   &lt;span style="color: #008000;"&gt;# Put the VM Name, Integration Service Version and State in a PSObject - so we can display a nice table at the end&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;   $output = new-object psobject&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;   $output | add-member noteproperty &lt;span style="color: #006080;"&gt;"VM Name"&lt;/span&gt; $vmSummaryInformation.ElementName&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;   $output | add-member noteproperty &lt;span style="color: #006080;"&gt;"Integration Services Version"&lt;/span&gt; $vmIntegrationServicesVersion&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;   $output | add-member noteproperty &lt;span style="color: #006080;"&gt;"Integration Services State"&lt;/span&gt; $vmIntegrationServicesVersionState&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;   &lt;span style="color: #008000;"&gt;# Add the PSObject to the output Array&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;   $outputArray += $output&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;   }&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&amp;nbsp;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: #f4f4f4;"&gt;&lt;span style="color: #008000;"&gt;# Display information in nicely formatted table&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;
&lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: 'Courier New', courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;write-output $outputArray | sort &lt;span style="color: #006080;"&gt;"VM Name"&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If I run this script on one of my Hyper-V servers &amp;ndash; I get this:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/7658.ICVersion_5F00_324FE2DF.png"&gt;&lt;img style="border: 0px currentcolor; display: inline; background-image: none;" title="ICVersion" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/3823.ICVersion_5F00_thumb_5F00_6AFA8CEC.png" alt="ICVersion" width="640" height="272" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Looks like I need to do a lot of integration service updates.&amp;nbsp; Bummer.&lt;/p&gt;
&lt;p&gt;But getting back to the script &amp;ndash; what is GetSummaryInformation and why is it so tricky to use?&amp;nbsp; GetSummaryInformation is a WMI method that we implemented to allow people to get a lot of random information about virtual machines in a quick and efficient method.&amp;nbsp; The way it works is that you call it and pass in an array of numbers &amp;ndash; this array indicates the information that you want to get about the virtual machines.&amp;nbsp; You can read all of the possible options here: &lt;a title="http://msdn.microsoft.com/en-us/library/hh850217(v=vs.85).aspx" href="http://msdn.microsoft.com/en-us/library/hh850217(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/hh850217(v=vs.85).aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;One final note &amp;ndash; in order to get the Integration Services state &amp;ndash; you need to use the WMI v2 namespace.&lt;/p&gt;
&lt;p&gt;Cheers, &lt;br /&gt;Ben&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10414521" width="1" height="1"&gt;</content><author><name>Benjamin Armstrong</name><uri>http://blogs.msdn.com/Virtual-PC-Guy/ProfileUrlRedirect.ashx</uri></author><category term="Developing on Windows Virtual PC / Virtual Server / Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Developing+on+Windows+Virtual+PC+_2F00_+Virtual+Server+_2F00_+Hyper_2D00_V/" /><category term="Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Hyper_2D00_V/" /><category term="Windows Server 8" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Windows+Server+8/" /><category term="Windows 8" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Windows+8/" /></entry><entry><title>Installing ICs offline in Hyper-V</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/04/18/installing-ics-offline-in-hyper-v.aspx" /><id>http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/04/18/installing-ics-offline-in-hyper-v.aspx</id><published>2013-04-19T00:37:03Z</published><updated>2013-04-19T00:37:03Z</updated><content type="html">&lt;p&gt;There is a great post over on the virtualization team blog about how to install the Hyper-V integration components offline.&amp;#160; Go check it out:&amp;#160; &lt;a title="http://blogs.technet.com/b/virtualization/archive/2013/04/19/how-to-install-integration-services-when-the-virtual-machine-is-not-running.aspx" href="http://blogs.technet.com/b/virtualization/archive/2013/04/19/how-to-install-integration-services-when-the-virtual-machine-is-not-running.aspx"&gt;http://blogs.technet.com/b/virtualization/archive/2013/04/19/how-to-install-integration-services-when-the-virtual-machine-is-not-running.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Cheers,   &lt;br /&gt;Ben&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10412415" width="1" height="1"&gt;</content><author><name>Benjamin Armstrong</name><uri>http://blogs.msdn.com/Virtual-PC-Guy/ProfileUrlRedirect.ashx</uri></author><category term="Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Hyper_2D00_V/" /></entry><entry><title>5th Grader using Hyper-V</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/03/18/5th-grader-using-hyper-v.aspx" /><id>http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/03/18/5th-grader-using-hyper-v.aspx</id><published>2013-03-18T22:16:56Z</published><updated>2013-03-18T22:16:56Z</updated><content type="html">&lt;p&gt;A colleague at Microsoft just sent me a pointer to this video of his 5th grade son showing you how to use Hyper-V to create a virtual machine:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://blogs.technet.com/b/yungchou/archive/2013/03/18/are-you-smarter-than-a-5th-grader-in-creating-hyper-v-virtual-machine-and-installing-windows-server-2012.aspx" href="http://blogs.technet.com/b/yungchou/archive/2013/03/18/are-you-smarter-than-a-5th-grader-in-creating-hyper-v-virtual-machine-and-installing-windows-server-2012.aspx"&gt;http://blogs.technet.com/b/yungchou/archive/2013/03/18/are-you-smarter-than-a-5th-grader-in-creating-hyper-v-virtual-machine-and-installing-windows-server-2012.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This seems like an excellent idea for our next Hyper-V advertising campaign!&lt;/p&gt;  &lt;p&gt;Cheers,   &lt;br /&gt;Ben&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10403320" width="1" height="1"&gt;</content><author><name>Benjamin Armstrong</name><uri>http://blogs.msdn.com/Virtual-PC-Guy/ProfileUrlRedirect.ashx</uri></author><category term="Personal" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Personal/" /><category term="Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Hyper_2D00_V/" /></entry><entry><title>Changing the Hyper-V Server login experience</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/03/13/changing-the-hyper-v-server-login-experience.aspx" /><id>http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/03/13/changing-the-hyper-v-server-login-experience.aspx</id><published>2013-03-13T21:42:19Z</published><updated>2013-03-13T21:42:19Z</updated><content type="html">&lt;p&gt;I have been spending some time working with the free version of Hyper-V server recently (available here: &lt;a title="http://www.microsoft.com/en-us/server-cloud/hyper-v-server/default.aspx" href="http://www.microsoft.com/en-us/server-cloud/hyper-v-server/default.aspx"&gt;http://www.microsoft.com/en-us/server-cloud/hyper-v-server/default.aspx&lt;/a&gt;).&amp;#160; It is lots of fun to see just how much you can do with this free software (hint: you can do everything you can with Hyper-V on a full installation of Windows).&lt;/p&gt;  &lt;p&gt;However – one thing that I realized quickly was that I did not like the default login experience.&amp;#160; Normally, when you login to a Hyper-V server you will get a command prompt and a running instance of the Server Configuration tool:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/7367.hypervserver1_5F00_1DE24BA8.png" target="_blank"&gt;&lt;img title="hypervserver1" style="display: inline; background-image: none;" border="0" alt="hypervserver1" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/1004.hypervserver1_5F00_thumb_5F00_2DF11A5F.png" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This is all fine and good when you are first setting the server up.&amp;#160; But after then it gets a bit annoying.&amp;#160; The reality is that most of the time you will be managing Hyper-V remotely – from another Windows computer.&amp;#160; The only reason why you would want to login to a Hyper-V server directly is because something has gone wrong, and you need to do some troubleshooting.&lt;/p&gt;  &lt;p&gt;Now, when it comes to troubleshooting a Hyper-V server – there are really only two things I want:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;I want to know if all of my virtual machines are okay.&lt;/li&gt;    &lt;li&gt;I want a PowerShell window so I can use the Hyper-V cmdlets to dig in deeper if I need to.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Having PowerShell launch by default is quite easy.&amp;#160; Just launch PowerShell from the command prompt (type in “PowerShell” and hit enter) and then run this command:&lt;/p&gt;  &lt;p&gt;Set-ItemProperty &amp;quot;HKLM:\Software\Microsoft\Windows NT\CurrentVersion\WinLogon&amp;quot; Shell 'PowerShell.exe -WindowStyle maximized'&lt;/p&gt;  &lt;p&gt;Now you will get a PowerShell window instead of a command prompt whenever you login.&amp;#160; But I wanted a bit more than that.&amp;#160; To get a better experience – I needed to create a PowerShell profile.&amp;#160; To create the profile I ran these commands:&lt;/p&gt;  &lt;div id="codeSnippetWrapper" style="margin: 20px 0px 10px; padding: 4px; border: 1px solid silver; width: 97.5%; text-align: left; line-height: 12pt; overflow: auto; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; cursor: text; direction: ltr; max-height: 2000px; background-color: rgb(244, 244, 244);"&gt;   &lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;     &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;Set-ExecutionPolicy RemoteSigned&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;New-Item -path $profile -type file -force&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;notepad $profile&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;And put the following information into the profile file:&lt;/p&gt;

&lt;div id="codeSnippetWrapper" style="margin: 20px 0px 10px; padding: 4px; border: 1px solid silver; width: 97.5%; text-align: left; line-height: 12pt; overflow: auto; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; cursor: text; direction: ltr; max-height: 2000px; background-color: rgb(244, 244, 244);"&gt;
  &lt;div id="codeSnippet" style="padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;
    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;# Maximize the window&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;(Get-Host).UI.RawUI.BufferSize = New-Object System.Management.Automation.Host.Size(((Get-Host).UI.RawUI.MaxPhysicalWindowSize.Width-3),(Get-Host).UI.RawUI.BufferSize.Height)&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;(Get-Host).UI.RawUI.WindowSize = (Get-Host).UI.RawUI.MaxWindowSize&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;# Get the colors corrected&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;(Get-Host).UI.RawUI.ForegroundColor = &lt;span style="color: rgb(0, 96, 128);"&gt;&amp;quot;White&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;(Get-Host).UI.RawUI.BackgroundColor = &lt;span style="color: rgb(0, 96, 128);"&gt;&amp;quot;DarkBlue&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;# Change path and clear the screen&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;cd \&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;cls&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;&amp;#160;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;&lt;span style="color: rgb(0, 128, 0);"&gt;# Display a welcome message&lt;/span&gt;&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;write-host Welcome to $env:computername&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;write-host&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;write-host Current virtual machine status:&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: white;"&gt;get-vm&lt;/pre&gt;
&lt;!--CRLF--&gt;

    &lt;pre style="margin: 0em; padding: 0px; width: 100%; text-align: left; color: black; line-height: 12pt; overflow: visible; font-family: &amp;quot;Courier New&amp;quot;, courier, monospace; font-size: 8pt; direction: ltr; background-color: rgb(244, 244, 244);"&gt;write-host&lt;/pre&gt;
&lt;!--CRLF--&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;The result is that when I login to my Hyper-V server now, I am presented with a full screen PowerShell window and a listing of my virtual machines straight away. Very handy.&amp;#160; &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/7271.hypervserver2_5F00_3FCDAE2C.png" target="_blank"&gt;&lt;img title="hypervserver2" style="display: inline; background-image: none;" border="0" alt="hypervserver2" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/8741.hypervserver2_5F00_thumb_5F00_1FB2A16F.png" width="644" height="484" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cheers, 
  &lt;br /&gt;Ben&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10402120" width="1" height="1"&gt;</content><author><name>Benjamin Armstrong</name><uri>http://blogs.msdn.com/Virtual-PC-Guy/ProfileUrlRedirect.ashx</uri></author><category term="Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Hyper_2D00_V/" /></entry><entry><title>Dynamic Memory Pro Tip–be reasonable with your startup ram</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/02/26/dynamic-memory-pro-tip-be-reasonable-with-your-startup-ram.aspx" /><id>http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/02/26/dynamic-memory-pro-tip-be-reasonable-with-your-startup-ram.aspx</id><published>2013-02-26T17:39:32Z</published><updated>2013-02-26T17:39:32Z</updated><content type="html">&lt;p&gt;Hyper-V now allows you to configure a startup, minimum and maximum memory limit.&amp;#160; If you are like me – you probably leave the startup ram at the default of 512mb – but you should really consider changing it to better suit your environment.&amp;#160; Here is a quick screenshot from one of my Hyper-V servers:&lt;/p&gt;  &lt;p&gt;&lt;img title="clip_image002" style="display: inline; background-image: none;" border="0" alt="clip_image002" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/8547.clip_5F00_image002_5F00_7F55700B.jpg" width="466" height="192" /&gt;&lt;/p&gt;  &lt;p&gt;Two things that I have discovered:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Some of my virtual machines benefit from having a startup and minimum that is below 512mb.&amp;#160; My FTP server, for instance, is a core installation of Windows server which just acts as an FTP server (and nothing else).&amp;#160; It happily boots and runs with a startup and minimum amount of 256mb ram.&lt;/li&gt;    &lt;li&gt;Other virtual machines benefit from having higher startup ram amounts.&amp;#160; I have never seen my TMG server under 2GB of ram – and have set the startup ram for this virtual machine to 2GB.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Why would I increase the startup ram for the TMG server?&amp;#160; Well – we do not start adding &amp;amp; removing memory dynamically until fairly late in the boot process for Windows (basically we wait until the system is mostly up and running before we start doing anything fancy with memory).&amp;#160; TMG loads a *lot* of processes before we start reacting with dynamic memory.&lt;/p&gt;  &lt;p&gt;The result is that while this virtual machine will always run well at the end of the day (no matter what the startup ram value is) the amount of memory assigned for startup ram can have a profound impact on boot times.&amp;#160; When my TMG server has a startup ram value of 512mb it consistently takes ~10 to 15 minutes from cold boot to fully functional.&amp;#160; If I bump the startup ram to 2GB it boots and is functional in under 2 minutes.&lt;/p&gt;  &lt;p&gt;The net result for me is that my system is fully functional a lot quicker after any servicing, and I have not had to give up any resource to enable this.&lt;/p&gt;  &lt;p&gt;Cheers,   &lt;br /&gt;Ben&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10397251" width="1" height="1"&gt;</content><author><name>Benjamin Armstrong</name><uri>http://blogs.msdn.com/Virtual-PC-Guy/ProfileUrlRedirect.ashx</uri></author><category term="Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Hyper_2D00_V/" /><category term="Windows Server 2008 R2" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Windows+Server+2008+R2/" /><category term="Windows Server 8" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Windows+Server+8/" /></entry><entry><title>Backing up Hyper-V virtual machines from the command line</title><link rel="alternate" type="text/html" href="http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/02/25/backing-up-hyper-v-virtual-machines-from-the-command-line.aspx" /><id>http://blogs.msdn.com/b/virtual_pc_guy/archive/2013/02/25/backing-up-hyper-v-virtual-machines-from-the-command-line.aspx</id><published>2013-02-26T00:26:04Z</published><updated>2013-02-26T00:26:04Z</updated><content type="html">&lt;p&gt;Last week I posted about how you can now use Windows Server Backup in Windows Server 2012 to backup virtual machines.&amp;#160; One of the first questions that people had was “how do I do this from the command-line?”&amp;#160; So – let me show you!&lt;/p&gt;  &lt;p&gt;The tool you will want to use is “wbadmin.exe”&lt;/p&gt;  &lt;p&gt;Backing up a virtual machine is fairly straight forward.&amp;#160; Your command will look like this:&lt;/p&gt;  &lt;p&gt;wbadmin start backup –backupTarget:&amp;lt;location to backup to&amp;gt; –hyperv:&amp;lt;list of virtual machines to backup&amp;gt;&lt;/p&gt;  &lt;p&gt;Which will result in something like this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/0572.image_5F00_04D50D90.png" target="_blank"&gt;&lt;img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/8715.image_5F00_thumb_5F00_52713A10.png" width="681" height="779" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Some things to be aware of:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Wbadmin will always warn you that the virtual machine will be put into a saved state for backup.&amp;#160; This is wrong.&amp;#160; The virtual machine will only be put into a saved state if it is not running the latest virtual machine additions (or is not a Windows virtual machine).&lt;/li&gt;    &lt;li&gt;You will be prompted before the backup starts.&amp;#160; You can get around this by adding –force to the end of the command.&lt;/li&gt;    &lt;li&gt;You can use either the virtual machine name or the virtual machine ID when selecting virtual machines.&lt;/li&gt;    &lt;li&gt;You can list multiple virtual machines to backup.&lt;/li&gt;    &lt;li&gt;If you are backing up to a SMB share – new backups will automatically overwrite old backups (i.e. there will only be one backup kept on the share).&amp;#160; This will not happen if you are backing up to a local disk.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Once you have created the backup – you then need to know how to restore it.&amp;#160; This is, unfortunately, more complicated.&amp;#160; The first thing you will need to do is to find the version of the backup and the name of the virtual machine you want to restor.&amp;#160; You can find the version of the backup by running:&lt;/p&gt;  &lt;p&gt;wbadmin get versions –backupTarget:&amp;lt;location where you backed up to&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/4113.image_5F00_36607B25.png" target="_blank"&gt;&lt;img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/5684.image_5F00_thumb_5F00_4432C120.png" width="681" height="370" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If the backup was taken a while ago – you may have forgotten the name(s) of the virtual machines that you backed up.&amp;#160; You can find this by running:&lt;/p&gt;  &lt;p&gt;wbadmin get items –version:&amp;lt;version string for the backup you want&amp;gt; –backuptarget:&amp;lt;location where you backed up to&amp;gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/6254.image_5F00_5205071B.png" target="_blank"&gt;&lt;img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/7725.image_5F00_thumb_5F00_1CF877EB.png" width="682" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once you have this information you can restore the backed up virtual machine by running:&lt;/p&gt;  &lt;p&gt;wbadmin start recover –version:&amp;lt;version string for the backup you want&amp;gt; –itemType:hyperv –items:&amp;lt;list of virtual machines to restore&amp;gt; –backuptarget:&amp;lt;location where you backed up to&amp;gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/8814.image_5F00_7CDD6B2D.png" target="_blank"&gt;&lt;img title="image" style="display: inline; background-image: none;" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-41-22-metablogapi/5265.image_5F00_thumb_5F00_3CA751B3.png" width="681" height="1139" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Cheers,   &lt;br /&gt;Ben&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10396968" width="1" height="1"&gt;</content><author><name>Benjamin Armstrong</name><uri>http://blogs.msdn.com/Virtual-PC-Guy/ProfileUrlRedirect.ashx</uri></author><category term="Hyper-V" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Hyper_2D00_V/" /><category term="Windows Server 8" scheme="http://blogs.msdn.com/b/virtual_pc_guy/archive/tags/Windows+Server+8/" /></entry></feed>