<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.technet.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>John Howard - Senior Program Manager in the Hyper-V team at Microsoft : How to Articles</title><link>http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx</link><description>Tags: How to Articles</description><dc:language>en-GB</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Explaining the Hyper-V authorization model, part five</title><link>http://blogs.technet.com/jhoward/archive/2009/10/09/Explaining-the-hyper-v-authorization-model-part-five.aspx</link><pubDate>Fri, 09 Oct 2009 21:51:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3285891</guid><dc:creator>jhoward</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3285891.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3285891</wfw:commentRss><description>&lt;P mce_keep="true"&gt;Hyper-V uses a role based authorisation model for access checks. This series of articles takes a look at the model; defines the available primitives; and walks through a couple of examples. (I actually wrote most of this many months ago – only finally found the time to post it up!).&lt;IMG src="http://blogpics.dyndns.org/2009-oct-azman-5.jpg" mce_src="http://blogpics.dyndns.org/2009-oct-azman-5.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Quick links: &lt;A href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx"&gt;Part1&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx"&gt;Part 2&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/09/explaining-the-hyper-v-authorization-model-part-three.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/09/explaining-the-hyper-v-authorization-model-part-three.aspx"&gt;Part 3&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/18/explaining-the-hyper-v-authorization-model-part-four.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/18/explaining-the-hyper-v-authorization-model-part-four.aspx"&gt;Part 4&lt;/A&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;This post describes a change to the authorisation model in Hyper-V for Windows Server 2008 R2. If you recall from part one, I mentioned that there are 33 operations defined in AZMan for Windows Server 2008, and 34 operations for Windows Server 2008 R2.&lt;/P&gt;
&lt;P&gt;The new operation has ID 355, ‘Allow Virtual Machine Snapshot’.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12E7B/azman-5-1_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12E7B/azman-5-1_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-5-1 border=0 alt=azman-5-1 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12E7B/azman-5-1_thumb.jpg" width=404 height=436 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12E7B/azman-5-1_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;Why (to me) is this useful? Have you ever been confronted with a screen such as the following where you want to make Hyper-V Manager the foreground application, but accidentally hit the ‘Snapshot’ action in the MMC? I assure you, I have, several times. &lt;/P&gt;
&lt;P&gt;The problem with accidentally hitting that action is that you could now find your production virtual machine using a differencing disk, with reduced performance (at least in v1 – not the case in R2), or the possibility of physical disk space running out. Further, to merge the changes back to the parent VHD so that a differencing disk is no longer being used, you need to delete the snapshot, shut down the virtual machine, wait for the merge to complete and then restart the VM. This is particularly painful when the VM in question is your ISA server for outbound Internet connectivity, or your Exchange server your clients (wife and children in my case) are using for email? &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12E7B/azman-5-2_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12E7B/azman-5-2_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-5-2 border=0 alt=azman-5-2 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12E7B/azman-5-2_thumb.jpg" width=412 height=608 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12E7B/azman-5-2_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In part six, I’ll look at a solution that I personally use at home on my Windows Server 2008 R2 production environment that builds on what’s been learnt so far to ensure that I can’t accidentally snapshot critical production VMs, but am able to snapshot test VMs to my hearts delight. &lt;BR&gt;&lt;BR&gt;Cheers, &lt;BR&gt;John.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3285891" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category></item><item><title>Explaining the Hyper-V authorization model, part four</title><link>http://blogs.technet.com/jhoward/archive/2009/09/18/explaining-the-hyper-v-authorization-model-part-four.aspx</link><pubDate>Fri, 18 Sep 2009 22:29:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3281995</guid><dc:creator>jhoward</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3281995.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3281995</wfw:commentRss><description>&lt;P&gt;Hyper-V uses a role based authorisation model for access checks. This series of articles takes a look at the model; defines the available primitives; and walks through a couple of examples. (I actually wrote most of this series many months ago – only finally found the time to post it up!).&lt;IMG src="http://blogpics.dyndns.org/2009-sep-azman-4.jpg" mce_src="http://blogpics.dyndns.org/2009-sep-azman-4.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Quick links: &lt;A href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx"&gt;Part1&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx"&gt;Part 2&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/09/explaining-the-hyper-v-authorization-model-part-three.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/09/explaining-the-hyper-v-authorization-model-part-three.aspx"&gt;Part 3&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/18/explaining-the-hyper-v-authorization-model-part-four.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/18/explaining-the-hyper-v-authorization-model-part-four.aspx"&gt;Part 4&lt;/A&gt;&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In parts two and three, I walked through a specific scenario. However, you’re probably asking after having read them how I knew what operations are needed, and when, and in what scope. Well, luckily I can walk across the corridor and speak to our development team. Obviously this isn’t practical for most of you reading this, but there are, of course other ways of discovering which access checks are failing. A great resource recently published on Technet is &lt;A href="http://technet.microsoft.com/en-us/library/dd282980(WS.10).aspx" mce_href="http://technet.microsoft.com/en-us/library/dd282980(WS.10).aspx"&gt;http://technet.microsoft.com/en-us/library/dd282980(WS.10).aspx&lt;/A&gt;. However, there’s a sneakier way….&amp;nbsp; Let’s take a step back through part three, and delete the role assignment and role definition “Service Access” I created to cause a deliberate access check failure.&lt;/P&gt;
&lt;P&gt;Next, I turned on auditing for object access. (I’m ignoring the fact that local policy may be over-ridden by group policy in a domain environment – this walkthrough so far is entirely on a workgroup configuration). Start the Local Security Policy snap-in under Administrative tools, and navigate to Security Settings/Local Policies/Audit Policy and change to auditing Success and Failure.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-1_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-1_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-4-1 border=0 alt=azman-4-1 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-1_thumb.jpg" width=407 height=219 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-1_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;Once done, log back on as user Joe or John and start Hyper-V Manager to validate the user gets the familiar ‘You do not have the required permission to complete this task.’ message. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-2_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-2_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-4-2 border=0 alt=azman-4-2 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-2_thumb.jpg" width=414 height=178 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-2_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Now log on as a user with local admin rights and start the event viewer.&amp;nbsp; Select the Security log under Windows Logs, and optionally apply a filter for just events 4665-4667 (actually just 4666 is probably enough).&lt;/P&gt;
&lt;P&gt;What you’ll see is the following Audit Failure message for event ID 4666: Joe failed an access check to operation Read Service Configuration (operation ID 100) in scope “blank” (ie the default scope).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-3_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-3_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-4-3 border=0 alt=azman-4-3 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-3_thumb.jpg" width=418 height=382 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_12CE5/azman-4-3_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;So with that knowledge, it’s easy to debug issues in authorisation models that you develop. &lt;BR&gt;&lt;BR&gt;In the next part of this series, I’ll look through a really useful change in Windows Server 2008 R2 (and Microsoft Hyper-V Server 2008 R2) which leads me in to a walkthrough in part six of an authorisation policy example I use on my home servers. &lt;BR&gt;&lt;BR&gt;Cheers, &lt;BR&gt;John.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3281995" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item><item><title>Explaining the Hyper-V authorization model, part three </title><link>http://blogs.technet.com/jhoward/archive/2009/09/09/explaining-the-hyper-v-authorization-model-part-three.aspx</link><pubDate>Thu, 10 Sep 2009 04:52:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3280244</guid><dc:creator>jhoward</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3280244.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3280244</wfw:commentRss><description>&lt;P&gt;Hyper-V uses a role based authorisation model for access checks. This series of articles takes a look at the model; defines the available primitives; and walks through a couple of examples. (I actually wrote most of this series many months ago – only finally found the time to post it up!).&lt;IMG src="http://blogpics.dyndns.org/2009-sep-azman-3.jpg" mce_src="http://blogpics.dyndns.org/2009-sep-azman-3.jpg"&gt; &lt;BR&gt;&lt;BR&gt;Quick links: &lt;A href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx"&gt;Part1&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx"&gt;Part 2&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/09/explaining-the-hyper-v-authorization-model-part-three.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/09/explaining-the-hyper-v-authorization-model-part-three.aspx"&gt;Part 3&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/18/explaining-the-hyper-v-authorization-model-part-four.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/18/explaining-the-hyper-v-authorization-model-part-four.aspx"&gt;Part 4&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx"&gt;part two&lt;/A&gt;, I started creating the scenario of separating the view two users have when opening Hyper-V Manager so that they only see their own VMs. To do that, I created two VM Scopes, one for each user, and moved the users’ VMs to the required VM scopes. I mentioned that some more steps were still required. This part of the series walks through those steps. &lt;BR&gt;&lt;BR&gt;The first part of the additional steps I’ve pretty well covered to death in my remote management of Hyper-V series. As my two users, John and Joe are not local administrators; they need to be granted explicit access to WMI namespaces (and Distributed COM Users if managing remotely). By far the easiest way to achieve this is using &lt;A href="http://code.msdn.microsoft.com/HVRemote" mce_href="http://code.msdn.microsoft.com/HVRemote"&gt;HVRemote&lt;/A&gt;. (Note, I’m assuming you’re following best practice, and using remote management as the server is running Hyper-V Server, the standalone SKU, or a Server Core installation of Windows Server 2008/2008 R2.) &lt;/P&gt;
&lt;P&gt;From an elevated command prompt when logged on as a local administrator, run &lt;BR&gt;&lt;IMG src="http://blogpics.dyndns.org/2009-sep-azman-3.jpg" mce_src="http://blogpics.dyndns.org/2009-sep-azman-3.jpg"&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;cscript hvremote.wsf /add:john &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;(Use /add:domain\account if the Hyper-V machine is domain joined)&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-1_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-1_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-3-1 border=0 alt=azman-3-1 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-1_thumb.jpg" width=405 height=365 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-1_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;If you look at the output carefully, note the line that says “Adding john to AZMan role Administrator” near the bottom. Apart from a typo I need to correct in a future version, what HVRemote has done is add john to the ‘Administrator’ role assignment in the default scope.&amp;nbsp; This is simply a limitation in HVRemote. At the time of writing, HVRemote cannot cope with VM Scopes.&amp;nbsp; (In fact it is hard coded to always update the role assignment called ‘Administrator’ in the default scope – on my big list and will be covered in the future).&lt;/P&gt;
&lt;P&gt;If John and Joe are now administrators in the default scope, we’ve not performed any separation as administrators in the default scope can view all VMs. There are two ways to resolve this. Either we update policy using Authorisation Manager to undo the generalisation HVRemote has made here, or use a parameter available in HVRemote when adding the account.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Method 1&lt;/U&gt; Use Authorisation Manager &lt;BR&gt;&lt;BR&gt;Select the Role Assignment ‘Administrator’ in the root scope to find the user which has been added. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-2_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-2_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-3-2 border=0 alt=azman-3-2 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-2_thumb.jpg" width=407 height=234 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-2_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;Right click on the user and choose delete (or simply hit the delete key) &lt;/P&gt;
&lt;P&gt;&lt;U&gt;Method 2&lt;/U&gt; Use a parameter to hvremote &lt;BR&gt;&lt;BR&gt;*Caveat this may not work in future releases – it does as of version 0.7 though. &lt;BR&gt;&lt;BR&gt;From an elevated command prompt when logged on as a local administrator, run &lt;BR&gt;&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;cscript hvremote.wsf /add:john /noazman&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;(Use /add:domain\account if the Hyper-V machine is domain joined)&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-3_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-3_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-3-3 border=0 alt=azman-3-3 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-3_thumb.jpg" width=394 height=358 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-3_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you compare this output to the previous hvremote output, notice there is no role assignment update in AZMan.&lt;/P&gt;
&lt;P&gt;The last part to get our user separation in place require a little thought to get your head around, and a little knowledge of the Hyper-V design.&lt;/P&gt;
&lt;P&gt;We have a service called VMMS (Virtual Machine Management Service).&amp;nbsp; There are two operations in our authorisation model which are required to be able to perform operations on the VMMS. VMMS always performs its access checks for these operations in the default scope.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;The operations are&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Read Service Configuration, and&lt;/LI&gt;
&lt;LI&gt;Reconfigure Service&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;What this means is that the users I’m separating, John and Joe, must be authorized to these operations in the default scope. It is not sufficient to just have them an ‘administrator’ in the VM Scope. Based on our knowledge from the previous parts, this is easily achieved:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Create a Role Definition ‘Service Access’ containing the two operations in the default scope&lt;/LI&gt;
&lt;LI&gt;Create a Role Assignment ‘Service Access’ linked to the ‘Service Access’ role definition in the default scope&lt;/LI&gt;
&lt;LI&gt;Add John and Joe to the role assignment ‘Service Access’ in the default scope&lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;&lt;BR&gt;Authorisation manager should look like the following when done:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-4_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-4_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-3-4 border=0 alt=azman-3-4 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-4_thumb.jpg" width=412 height=296 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-4_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-5_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-5_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-3-5 border=0 alt=azman-3-5 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-5_thumb.jpg" width=406 height=368 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-5_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;All that remains validate the configuration is to log on as those users and start Hyper-V Manager (or use Hyper-V Manager remotely in the case of a server core or Microsoft Hyper-V Server installation).&lt;/P&gt;
&lt;P&gt;Here, I’m logged on as John&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-6_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-6_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-3-6 border=0 alt=azman-3-6 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-6_thumb.jpg" width=404 height=287 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-6_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;And here, I’m logged on as Joe&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-7_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-7_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-3-7 border=0 alt=azman-3-7 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-7_thumb.jpg" width=410 height=273 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_1298B/azman-3-7_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;So that works as expected. With the information so far, I hope I’ve provided everything you need to enable you to build a model which makes sense for your own unique implementation. It’s a question of sitting down and working through how to map your organisational needs into authorisation model primitives.&amp;nbsp; There is no single right answer which fits everyone, so building a mapping is not something I can help you with! &lt;BR&gt;&lt;BR&gt;In the next part of this series, I’ll take a look at how you could debug issues with a custom authorisation model you develop. &lt;BR&gt;&lt;BR&gt;Cheers, &lt;BR&gt;John.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3280244" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category></item><item><title>Explaining the Hyper-V authorization model, part two</title><link>http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx</link><pubDate>Wed, 02 Sep 2009 21:22:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3278620</guid><dc:creator>jhoward</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3278620.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3278620</wfw:commentRss><description>&lt;P&gt;Hyper-V uses a role based authorisation model for access checks. This series of articles takes a look at the model; defines the available primitives; and walks through a couple of examples. (I actually wrote most of this series many months ago – only finally found the time to post it up!).&lt;IMG src="http://blogpics.dyndns.org/2009-sep-azman-2.jpg" mce_src="http://blogpics.dyndns.org/2009-sep-azman-2.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Quick links: &lt;A href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx"&gt;Part1&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx"&gt;Part 2&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/09/explaining-the-hyper-v-authorization-model-part-three.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/09/explaining-the-hyper-v-authorization-model-part-three.aspx"&gt;Part 3&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/18/explaining-the-hyper-v-authorization-model-part-four.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/18/explaining-the-hyper-v-authorization-model-part-four.aspx"&gt;Part 4&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx"&gt;Part one&lt;/A&gt; provided information on the primitives available in the AZMan model and looked at the out-of-box Hyper-V configuration. Building on that information, part two takes a deeper look at scopes. &lt;/P&gt;
&lt;P&gt;In part one, I talked about the top level scope (aka root or default scope) as the place where global policy is defined. I mentioned that you can also define more constrained scopes and place virtual machines in those scopes.&lt;/P&gt;
&lt;P&gt;The first question to answer is “How can you create a ‘Virtual Machine’ scope?”.&amp;nbsp; Scopes exist at an application level. You can either right-click on an application to create a new scope, as shown in the screenshot below, or use a script if you prefer automation (as I do). (If you’re interested in the specifics of API calls, take a look at &lt;A href="http://msdn.microsoft.com/en-us/library/aa375769(VS.85).aspx)" mce_href="http://msdn.microsoft.com/en-us/library/aa375769(VS.85).aspx)"&gt;http://msdn.microsoft.com/en-us/library/aa375769(VS.85).aspx)&lt;/A&gt;.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-1_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-1_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=azman-2-1 border=0 alt=azman-2-1 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-1_thumb.jpg" width=401 height=391 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-1_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Note that the script is the barest minimum – obviously I would recommend you make something more resilient for general use. &lt;BR&gt;Save the following code as “CreateScope.vbs”. &lt;/P&gt;&lt;PRE&gt;&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;' Make sure the script &lt;SPAN style="COLOR: #0000ff"&gt;is&lt;/SPAN&gt; passed a scope to create
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;szScope = wscript.arguments.named("&lt;SPAN style="COLOR: #8b0000"&gt;scope&lt;/SPAN&gt;")
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt; szScope = "&lt;SPAN style="COLOR: #8b0000"&gt;&lt;/SPAN&gt;" &lt;SPAN style="COLOR: #0000ff"&gt;then&lt;/SPAN&gt;
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;    wscript.echo "&lt;SPAN style="COLOR: #8b0000"&gt;CreateScope /scope:&amp;lt;name&amp;gt;&lt;/SPAN&gt;"
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;    wscript.quit
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;end&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;' Need to have an object referencing the store
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;set&lt;/SPAN&gt; oAuthStore = _
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   &lt;SPAN style="COLOR: #0000ff"&gt;CreateObject&lt;/SPAN&gt;("&lt;SPAN style="COLOR: #8b0000"&gt;AZRoles.AZAuthorizationStore&lt;/SPAN&gt;")
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;' Initialise the store so that we can update it
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;oAuthStore.Initialize 0, _
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   "&lt;SPAN style="COLOR: #8b0000"&gt;msxml://C:\ProgramData\Microsoft\Windows\" &amp;amp; _
&lt;/SPAN&gt;&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;   "&lt;SPAN style="COLOR: #8b0000"&gt;Hyper-V\InitialStore.xml&lt;/SPAN&gt;"
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;' Open the Hyper-V services &lt;SPAN style="COLOR: #0000ff"&gt;application&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;in&lt;/SPAN&gt; the store
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;Set&lt;/SPAN&gt; oApplication = _
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;    oAuthStore.OpenApplication("&lt;SPAN style="COLOR: #8b0000"&gt;Hyper-V services&lt;/SPAN&gt;")
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;' Create a new scope
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;Set&lt;/SPAN&gt; oNewScope = _
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;    oApplication.CreateScope2(szScope)
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;' Submit it to the store
&lt;/PRE&gt;
&lt;PRE style="BACKGROUND-COLOR: #ffffff; MARGIN: 0em; WIDTH: 100%; FONT-FAMILY: consolas,'Courier New',courier,monospace; FONT-SIZE: 12px"&gt;oNewScope.Submit&lt;/PRE&gt;&lt;/PRE&gt;
&lt;P&gt;To create a scope called “My test VM scope”, from an elevated command prompt, type&lt;/P&gt;
&lt;P&gt;&lt;FONT size=2 face="Courier New"&gt;cscript createscope.vbs /scope:“My test VM scope” &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-2_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-2_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-2-2 border=0 alt=azman-2-2 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-2_thumb.jpg" width=412 height=126 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-2_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;If you already have the Authorisation Manager MMC open after walking through part one, you need to reload the authorisation store by right-clicking on InitialStore.xml in the treeview on the left and selecting Reload. If the Authorisation Manager MMC is not open, open it now and load InitialStore.xml. &lt;/P&gt;
&lt;P&gt;When you expand out the tree, you’ll see that a new scope called “My test VM scope” has been created: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-3_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-3_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-2-3 border=0 alt=azman-2-3 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-3_thumb.jpg" width=416 height=225 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-3_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;You can also see that a “VM Scope” has the same primitives available under it as the “Default” Scope – Groups, Role Definitions, Task Definitions and Role Assignments.&amp;nbsp; You can use the MMC to create role definitions; assign operations to role definitions; create role assignments; link role assignments to role definitions; and assign accounts to role assignments at both the default scope level and at the VM Scope level. &lt;BR&gt;&lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=400&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=400&gt;&lt;EM&gt;Side note: &lt;BR&gt;&lt;BR&gt;Personally, to avoid confusion, I would avoid using role definitions in a VM scope unless you really need to keep a role definition so specific that is has to be tied to a particular VM scope. There is little reason to not create all the role definitions at the default scope level.&amp;nbsp; &lt;/EM&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;&lt;BR&gt;At this point, you probably have a question: “Why would I need a ‘Virtual Machine’ scope?” And a great question it is, too. To answer it, let’s consider the following simple scenario: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;BR&gt;You have a shared Hyper-V machine. It is used by two users called “John” and “Joe”.&amp;nbsp; Both John and Joe have a single VM of theirs on that server called “Johns VM” and “Joes VM” respectively. &lt;/P&gt;
&lt;P&gt;You want the system configured so that John cannot even see that Joe is a user or has VMs on that machine, and visa-versa. John must be able to perform all operations on his virtual machine, and Joe must be able to perform all operations on his virtual machine. Neither Joe or John should be administrators on the physical machine. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Without virtual machine scopes, this is not possible. Let’s work through how you would configure that scenario. I’m going to start with the blank InitialStore.xml again for this. Using CreateScope.vbs, create scopes called “Johns VM Scope” and “Joes VM Scope”. Reload InitialStore.xml in Authorisation Manager. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-4_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-4_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-2-4 border=0 alt=azman-2-4 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-4_thumb.jpg" width=393 height=242 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-4_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;Within each of these new VM scopes, I’ll now use Authorisation Manager to create a new role assignment called ‘Administrator’ (not to be confused with the default scope role assignment ‘Administrator’ – AZMan permits role assignments with the same name in different scopes), and link it to the default scope ‘Administrator’ role definition.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Right-click “Role Assignments” under the VM scope and choose New Role Assignment…&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-5_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-5_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-2-5 border=0 alt=azman-2-5 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-5_thumb.jpg" width=385 height=420 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-5_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the dialog, select the role definition ‘Administrator’ in the default scope(called ‘Where Defined: Application’ in the UI) by checking it, then hit OK. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-6_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-6_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-2-6 border=0 alt=azman-2-6 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-6_thumb.jpg" width=397 height=261 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-6_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;The tree view should look something like this: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-7_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-7_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-2-7 border=0 alt=azman-2-7 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-7_thumb.jpg" width=208 height=268 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-7_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;The next step is to put “John” into the Administrator role assignment in the VM Scope ‘John’s VMs” and to put “Joe” into the Administrators role assignment in the VM Scope ‘Joe’s VMs”. To do this, right-click the newly added role assignment and choose Assign Users and Groups, then From Windows and Active Directory. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-8_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-8_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-2-8 border=0 alt=azman-2-8 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-8_thumb.jpg" width=403 height=137 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-8_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;After making the necessary changes, your policy store should look like the following: &lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-9_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-9_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-2-9 border=0 alt=azman-2-9 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-9_thumb.jpg" width=410 height=378 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-9_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Important to remember and note is that neither John or Joe are local administrators on the machine. Let’s take a step forward and assume that John and Joe have already created a virtual machine. In the screenshot below, I’m logged on as the local administrator. Remember that built in administrators are administrators in the default scope in the default policy store, and hence can see both virtual machines. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-10_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-10_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-2-10 border=0 alt=azman-2-10 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-10_thumb.jpg" width=408 height=198 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-10_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;The magic sauce needed to make the separation is to move Joes VM into the scope ‘Joes VM Scope’ and move Johns VM into the scope ‘Johns VM Scope’. Now as much as I write my own scripts for just about everything, there are certain times where it makes no sense to reinvent the wheel. If you download &lt;A href="http://blogs.technet.com/alipka/archive/2008/07/02/off-topic-things-and-some-hyper-v-goodies-resources-backup-and-azman-scope-scripts.aspx" mce_href="http://blogs.technet.com/alipka/archive/2008/07/02/off-topic-things-and-some-hyper-v-goodies-resources-backup-and-azman-scope-scripts.aspx"&gt;BackupVMsAndScopeScripts.zip&lt;/A&gt; and expand the files, there is a script called SetScope.vbs &lt;/P&gt;
&lt;P&gt;Run the script: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT face="Courier New"&gt;cscript setscope.vbs “Johns VM” “Johns VM Scope”&lt;/FONT&gt; &lt;/LI&gt;
&lt;LI&gt;and &lt;FONT size=2 face="Courier New"&gt;cscript setscope.vbs “Joes VM” “Joes VM Scope” &lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;&lt;FONT size=2 face="Courier New"&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;You’ll get a big spew of output from each command. I’ll leave it an exercise for the reader to modify the script to their needs or develop their own. You want to look at the very last bit of the output which will say “0” if the update succeeded. &lt;/FONT&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-11_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-11_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-2-11 border=0 alt=azman-2-11 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-11_thumb.jpg" width=408 height=161 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_11CB9/azman-2-11_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;That’s it from a VM configuration standpoint, but there are still some nuances which needs resolving before John and Joe can use Hyper-V Manager to get their custom view of only their VMs.&amp;nbsp; As it’s involves several steps, I’ll cover this in part three. &lt;BR&gt;&lt;BR&gt;Cheers, &lt;BR&gt;John.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3278620" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category></item><item><title>Explaining the Hyper-V authorization model, part one</title><link>http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx</link><pubDate>Tue, 01 Sep 2009 05:28:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3278384</guid><dc:creator>jhoward</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3278384.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3278384</wfw:commentRss><description>&lt;P&gt;Hyper-V uses a role based authorisation model for access checks. This series of articles takes a look at the model; defines the available primitives; and walks through a couple of examples. (I actually wrote most of this series many months ago – only finally found the time to post it up!).&lt;IMG src="http://blogpics.dyndns.org/2009-aug-azman-1.jpg" mce_src="http://blogpics.dyndns.org/2009-aug-azman-1.jpg"&gt;&lt;/P&gt;
&lt;P&gt;Quick links: &lt;A href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/08/31/explaining-the-hyper-v-authorization-model-part-one.aspx"&gt;Part1&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/02/explaining-the-hyper-v-authorization-model-part-two.aspx"&gt;Part 2&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/09/explaining-the-hyper-v-authorization-model-part-three.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/09/explaining-the-hyper-v-authorization-model-part-three.aspx"&gt;Part 3&lt;/A&gt;; &lt;A href="http://blogs.technet.com/jhoward/archive/2009/09/18/explaining-the-hyper-v-authorization-model-part-four.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/09/18/explaining-the-hyper-v-authorization-model-part-four.aspx"&gt;Part 4&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As the term ‘Role Based Authorisation Model’ implies, Hyper-V has an authorisation layer which performs access checks to grant or deny an account access to operations based on roles the account is a member of. That is not to say everything in Hyper-V has an authorisation protection layer – we also use traditional NT ACL-based security mechanisms. However, this series of articles concentrates just on the authorisation model. &lt;/P&gt;
&lt;P&gt;A term I should introduce at this point is “AZMan”. AZMan is, in short, an engine and toolset for making role based access checks and defining policy. AZMan is a component built into Windows. Hyper-V uses AZMan to control role based authorisation. &lt;/P&gt;
&lt;P&gt;When you install Hyper-V, the system is configured with a policy store, the policy store being nothing more than a file on disk called ‘InitialStore.xml’. InitialStore.xml contains the most simple of authorisation policies: local administrators are authorised to perform all operations protected by a policy check.&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;There are two registry keys Hyper-V uses to define attributes about the policy store. They are both under HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Virtualization.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;StoreLocation &lt;/EM&gt;points to a file called InitialStore in a hidden directory c:\ProgramData. &lt;BR&gt;&lt;EM&gt;ServiceApplication&lt;/EM&gt; defines which application in the policy store is used.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-1_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-1_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-1-1 border=0 alt=azman-1-1 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-1_thumb.jpg" width=408 height=157 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-1_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;Before looking at the contents of InitialStore.xml, let’s define some primitives which Hyper-V uses in AZMan.&lt;/P&gt;
&lt;P&gt;(Note that AZMan is a very flexible model, and Hyper-V does not use all the primitives available in AZMan. Also these articles do not cover more advanced modeling capabilities where you can, to some extent, build nested models).&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Application&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Policy stores define the authorisation model for zero or more applications. An application is top-level container which contains all the other primitives used by an application. Examples of applications could be ‘My Financials Application’ or (not by any coincidence!) ‘Hyper-V services’.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Operations&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Operations are specific items or actions being guarded by an access check in an application. For example, when a user tells a system to “Create a Virtual Machine”, Hyper-V makes an access check. &lt;/P&gt;
&lt;P&gt;&lt;U&gt;Role Definitions&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;As the name implies, this is the definition of a specific role, such as a Hyper-V administrator, or a Hyper-V Network Administrator, or standard user. It is defined by a name and zero or more operations which are permissible in this role definition.&amp;nbsp; So with the examples I just gave, you could choose to setup the store such that an administrator role definition contains all operations, a network administrator role definition contain the operations for altering, creating or deleting virtual networks, and standard users can only connect and interact with virtual machines.&lt;/P&gt;
&lt;P&gt;&lt;U&gt;Role Assignments&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Role assignments are where users and groups are placed or “assigned” in the model. A role assignment can be stand alone or linked to one or more role definitions. &lt;BR&gt;A standalone role assignment doesn’t make too much sense, as without any role definition links, it is nothing more than an orphaned grouping of accounts. &lt;BR&gt;When you link a role assignment to a role definition, you are saying that the accounts in the role assignment have would pass access checks for the operations defined in the linked role definition.&amp;nbsp; If you link a role assignment to multiple role definitions, accounts in the role assignment would pass access checks for the superset of operations defined by all the linked role definitions. &lt;BR&gt;Role assignments can be created at multiple levels or “scopes”. &lt;/P&gt;
&lt;P&gt;&lt;U&gt;Scopes&lt;/U&gt;&lt;/P&gt;
&lt;P&gt;Scopes are a more advanced feature in the authorisation model. Scopes can be thought of as the “level” where role definitions, role assignments and other AZMan primitives reside. Each AZMan policy store contains a single top level scope. A good way to think of the top level scope is the place where global policy is defined. &lt;/P&gt;
&lt;TABLE border=1 cellSpacing=0 cellPadding=2 width=421&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=419&gt;&lt;EM&gt;Side note &lt;BR&gt;&lt;BR&gt;Internally on the Hyper-V team, this tends to be referred to as the ‘default’ or ‘root’ scope. Whether that is correct or not in AZMan terminology is another question! I believe the correct term is “Application” scope. &lt;/EM&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;You can also create additional “more constrained” scopes, and place virtual machines in them. For the purposes of Hyper-V, it makes sense to think of these as VM specific scopes, or VM Scopes for short. Using VM scopes is a topic I’ll cover in more detail in later parts of this series.&lt;/P&gt;
&lt;P&gt;So with knowledge of those primitives, let’s take a look at the out-of-box policy store. To use the management tools for AZMan requires a full installation of Windows Server rather than server core. (Or you can take a copy of the file across to a separate Vista or Windows 7 installation). As the policy store is in a hidden and ACL’d directory, you need to be a local administrator to open the file.&lt;/P&gt;
&lt;P&gt;Start azman.msc&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-2_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-2_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-1-2 border=0 alt=azman-1-2 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-2_thumb.jpg" width=404 height=142 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-2_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;Right click on Authorisation Manager in the tree view on the left and select Open Authorisation Store. Navigate, or enter the path, to InitialStore.xml (again, note \ProgramData is a hidden directory – you can type it in though).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-3_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-3_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-1-3 border=0 alt=azman-1-3 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-3_thumb.jpg" width=403 height=230 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-3_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;Once open, the first thing to notice is that there is a single application defined:&amp;nbsp; ‘Hyper-V services’. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-4_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-4_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-1-4 border=0 alt=azman-1-4 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-4_thumb.jpg" width=408 height=164 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-4_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;This matches the registry key ‘ServiceApplication’ in the screenshot higher up this article. Next, I’ve expanded out a couple of nodes so that you can see where Role Definitions and Role Assignments fit in to the hierarchy. &lt;/P&gt;
&lt;P&gt;(Note the Hyper-V authorisation model does not use Task Definitions or Authorisation Rules, and I won’t be talking about Groups in this series of articles)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-5_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-5_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-1-5 border=0 alt=azman-1-5 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-5_thumb.jpg" width=412 height=193 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-5_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;You can see that we have a single role definition ‘Administrator’ and a single role assignment ‘Administrator’ defined. First, examine the ‘Administrator’ role definition by right clicking on it, selecting properties and choosing the Definition tab.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-6_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-6_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-1-6 border=0 alt=azman-1-6 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-6_thumb.jpg" width=393 height=429 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-6_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;This is where we can see which operations are covered by a role definition. There are 33 operations in Hyper-V in Windows Server 2008 and Microsoft Hyper-V Server, and 34 operations in Windows Server 2008 R2 and Microsoft Hyper-V Server R2. &lt;/P&gt;
&lt;P&gt;If you select a role assignment, Authorisation Manager displays a list of accounts who are members of that role assignment – the default being the builtin administrators group.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-7_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-7_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-1-7 border=0 alt=azman-1-7 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-7_thumb.jpg" width=404 height=189 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-7_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;As an aside – if you are walking through this and are using a domain joined machine (the above screenshot is from a workgroup machine), the default accounts listed in the “Administrator” Role Assignment will be domainname\administrators. This is actually a bug (as far as I can tell) in the AZMan console. You can verify this by opening InitialStore.xml in an editor:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-8_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-8_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=azman-1-8 border=0 alt=azman-1-8 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-8_thumb.jpg" width=406 height=54 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ExplainingtheHyperVauthorizationmodelpar_111C3/azman-1-8_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;You’ll notice that the SID listed is S-1-5-32-544 which is the SID (Security Identifier) of the builtin\administrators group - &lt;A href="http://support.microsoft.com/kb/163846" mce_href="http://support.microsoft.com/kb/163846"&gt;http://support.microsoft.com/kb/163846&lt;/A&gt; has more information. &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;So that explains how the default policy in Hyper-V is setup such that local administrators have access to all operations. With an understanding of the primitives, it is trivial to extrapolate how to modify the model to grant other accounts full access to Hyper-V without needing to be local administrators on the Hyper-V machine itself – you simply need to add accounts to the ‘Administrator’ role assignment in the default scope. This is exactly what &lt;A href="http://blogs.msdn.com/virtual_pc_guy/archive/2008/01/17/allowing-non-administrators-to-control-hyper-v.aspx" mce_href="http://blogs.msdn.com/virtual_pc_guy/archive/2008/01/17/allowing-non-administrators-to-control-hyper-v.aspx"&gt;Ben&lt;/A&gt; blogged about in January last year. &lt;/P&gt;
&lt;P&gt;In the next part, I’ll take a look at scopes.&lt;/P&gt;
&lt;P&gt;Cheers, &lt;BR&gt;John.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3278384" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item><item><title>Hyper-V: How to remove disabled virtual network adapters from the parent partition</title><link>http://blogs.technet.com/jhoward/archive/2009/07/01/hyper-v-how-to-remove-disabled-virtual-network-adapters-from-the-parent-partition.aspx</link><pubDate>Thu, 02 Jul 2009 04:01:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3260597</guid><dc:creator>jhoward</dc:creator><slash:comments>5</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3260597.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3260597</wfw:commentRss><description>&lt;P&gt;In &lt;A href="http://blogs.technet.com/jhoward/archive/2009/05/04/new-in-hyper-v-windows-server-2008-r2-part-1-dedicated-networks.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2009/05/04/new-in-hyper-v-windows-server-2008-r2-part-1-dedicated-networks.aspx"&gt;May&lt;/A&gt;, I mentioned that we introduced a checkbox in the Hyper-V UI for Windows 7 and Windows Server 2008 R2 which determines whether a virtual NIC is created in the parent partition for External Virtual Networks. (To get a better understanding of Hyper-V networking and what this means, take a look at this &lt;A href="http://blogs.technet.com/jhoward/archive/2008/06/17/hyper-v-what-are-the-uses-for-different-types-of-virtual-networks.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2008/06/17/hyper-v-what-are-the-uses-for-different-types-of-virtual-networks.aspx"&gt;article&lt;/A&gt;.)&lt;IMG src="http://blogpics.dyndns.org/2009-jul-remove-disabled-nics.jpg" mce_src="http://blogpics.dyndns.org/2009-jul-remove-disabled-nics.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Many customers follow our best practice of having at least two physical NICs, one for use by the parent partition (aka Management Operating System), and one or more for use by virtual machines. But using the “v1” UI, there’s no option to &lt;EM&gt;not &lt;/EM&gt;have the parent virtual NIC created. Two common ways to resolve this are to disable the virtual NIC it in “Network Connections” on the control panel, or unbinding all protocols from the virtual NIC. The disabling option tends (in my experience) to be the more common choice of the two.&lt;/P&gt;
&lt;P&gt;There are, of course, several scripts out there to create what I termed a “dedicated” network (ie one which is dedicated for use only by virtual machines) last year. Ben has a couple of samples &lt;A href="http://blogs.msdn.com/virtual_pc_guy/archive/2009/02/19/script-creating-an-external-only-virtual-network-with-hyper-v.aspx" mce_href="http://blogs.msdn.com/virtual_pc_guy/archive/2009/02/19/script-creating-an-external-only-virtual-network-with-hyper-v.aspx"&gt;here&lt;/A&gt; in both VBScript and PowerShell, and Robert has a sample &lt;A href="http://blogs.msdn.com/robertvi/archive/2008/08/27/howto-create-a-virtual-swich-for-external-without-creating-a-virtual-nic-on-the-root.aspx" mce_href="http://blogs.msdn.com/robertvi/archive/2008/08/27/howto-create-a-virtual-swich-for-external-without-creating-a-virtual-nic-on-the-root.aspx"&gt;here&lt;/A&gt;. These are better approaches to disabling NICs or removing protocol bindings.&lt;/P&gt;
&lt;P&gt;To date, I haven’t come across a script which removes disabled virtual NICs in the parent partition. So here is one such example. This will hopefully assist you in being more “compliant” with our best practice recommendations in an existing Hyper-V deployment. &lt;/P&gt;
&lt;P&gt;Obviously with any script which does destructive things, I urge caution and that you make careful note of your configuration before running it, and remember the standard disclaimer on my blog.&lt;/P&gt;
&lt;DIV style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; BACKGROUND-COLOR: #f4f4f4; MARGIN: 20px 0px 10px; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; MAX-HEIGHT: 200px; FONT-SIZE: 8pt; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px" id=codeSnippetWrapper&gt;
&lt;DIV style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;// VirtualSwitchManagementService object.  Logical wrapper class for Switch Management Service&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;VirtualSwitchManagementService(&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    Server,&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    User,&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    Password&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    )&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;{&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;// Define instance fields.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//    &lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.m_VirtualizationNamespace  = &lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.m_VirtualSwitchManagementService = &lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;// Instance methods&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//        &lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    VirtualSwitchManagementService.prototype.DeleteInternalEthernetPort = &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;(&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        InternalEthernetPort&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        )&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;/*++&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    Description:&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        Deletes an internal ethernet port&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        &lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    Arguments:&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        InternalEthernetPort - Msvm_InternalEthernetPort to delete&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        &lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    Return Value:&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        SWbemMethod.OutParameters object.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    --*/&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; methodName = &lt;SPAN style="COLOR: #006080"&gt;"DeleteInternalEthernetPort"&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; inParams = &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.m_VirtualSwitchManagementService.Methods_(methodName).inParameters.SpawnInstance_();&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        inParams.InternalEthernetPort = InternalEthernetPort.Path_.Path;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.m_VirtualSwitchManagementService.ExecMethod_(methodName, inParams);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    }&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;// Utility functions&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    VirtualSwitchManagementService.prototype.WaitForNetworkJob = &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;(&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        OutParams&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        )&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;/*++&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    Description:&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        WMI calls will exit with some type of return result.  Some will require &lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        a little more processing before they are complete. This handles those &lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        states after a wmi call.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    Arguments:&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        OutParams - the parameters returned by the wmi call.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    Return Value:&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        Status code&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    --*/&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt; (OutParams.ReturnValue == 4096)&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; jobStateStarting        = 3;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; jobStateRunning         = 4;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; jobStateCompleted       = 7;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; networkJob;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;do&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                WScript.Sleep(1000);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                networkJob = &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.m_VirtualizationNamespace.Get(OutParams.Job);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            } &lt;SPAN style="COLOR: #0000ff"&gt;while&lt;/SPAN&gt; ((networkJob.JobState == jobStateStarting) || &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                     (networkJob.JobState == jobStateRunning));&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt; (networkJob.JobState != jobStateCompleted)&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                &lt;SPAN style="COLOR: #0000ff"&gt;throw&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; Error(networkJob.ErrorCode,&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                                networkJob.Description + &lt;SPAN style="COLOR: #006080"&gt;" failed: "&lt;/SPAN&gt; + networkJob.ErrorDescription));&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            }&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; networkJob.ErrorCode;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        }&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;return&lt;/SPAN&gt; OutParams.ReturnValue;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    }&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;// Aggregate functions&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    VirtualSwitchManagementService.prototype.DeleteInternalEthernetPortAndWait = &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt;(&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        InternalEthernetPort&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        )&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;/*++&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    Description:&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        Deletes an internal ethernet port&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        &lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    Arguments:&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        InternalEthernetPort - Msvm_InternalEthernetPort to delete&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        &lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    Return Value:&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;        SWbemMethod.OutParameters object.&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;    --*/&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; outParams = &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.DeleteInternalEthernetPort(InternalEthernetPort);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; wmiRetValue = &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.WaitForNetworkJob(outParams);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt; (wmiRetValue != 0)&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;throw&lt;/SPAN&gt;(&lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; Error(wmiRetValue, &lt;SPAN style="COLOR: #006080"&gt;"DeleteInternalEthernetPortAndWait failed"&lt;/SPAN&gt;));&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        }&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    }&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;// Constructor code&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt; (Server == &lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        Server = WScript.CreateObject(&lt;SPAN style="COLOR: #006080"&gt;"WScript.Network"&lt;/SPAN&gt;).ComputerName; &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    }&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;// Set Namespace fields&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; locator = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; ActiveXObject(&lt;SPAN style="COLOR: #006080"&gt;"WbemScripting.SWbemLocator"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.m_VirtualizationNamespace = locator.ConnectServer(Server, &lt;SPAN style="COLOR: #006080"&gt;"root\\virtualization"&lt;/SPAN&gt;, User, Password);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;// Set Msvm_VirtualSwitchManagementService field&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; physicalComputerSystem = &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.m_VirtualizationNamespace.Get(&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                    &lt;SPAN style="COLOR: #006080"&gt;"Msvm_ComputerSystem.CreationClassName='Msvm_ComputerSystem',Name='"&lt;/SPAN&gt; + Server + &lt;SPAN style="COLOR: #006080"&gt;"'"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; list = physicalComputerSystem.Associators_(&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                        &lt;SPAN style="COLOR: #006080"&gt;"Msvm_HostedService"&lt;/SPAN&gt;,&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                        &lt;SPAN style="COLOR: #006080"&gt;"Msvm_VirtualSwitchManagementService"&lt;/SPAN&gt;,&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                        &lt;SPAN style="COLOR: #006080"&gt;"Dependent"&lt;/SPAN&gt;);        &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;this&lt;/SPAN&gt;.m_VirtualSwitchManagementService = list.ItemIndex(0)&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;}&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;//&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;// main&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #008000"&gt;// &lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; wshShell = WScript.CreateObject(&lt;SPAN style="COLOR: #006080"&gt;"WScript.Shell"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; g_NvspWmi   = &lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; g_CimV2     = &lt;SPAN style="COLOR: #0000ff"&gt;null&lt;/SPAN&gt;;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;Main();&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;function&lt;/SPAN&gt; Main()&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;{&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    g_NvspWmi   = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; VirtualSwitchManagementService();&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    WScript.Echo(&lt;SPAN style="COLOR: #006080"&gt;"Looking for root\\cimv2..."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; locator = &lt;SPAN style="COLOR: #0000ff"&gt;new&lt;/SPAN&gt; ActiveXObject(&lt;SPAN style="COLOR: #006080"&gt;"WbemScripting.SWbemLocator"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    g_CimV2 = locator.ConnectServer(&lt;SPAN style="COLOR: #006080"&gt;""&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #006080"&gt;"root\\cimv2"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #006080"&gt;""&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #006080"&gt;""&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    WScript.Echo(&lt;SPAN style="COLOR: #006080"&gt;""&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    WScript.Echo(&lt;SPAN style="COLOR: #006080"&gt;"Looking for internal (parent) virtual nics..."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; list = g_NvspWmi.m_VirtualizationNamespace.ExecQuery(&lt;SPAN style="COLOR: #006080"&gt;"SELECT * FROM Msvm_InternalEthernetPort"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;for&lt;/SPAN&gt; (i = 0; i &amp;lt; list.Count; i++)&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; next = list.ItemIndex(i);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #008000"&gt;// find correpsonding Win32_NetworkAdapter&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; adapters = g_CimV2.ExecQuery(&lt;SPAN style="COLOR: #006080"&gt;"SELECT * FROM Win32_NetworkAdapter WHERE GUID='"&lt;/SPAN&gt; + next.DeviceID + &lt;SPAN style="COLOR: #006080"&gt;"'"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        &lt;SPAN style="COLOR: #0000ff"&gt;for&lt;/SPAN&gt; (j = 0; j &amp;lt; adapters.Count; j++)&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;var&lt;/SPAN&gt; adapter = adapters.ItemIndex(j);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt; (adapter.NetEnabled == &lt;SPAN style="COLOR: #0000ff"&gt;false&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                WScript.echo(&lt;SPAN style="COLOR: #006080"&gt;"Deleting '"&lt;/SPAN&gt; + next.ElementName + &lt;SPAN style="COLOR: #006080"&gt;"' because it is disabled."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                g_NvspWmi.DeleteInternalEthernetPortAndWait(next);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            }&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            &lt;SPAN style="COLOR: #0000ff"&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            {&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;                WScript.echo(&lt;SPAN style="COLOR: #006080"&gt;"Not deleting '"&lt;/SPAN&gt; + next.ElementName + &lt;SPAN style="COLOR: #006080"&gt;"' because it is enabled."&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;            }&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;        }&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    }&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    WScript.Echo(&lt;SPAN style="COLOR: #006080"&gt;""&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;    WScript.Echo(&lt;SPAN style="COLOR: #006080"&gt;"Finished!"&lt;/SPAN&gt;);&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"&gt;}&lt;/PRE&gt;&lt;!--CRLF--&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;&lt;BR&gt;The script should be saved with a .js extension to run it from the command line. Or you can get it as a text file from &lt;A href="http://blogpics.dyndns.org/2009/07/scrub.txt" mce_href="http://blogpics.dyndns.org/2009/07/scrub.txt"&gt;here&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;One thing I would note is that after running the script, you’ll notice in the “v1” UI when you select an External Virtual Network, the message “This virtual network switch cannot be configured. You might not have permission to perform this task, or it might have been reconfigured in the parent partition” is displayed. This limits your ability to change the network type to an Internal or Private network. However, you can still remove the network if necessary. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/testtestHyperVHowtoremovedisabledvirtual_F798/Virtual%20Network%20Manager_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/testtestHyperVHowtoremovedisabledvirtual_F798/Virtual%20Network%20Manager_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Virtual Network Manager" border=0 alt="Virtual Network Manager" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/testtestHyperVHowtoremovedisabledvirtual_F798/Virtual%20Network%20Manager_thumb.jpg" width=446 height=415 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/testtestHyperVHowtoremovedisabledvirtual_F798/Virtual%20Network%20Manager_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;Another point to note is that if you are running Hyper-V v1 RTM on Windows Server 2008 SP1, have disabled virtual NICs in the parent partition, then apply Service Pack 2, disabled NICs are re-enabled after applying the service pack. Hence, I would recommend you remove disabled virtual NICs from the parent partition if you have no need for them prior to applying SP2. &lt;/P&gt;
&lt;P&gt;And for completeness, if you ever need to completely remove all virtual networks from your system (it crops up as a question every now and then), there’s a useful script you can find &lt;A href="http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/2ac6f75c-abe3-4b11-ab6e-022642df32c4" mce_href="http://social.technet.microsoft.com/Forums/en-US/winserverhyperv/thread/2ac6f75c-abe3-4b11-ab6e-022642df32c4"&gt;here&lt;/A&gt;. Obviously though, I recommend extreme caution before running that script. &lt;BR&gt;&lt;BR&gt;Cheers, &lt;BR&gt;John. &lt;BR&gt;&lt;BR&gt;And again, thanks to Keith for his assistance :)&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3260597" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item><item><title>Hyper-V Resolving Event ID 4096</title><link>http://blogs.technet.com/jhoward/archive/2008/12/28/hyper-v-resolving-event-id-4096.aspx</link><pubDate>Sun, 28 Dec 2008 22:25:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3174126</guid><dc:creator>jhoward</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3174126.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3174126</wfw:commentRss><description>&lt;P&gt;Over the break I’ve been taking over Christmas, one of my goals was to move the remainder of my Virtual Server “production” VMs across to Hyper-V. But when nearing completion, I noticed that Server Manager was reporting a role error:&lt;IMG src="http://blogpics.dyndns.org/2008-dec-eventid-4096.jpg" mce_src="http://blogpics.dyndns.org/2008-dec-eventid-4096.jpg"&gt; &lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/2008-dec-eventid-4096%5B1%5D_2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/2008-dec-eventid-4096%5B1%5D_2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=2008-dec-eventid-4096[1] border=0 alt=2008-dec-eventid-4096[1] src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/2008-dec-eventid-4096%5B1%5D_thumb.jpg" width=5 height=5 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/2008-dec-eventid-4096%5B1%5D_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Role Error" border=0 alt="Role Error" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error_thumb.jpg" width=405 height=91 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Looking at the detail of the event logs, it was Event ID 4096 from Hyper-V-Config saying that The Virtual Machines Configuration {GUID} at ‘{Directory}’ is no longer accessible: The system cannot find the path specified. (0x80070003)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error2.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error2.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Role Error2" border=0 alt="Role Error2" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error2_thumb.jpg" width=416 height=207 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error2_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;This is a pretty common error many people hit, and in my case it was due to some rearranging of directories and moving virtual machines around until I had it “just right” in terms of how I like to set my own servers up. By personal preference (nothing more), I like to keep the configurations, snapshots and VHDs for my virtual machines under a single directory on a per VM basis – in my case v:\virtual machines. However, when playing earlier with my new server, I’d been using the v:\vms directory (hence the specific error in the screenshot below).&lt;/P&gt;
&lt;P&gt;So in Hyper-V Manager, under Hyper-V Settings, I enter V:\Virtual Machines in the text boxes for both Virtual Hard Disks and Virtual Machine Configuration files.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error4.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error4.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Role Error4" border=0 alt="Role Error4" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error4_thumb.jpg" width=407 height=90 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error4_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Then, when using the New Virtual Machine wizard, I check “Store the virtual machine in a different location” but keep the default directory set above, and get to the Connect Virtual Hard Disk step, the wizard populates the default directory for a new VHD in a sub-directory under V:\Virtual Machines named the same as the Virtual Machine.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error6.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error6.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Role Error6" border=0 alt="Role Error6" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error6_thumb.jpg" width=408 height=140 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error6_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;If you examine the directory structure of V:\Virtual Machines\Test after completing the wizard, you end up with this (if you also take a snapshot)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error7_1.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error7_1.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Role Error7" border=0 alt="Role Error7" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error7_thumb_1.jpg" width=412 height=174 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error7_thumb_1.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Your VHD is in the main directory, and the configuration and snapshot data-root are under the Virtual Machines and Snapshots subdirectories under “Test” (or whatever you name your virtual machine). In other words, everything for that virtual machine is in a single location which was the primary intent.&lt;/P&gt;
&lt;P&gt;Anyway, (as I frequently do in my blog posts), I somewhat digress. Back to the Event ID 4096 which indicated there was a problem with V:\VMs, the original location I was using when moving virtual machines across from Virtual Server.&lt;/P&gt;
&lt;P&gt;If you navigate to \ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines on your system drive (note that ProgramData is a hidden directory), you’ll notice that there are a number of symbolic links to configuration files. There are two in the screenshot below (one being highlighted) which points to the V:\VMs\… directory.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error3.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error3.jpg"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title="Role Error3" border=0 alt="Role Error3" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error3_thumb.jpg" width=414 height=240 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVResolvingEventID4096_A08E/Role%20Error3_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;So it’s a simple case of &lt;STRONG&gt;very carefully &lt;/STRONG&gt;deleting that or those links (just use the “del” command) which refer to the old directory, and cycling the VMMS service (net stop vmms, then, net start vmms). After this, the error will no longer be logged. Please be extremely mindful not to delete links referring to VMs you want to keep! Onwards with the rest of the migration now…&lt;/P&gt;
&lt;P&gt;Cheers, &lt;BR&gt;John.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3174126" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Misc+Factoids+_2600_amp_3B00_+Rambling/default.aspx">Misc Factoids &amp;amp; Rambling</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item><item><title>How to detect UAC elevation from VBScript</title><link>http://blogs.technet.com/jhoward/archive/2008/11/19/how-to-detect-uac-elevation-from-vbscript.aspx</link><pubDate>Wed, 19 Nov 2008 23:32:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3156553</guid><dc:creator>jhoward</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3156553.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3156553</wfw:commentRss><description>&lt;P&gt;While working on the next version of &lt;A href="http://blogs.technet.com/jhoward/archive/2008/11/14/configure-hyper-v-remote-management-in-seconds.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2008/11/14/configure-hyper-v-remote-management-in-seconds.aspx"&gt;HVRemote&lt;/A&gt; yesterday evening, one of the things I wanted to address based on feedback from various people was to have the tool (written in VBScript) detect whether it is being run from an elevated command prompt. While this is relatively easy to determine using low-level languages from the &lt;A href="http://msdn.microsoft.com/en-us/library/aa446671(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa446671(VS.85).aspx"&gt;GetTokenInformation&lt;/A&gt; API, this is not callable from VBScript without a helper. I couldn't find a pre-existing COM object in Windows Vista or Windows Server 2008 which indirectly exposed this API, or anything built in to the Windows Scripting Host. As I didn't want to ship HVRemote with a separate helper binary, I had to go digging for an alternate solution.....).&lt;IMG src="http://blogpics.dyndns.org/2008-nov-am-i-elevated.jpg" mce_src="http://blogpics.dyndns.org/2008-nov-am-i-elevated.jpg"&gt;&lt;/P&gt;
&lt;P&gt;The one thing I didn't want to do was to have the script try to do something active which might (or might not) work, returning some form of permission denied in the failure case. I wanted something passive. I discovered the &lt;A href="http://technet.microsoft.com/en-us/library/cc771299.aspx" mce_href="http://technet.microsoft.com/en-us/library/cc771299.aspx"&gt;whoami&lt;/A&gt; command displays the &lt;A href="http://msdn.microsoft.com/en-us/library/aa965848(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/aa965848(VS.85).aspx"&gt;System Manadatory Label&lt;/A&gt;. So,&amp;nbsp;if you can see where this is heading, although&amp;nbsp;this can be classified as a "glorious hack", it's straight-forward to passively determine elevation through examining the output of whoami /all (or whoami /groups which is a little more terse and still gives the information we need). All you need to know is the &lt;A class="" href="http://msdn.microsoft.com/en-us/library/bb625963.aspx" mce_href="http://msdn.microsoft.com/en-us/library/bb625963.aspx"&gt;SID strings&lt;/A&gt; for integrity levels.&lt;/P&gt;
&lt;P&gt;I also discovered an interesting thing about the &lt;A href="http://msdn.microsoft.com/en-us/library/ateytk4a(VS.85).aspx" mce_href="http://msdn.microsoft.com/en-us/library/ateytk4a(VS.85).aspx"&gt;Exec&lt;/A&gt; method of the Windows Scripting Host along the way, which certainly bemused me for a while. I drew a blank on it from Internet searching too. It appears that if the command being "Exec"'d has a lot of output (such as whoami /all), unless StdOut is drained, Exec blocks indefinitely. You learn something new every day :)&lt;/P&gt;
&lt;P&gt;Here's the sample script - save it as elevated.vbs and run as "cscript elevated.vbs". I've stripped the sample code down to a bare minimum to just demonstrate the logic - you should add the appropriate error handling if you take advantage of it in your own scripts. (Or download &lt;A class="" href="http://blogpics.dyndns.org/2008/nov/elevated.txt" mce_href="http://blogpics.dyndns.org/2008/nov/elevated.txt"&gt;here&lt;/A&gt; and rename to a .vbs extension)&lt;/P&gt;
&lt;DIV class=csharpcode&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;Dim&lt;/SPAN&gt; oShell, oExec, szStdOut&lt;/PRE&gt;&lt;PRE&gt;szStdOut = &lt;SPAN class=str&gt;""&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;Set&lt;/SPAN&gt; oShell = CreateObject(&lt;SPAN class=str&gt;"WScript.Shell"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;Set&lt;/SPAN&gt; oExec = oShell.Exec(&lt;SPAN class=str&gt;"whoami /groups"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE class=alt&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;Do&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;While&lt;/SPAN&gt; (oExec.Status = cnWshRunning) &lt;/PRE&gt;&lt;PRE class=alt&gt;   WScript.Sleep 100&lt;/PRE&gt;&lt;PRE&gt;   &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;not&lt;/SPAN&gt; oExec.StdOut.AtEndOfStream &lt;SPAN class=kwrd&gt;then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;       szStdOut = szStdOut &amp;amp; oExec.StdOut.ReadAll&lt;/PRE&gt;&lt;PRE&gt;   &lt;SPAN class=kwrd&gt;end&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;Loop&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;&lt;SPAN class=kwrd&gt;select&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;case&lt;/SPAN&gt; oExec.ExitCode&lt;/PRE&gt;&lt;PRE&gt;   &lt;SPAN class=kwrd&gt;case&lt;/SPAN&gt; 0&lt;/PRE&gt;&lt;PRE class=alt&gt;       &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;not&lt;/SPAN&gt; oExec.StdOut.AtEndOfStream &lt;SPAN class=kwrd&gt;then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;           szStdOut = szStdOut &amp;amp; oExec.StdOut.ReadAll                   &lt;/PRE&gt;&lt;PRE class=alt&gt;       &lt;SPAN class=kwrd&gt;end&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE class=alt&gt;       &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; instr(szStdOut,&lt;SPAN class=str&gt;"S-1-16-12288"&lt;/SPAN&gt;) &lt;SPAN class=kwrd&gt;Then&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE&gt;           wscript.echo &lt;SPAN class=str&gt;"Elevated"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;       &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;           &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; instr(szStdOut,&lt;SPAN class=str&gt;"S-1-16-8192"&lt;/SPAN&gt;)  &lt;SPAN class=kwrd&gt;Then&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE class=alt&gt;               wscript.echo &lt;SPAN class=str&gt;"Not Elevated"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;           &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;               wscript.echo &lt;SPAN class=str&gt;"Unknown!"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;           &lt;SPAN class=kwrd&gt;end&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;       &lt;SPAN class=kwrd&gt;end&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;   &lt;SPAN class=kwrd&gt;case&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE class=alt&gt;       &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;not&lt;/SPAN&gt; oExec.StdErr.AtEndOfStream &lt;SPAN class=kwrd&gt;then&lt;/SPAN&gt; &lt;/PRE&gt;&lt;PRE&gt;           wscript.echo oExec.StdErr.ReadAll&lt;/PRE&gt;&lt;PRE class=alt&gt;       &lt;SPAN class=kwrd&gt;end&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;if&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE&gt;&lt;SPAN class=kwrd&gt;end&lt;/SPAN&gt; &lt;SPAN class=kwrd&gt;select&lt;/SPAN&gt;&lt;/PRE&gt;&lt;/DIV&gt;
&lt;STYLE type=text/css&gt;.csharpcode {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: consolas, "Courier New", courier, monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	FONT-SIZE: small; COLOR: black; FONT-FAMILY: consolas, "Courier New", courier, monospace; BACKGROUND-COLOR: #ffffff
}
.csharpcode PRE {
	MARGIN: 0em
}
.csharpcode .rem {
	COLOR: #008000
}
.csharpcode .kwrd {
	COLOR: #0000ff
}
.csharpcode .str {
	COLOR: #006080
}
.csharpcode .op {
	COLOR: #0000c0
}
.csharpcode .preproc {
	COLOR: #cc6633
}
.csharpcode .asp {
	BACKGROUND-COLOR: #ffff00
}
.csharpcode .html {
	COLOR: #800000
}
.csharpcode .attr {
	COLOR: #ff0000
}
.csharpcode .alt {
	MARGIN: 0em; WIDTH: 100%; BACKGROUND-COLOR: #f4f4f4
}
.csharpcode .lnum {
	COLOR: #606060
}
&lt;/STYLE&gt;

&lt;P&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HowtodetectUACelevationinVBScript_A4B8/elevated.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HowtodetectUACelevationinVBScript_A4B8/elevated.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=130 alt=elevated src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HowtodetectUACelevationinVBScript_A4B8/elevated_thumb.jpg" width=431 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HowtodetectUACelevationinVBScript_A4B8/elevated_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HowtodetectUACelevationinVBScript_A4B8/Not%20Elevated.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HowtodetectUACelevationinVBScript_A4B8/Not%20Elevated.jpg"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=108 alt="Not Elevated" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HowtodetectUACelevationinVBScript_A4B8/Not%20Elevated_thumb.jpg" width=433 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HowtodetectUACelevationinVBScript_A4B8/Not%20Elevated_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Hope someone finds this snippet useful, but as always, see my blog disclaimer.&lt;/P&gt;
&lt;P&gt;Cheers, &lt;BR&gt;John.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3156553" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Misc+Factoids+_2600_amp_3B00_+Rambling/default.aspx">Misc Factoids &amp;amp; Rambling</category></item><item><title>Configure Hyper-V Remote Management in seconds</title><link>http://blogs.technet.com/jhoward/archive/2008/11/14/configure-hyper-v-remote-management-in-seconds.aspx</link><pubDate>Sat, 15 Nov 2008 03:02:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3153568</guid><dc:creator>jhoward</dc:creator><slash:comments>196</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3153568.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3153568</wfw:commentRss><description>&lt;P&gt;&lt;EM&gt;Update 19th Nov - v0.3 now released!&lt;/EM&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It has been a little quiet on the blog front, but sometimes, at least in this case, I hope I've come up with something worth waiting for. Announcing "HVRemote"...., a tool to "automagically" configure Hyper-V Remote Management. (Amazing what can be done with a few days vacation to kill before you lose them at the end of the year....).&lt;IMG src="http://blogpics.dyndns.org/2008-nov-hvremote.jpg" mce_src="http://blogpics.dyndns.org/2008-nov-hvremote.jpg"&gt;&lt;/P&gt;
&lt;P&gt;I'm not going into the gory detail here as I've created a PDF containing the documentation, and a site on &lt;A href="http://code.msdn.microsoft.com/HVRemote" mce_href="http://code.msdn.microsoft.com/HVRemote"&gt;http://code.msdn.microsoft.com/HVRemote&lt;/A&gt; where you can download the tool and the documentation. All I ask, is that if you find the tool useful, drop me an email or a comment. Thanks!&lt;/P&gt;
&lt;P&gt;What does the tool do: It reduces the manual configuration steps needed for Hyper-V Remote Management that I blogged about back in March this year &lt;A href="http://blogs.technet.com/jhoward/archive/2008/03/28/part-1-hyper-v-remote-management-you-do-not-have-the-requested-permission-to-complete-this-task-contact-the-administrator-of-the-authorization-policy-for-the-computer-computername.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2008/03/28/part-1-hyper-v-remote-management-you-do-not-have-the-requested-permission-to-complete-this-task-contact-the-administrator-of-the-authorization-policy-for-the-computer-computername.aspx"&gt;1&lt;/A&gt;, &lt;A href="http://blogs.technet.com/jhoward/archive/2008/03/28/part-2-hyper-v-remote-management-you-do-not-have-the-requested-permission-to-complete-this-task-contact-the-administrator-of-the-authorization-policy-for-the-computer-computername.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2008/03/28/part-2-hyper-v-remote-management-you-do-not-have-the-requested-permission-to-complete-this-task-contact-the-administrator-of-the-authorization-policy-for-the-computer-computername.aspx"&gt;2&lt;/A&gt;, &lt;A href="http://blogs.technet.com/jhoward/archive/2008/03/30/part-3-hyper-v-remote-management-you-do-not-have-the-requested-permission-to-complete-this-task-contact-the-administrator-of-the-authorization-policy-for-the-computer-computername.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2008/03/30/part-3-hyper-v-remote-management-you-do-not-have-the-requested-permission-to-complete-this-task-contact-the-administrator-of-the-authorization-policy-for-the-computer-computername.aspx"&gt;3&lt;/A&gt;, &lt;A href="http://blogs.technet.com/jhoward/archive/2008/04/01/part-4-domain-joined-environment-hyper-v-remote-management-you-do-not-have-the-requested-permission-to-complete-this-task-contact-the-administrator-of-the-authorization-policy-for-the-computer-computername.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2008/04/01/part-4-domain-joined-environment-hyper-v-remote-management-you-do-not-have-the-requested-permission-to-complete-this-task-contact-the-administrator-of-the-authorization-policy-for-the-computer-computername.aspx"&gt;4&lt;/A&gt; and &lt;A href="http://blogs.technet.com/jhoward/archive/2008/04/04/part-5-domain-client-to-workgroup-server-hyper-v-remote-management-you-do-not-have-the-requested-permission-to-complete-this-task-contact-the-administrator-of-the-authorization-policy-for-the-computer-computername.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2008/04/04/part-5-domain-client-to-workgroup-server-hyper-v-remote-management-you-do-not-have-the-requested-permission-to-complete-this-task-contact-the-administrator-of-the-authorization-policy-for-the-computer-computername.aspx"&gt;5&lt;/A&gt;&amp;nbsp;down to one or two commands.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;It can configure Full installations and Server Core Installations of Windows Server 2008 with the Hyper-V role enabled, plus&amp;nbsp;configure Microsoft Hyper-V Server. It runs across all locales (I've tested English and Japanese) and it&amp;nbsp;doesn't matter if the server is domain or workgroup joined. &lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;It can configure Vista SP1 and Server 2008 configured with the Hyper-V Remote Management tools. Again, doesn't matter if the client is domain or workgroup joined.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;Quick how-to:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;1. Server: To give or remove a user access permissions: &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hvremote /add:domain\user&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; or &lt;BR&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hvremote /remove:domain\user&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/Add.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/Add.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=293 alt=Add src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/Add_thumb.jpg" width=432 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/Add_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;2. Server &amp;amp; Client: Display current settings (server or client): (Screenshot is client side) &lt;BR&gt;&lt;BR&gt;&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hvremote /show &lt;/STRONG&gt;&lt;BR&gt;&lt;BR&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/showclient.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/showclient.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=399 alt=showclient src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/showclient_thumb.jpg" width=435 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/showclient_thumb.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;The other useful options are:&lt;/P&gt;
&lt;P&gt;3. Find out all the command line options: &lt;STRONG&gt;hvremote /help or hvremote /?&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/usage.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/usage.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=415 alt=usage src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/usage_thumb.jpg" width=435 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/ConfigureHyperVRemoteManagementinseconds_E16E/usage_thumb.jpg"&gt;&lt;/A&gt; &lt;BR&gt;&lt;/P&gt;
&lt;P&gt;and a couple of client side options: &lt;BR&gt;&lt;BR&gt;4. Client: Add firewall exception for MMC: &lt;STRONG&gt;hvremote /mmc:enable&lt;/STRONG&gt; &lt;BR&gt;5. Client: Allow anonymous access to Distributed COM: &lt;STRONG&gt;hvremote /AnonDCOM:grant&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;I've tried this out with a a lot of test "guinea pigs" internally at Microsoft, and using the script literally dropped their remote configuration time down to seconds.&amp;nbsp;Hopefully it will&amp;nbsp;do the same for you.&lt;/P&gt;
&lt;P&gt;But I must also point you to&amp;nbsp;the disclaimer on my blog, the disclaimer in the documentation, and the license conditions at &lt;A href="http://code.msdn.microsoft.com/HVRemote" mce_href="http://code.msdn.microsoft.com/HVRemote"&gt;http://code.msdn.microsoft.com/HVRemote&lt;/A&gt; before use: &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT color=#800000&gt;HVRemote and the associated documentation are provided "as-is". You bear the risk of using it. No express warranties, guarantees or conditions are provided. It is not supported or endorsed by Microsoft Corporation and should be used at your own risk.&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Cheers, &lt;BR&gt;John.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3153568" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Downloads/default.aspx">Downloads</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Misc+Factoids+_2600_amp_3B00_+Rambling/default.aspx">Misc Factoids &amp;amp; Rambling</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item><item><title>How to use uniquely identify a virtual machine in Hyper-V</title><link>http://blogs.technet.com/jhoward/archive/2008/09/16/how-to-use-uniquely-identify-a-virtual-machine-in-hyper-v.aspx</link><pubDate>Wed, 17 Sep 2008 01:13:30 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3124941</guid><dc:creator>jhoward</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3124941.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3124941</wfw:commentRss><description>&lt;p&gt;When managing a large number of virtual machines, there is often a need to tag it in some way with one or more properties uniquely identifying it for administrative purposes. One example would be to identify a virtual machine as belonging to a person, team or business unit.&lt;img src="http://blogpics.dyndns.org/2008-sep-uniquely-identify-vm.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;The Hyper-V WMI namespace has a number of BIOS properties which can be set when a virtual machine is turned off. As these properties are part of the virtual machine configuration, they are separate from the VHD or backing storage used by the virtual machine. These properties can also be read from within a guest operating system. &lt;/p&gt;  &lt;p&gt;To start with, let&amp;#8217;s look at the following four properties and the default values they are initialized to when a virtual machine is created: &lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="436" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="131"&gt;&lt;strong&gt;Property&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="302"&gt;&lt;strong&gt;Default value&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;BIOSSerialNumber&amp;#160;&amp;#160;&amp;#160; &lt;/td&gt;        &lt;td valign="top" width="302"&gt;Randomly generated&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;BaseBoardSerialNumber&lt;/td&gt;        &lt;td valign="top" width="302"&gt;Same value as BIOSSerialNumber&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;ChassisSerialNumber&lt;/td&gt;        &lt;td valign="top" width="302"&gt;Same value as BIOSSerialNumber&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="131"&gt;ChassisAssetTag&lt;/td&gt;        &lt;td valign="top" width="302"&gt;Randomly generated (but different to BIOSSerialNumber&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;All these properties are numeric and in the format &amp;quot;XXXX-XXXX-XXXX-XXXX-XXXX-XXXX-XX&amp;quot;. &lt;/p&gt;  &lt;p&gt;Windows provides WMI classes that expose these settings inside a guest operating system. The table below shows the relationship between the WMI properties of the virtual machine and WMI properties as seen by a guest operating system.&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2" width="433" border="1"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="190"&gt;&lt;strong&gt;Property of Msvm_VirtualSystemSettingData&lt;/strong&gt;&lt;/td&gt;        &lt;td valign="top" width="241"&gt;&lt;strong&gt;WMI class &amp;amp; property in guest operating system&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="189"&gt;BIOSSerialNumber&lt;/td&gt;        &lt;td valign="top" width="241"&gt;Win32_BIOS.SerialNumber&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="188"&gt;BaseBoardSerialNumber&lt;/td&gt;        &lt;td valign="top" width="241"&gt;Win32_BaseBoard.SerialNumber&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="188"&gt;ChassisSerialNumber&lt;/td&gt;        &lt;td valign="top" width="241"&gt;Win32_SystemEnclosure.SerialNumber&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="188"&gt;ChassisAssetTag&lt;/td&gt;        &lt;td valign="top" width="241"&gt;Win32_SystemEnclosure.SMBIOSAssetTag&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;To illustrate how these values can be queried, I set the values to something less random and more easily identifiable. Here&amp;#8217;s a partial output of a query against Msvm_VirtualSystemSettingData obtained using the wbemtest application on the parent partition. (Ignore the BIOSGUID property for a few moments). &lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New" size="2"&gt;instance of Msvm_VirtualSystemSettingData     &lt;br /&gt;{      &lt;br /&gt;&amp;#160;&amp;#160; BaseBoardSerialNumber = &amp;quot;2222-2222-2222-2222-2222-2222-22&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160; BIOSGUID = &amp;quot;{AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE}&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160; BIOSSerialNumber = &amp;quot;1111-1111-1111-1111-1111-1111-11&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160; ChassisAssetTag = &amp;quot;4444-4444-4444-4444-4444-4444-44&amp;quot;;      &lt;br /&gt;&amp;#160;&amp;#160; ChassisSerialNumber = &amp;quot;3333-3333-3333-3333-3333-3333-33&amp;quot;;      &lt;br /&gt;};&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;The next step was to generate something to query the WMI properties inside the guest operating system. I used a bit of scriptomatic assistance to come up with the following bit of VBScript &amp;#8211; there&amp;#8217;s plenty of other alternatives around of course including wbemtest again, a bit of PowerShell, ...&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;Const&lt;/span&gt; wbemFlagReturnImmediately = &amp;amp;h10&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;Const&lt;/span&gt; wbemFlagForwardOnly = &amp;amp;h20&lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;Set&lt;/span&gt; objWMIService = GetObject(&lt;span class="str"&gt;&amp;quot;winmgmts:\\.\root\CIMV2&amp;quot;&lt;/span&gt;) &lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; colBIOS = objWMIService.ExecQuery( _&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="str"&gt;&amp;quot;SELECT SerialNumber FROM Win32_BIOS&amp;quot;&lt;/span&gt;, _&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="str"&gt;&amp;quot;WQL&amp;quot;&lt;/span&gt;, wbemFlagReturnImmediately + wbemFlagForwardOnly) &lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;set&lt;/span&gt; colBB = objWMIService.ExecQuery( _&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="str"&gt;&amp;quot;SELECT SerialNumber FROM &amp;quot;&lt;/span&gt; &amp;amp; _&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="str"&gt;&amp;quot;Win32_BaseBoard&amp;quot;&lt;/span&gt;, _&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="str"&gt;&amp;quot;WQL&amp;quot;&lt;/span&gt;, wbemFlagReturnImmediately + wbemFlagForwardOnly) &lt;/pre&gt;

  &lt;pre&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;Set&lt;/span&gt; colSE = objWMIService.ExecQuery( _&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="str"&gt;&amp;quot;SELECT SerialNumber,SMBIOSAssetTag &amp;quot;&lt;/span&gt; &amp;amp; _&lt;/pre&gt;

  &lt;pre class="alt"&gt; &lt;span class="str"&gt;&amp;quot;FROM Win32_SystemEnclosure&amp;quot;&lt;/span&gt;, _&lt;/pre&gt;

  &lt;pre&gt; &lt;span class="str"&gt;&amp;quot;WQL&amp;quot;&lt;/span&gt;, wbemFlagReturnImmediately + wbemFlagForwardOnly) &lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; objItem &lt;span class="kwrd"&gt;in&lt;/span&gt; colBIOS&lt;/pre&gt;

  &lt;pre class="alt"&gt;   WScript.Echo _&lt;/pre&gt;

  &lt;pre&gt;     &lt;span class="str"&gt;&amp;quot;BIOS:            SerialNumber:   &amp;quot;&lt;/span&gt; &amp;amp; _&lt;/pre&gt;

  &lt;pre class="alt"&gt;     objItem.SerialNumber&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;Next&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; objItem &lt;span class="kwrd"&gt;in&lt;/span&gt; colBB&lt;/pre&gt;

  &lt;pre class="alt"&gt;   WScript.Echo _&lt;/pre&gt;

  &lt;pre&gt;     &lt;span class="str"&gt;&amp;quot;Baseboard:       SerialNumber:   &amp;quot;&lt;/span&gt; &amp;amp; _&lt;/pre&gt;

  &lt;pre class="alt"&gt;     objItem.SerialNumber&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;Next&lt;/span&gt; &lt;/pre&gt;

  &lt;pre class="alt"&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="kwrd"&gt;For&lt;/span&gt; &lt;span class="kwrd"&gt;Each&lt;/span&gt; objItem &lt;span class="kwrd"&gt;In&lt;/span&gt; colSE&lt;/pre&gt;

  &lt;pre class="alt"&gt;   WScript.Echo _&lt;/pre&gt;

  &lt;pre&gt;     &lt;span class="str"&gt;&amp;quot;SystemEnclosure: SerialNumber:   &amp;quot;&lt;/span&gt; &amp;amp; _&lt;/pre&gt;

  &lt;pre class="alt"&gt;     objItem.SerialNumber&lt;/pre&gt;

  &lt;pre&gt;   WScript.Echo _&lt;/pre&gt;

  &lt;pre class="alt"&gt;     &lt;span class="str"&gt;&amp;quot;SystemEnclosure: SMBIOSAssetTag: &amp;quot;&lt;/span&gt; &amp;amp; _&lt;/pre&gt;

  &lt;pre&gt;     objItem.SMBIOSAssetTag&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="kwrd"&gt;Next&lt;/span&gt; &lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;This yielded the following output: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/Howtouseuniquelyidentifyavirtualmachinei_D609/tag1_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="103" alt="tag1" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/Howtouseuniquelyidentifyavirtualmachinei_D609/tag1_thumb.jpg" width="438" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;So the last problem I had to solve was the BIOSGUID value which I&amp;#8217;d set in the virtual machine configuration to AAAAAAAA-BBBB-CCCC-DDDD-EEEEEEEEEEEE. I use the word &amp;#8220;problem&amp;#8221; because I couldn&amp;#8217;t see where or if this was propagated to the guest operating system in the WMI namespace. Nothing like a good challenge&amp;#8230; :)&lt;/p&gt;

&lt;p&gt;As searching the WMI namespace drew blank (or to be more accurate I missed it), I turned to some other thoughts. First was a registry search, but that also drew a blank. &lt;/p&gt;

&lt;p&gt;I did know that the BIOS GUID is used during PXE boot &amp;#8211; here&amp;#8217;s a screenshot of the same virtual machine configured with a legacy network adapter for PXE install &amp;#8211; you can see the contrived GUID being displayed: &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/Howtouseuniquelyidentifyavirtualmachinei_D609/tag2_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="107" alt="tag2" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/Howtouseuniquelyidentifyavirtualmachinei_D609/tag2_thumb.jpg" width="439" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Next call was a utility I found from an Internet Search called ROM BIOS Explorer. Here&amp;#8217;s a screenshot of it running inside the guest operating system. As you can see from the hex-dump on the left hand side, starting at the highlight at offset 0x49, you can see the contrived GUID clearly. The utility also indicates it&amp;#8217;s in the &amp;#8220;Type 1: System Information&amp;#8221; structure in the BIOS. &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/Howtouseuniquelyidentifyavirtualmachinei_D609/tag3_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="222" alt="tag3" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/Howtouseuniquelyidentifyavirtualmachinei_D609/tag3_thumb.jpg" width="441" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;So that means the information is there &amp;#8211; it was just a question of how to access it from inside the guest operating system. Next stop was an Internet search for Type 1: System Information which yielded (among others), &lt;a href="http://download.microsoft.com/download/5/D/6/5D6EAF2B-7DDF-476B-93DC-7CF0072878E6/SMBIOS.doc"&gt;this document&lt;/a&gt; about SMBIOS on Microsoft.com. &lt;/p&gt;

&lt;p&gt;This shows that the table contains a Serial Number and UUID (another term for a GUID). So back to the Internet to refine the search to include the term &amp;#8220;UUID&amp;#8221; which led me to a pretty old &lt;a href="http://www.microsoft.com/technet/sms/20/getasset.mspx"&gt;SMS document&lt;/a&gt; which had exactly what I was looking for: Type 1, System Information UUID is exposed in Win32_ComputerSystemProduct. &lt;/p&gt;

&lt;p&gt;Back to scriptomatic to do a query, and it was there all along! &lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/Howtouseuniquelyidentifyavirtualmachinei_D609/tag4_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="199" alt="tag4" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/Howtouseuniquelyidentifyavirtualmachinei_D609/tag4_thumb.jpg" width="442" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;There's also one other useful &lt;a href="http://blogs.technet.com/m2/archive/2008/07/04/how-to-get-the-bios-guid-from-a-hyper-v-vm.aspx"&gt;link&lt;/a&gt; I found along the way. To see a sample script on how to modify Msvm_VirtualSystemSettingData please &lt;a href="http://msdn.microsoft.com/en-us/library/cc136809(VS.85).aspx"&gt;see&lt;/a&gt; here. &lt;/p&gt;

&lt;p&gt;Cheers,
  &lt;br /&gt;John. &lt;/p&gt;

&lt;p&gt;PS Thanks to my colleague Frank Berreth for pulling much of the information for this post together.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3124941" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item><item><title>Hyper-V: Why does Hyper-V Manager not always work over VPN connection? Access Denied or RPC server unavailable errors.</title><link>http://blogs.technet.com/jhoward/archive/2008/08/07/hyper-v-why-does-hyper-v-manager-not-always-work-over-vpn-connection-access-denied-or-rpc-server-unavailable-errors.aspx</link><pubDate>Fri, 08 Aug 2008 07:55:51 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3102448</guid><dc:creator>jhoward</dc:creator><slash:comments>39</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3102448.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3102448</wfw:commentRss><description>&lt;p&gt;This post examines a problem several people have reported when running Hyper-V Remote Management tools over a VPN connection&amp;#160; - specifically hitting an error &amp;#8220;Access denied. Unable to establish communication between &amp;#8216;SERVER&amp;#8217; and &amp;#8216;CLIENT&amp;#8217;&amp;#8221;. In some variations, I&amp;#8217;ve seen RPC errors such as &amp;#8220;RPC server unavailable. Unable to establish communication between &amp;#8216;SERVER&amp;#8217; and &amp;#8216;CLIENT&amp;#8217;.&amp;#8221;&lt;img src="http://blogpics.dyndns.org/2008-aug-VPN-remote-management-dns-issue.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn1_2.jpg" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="119" alt="vpn1" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn1_thumb.jpg" width="435" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;    &lt;br /&gt;And an example of an RPC error case:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn2_2.jpg" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="133" alt="vpn2" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn2_thumb.jpg" width="440" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;To be explicit up front, I am talking about this only occurring over a VPN/RAS connection &amp;#8211; when connected using a wired or wireless connection without VPN, everything works normally. If things are not working on wired/wireless, follow my series of remote management posts to configure everything first.&amp;#160; &lt;br /&gt;    &lt;br /&gt;Diagnosing the issue took a bit of sleuthing. So let&amp;#8217;s dive in. A big clue is in the first message &amp;#8211; it implies there is some form of communication between the Hyper-V enabled server and the Remote Management client. Indeed, that is correct &amp;#8211; there is a DCOM callback. So let&amp;#8217;s start by looking at the IP configuration on the laptop machine I&amp;#8217;m using for this walkthrough after the VPN connection has been established.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="193" alt="vpn3" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn3_3.jpg" width="441" border="0" /&gt;&amp;#160; &lt;br /&gt;    &lt;br /&gt;Note that the DHCP assigned address for the VPN connection is 192.168.200.6, and the DHCP assigned address for the Internet connection is 192.168.1.119.     &lt;br /&gt;    &lt;br /&gt;Let&amp;#8217;s run a network trace network trace on the Hyper-V enabled server to see what&amp;#8217;s going on. I&amp;#8217;m running the network trace while starting Hyper-V Manager on the laptop:     &lt;br /&gt;    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="198" alt="vpn4" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn4_3.jpg" width="428" border="0" /&gt;     &lt;br /&gt;The two highlighted lines show that the Hyper-V enabled server is making an attempt to connect to my local wireless IP address on my broadband connection, 192.168.1.119, rather than the DHCP assigned IP address for my machine on the internal network, 192.168.200.6.     &lt;br /&gt;    &lt;br /&gt;What&amp;#8217;s also interesting in the trace are ARP packets from the Hyper-V enabled server at 192.168.200.218 to &amp;#8220;HPCRAPTOP&amp;#8221;:     &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn5_2.jpg" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="105" alt="vpn5" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn5_thumb.jpg" width="431" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;Notice that the server is asking where 192.168.200.14 is, and netmon is resolving 192.168.200.14 to the IP address of the laptop. So that indicates all is not well with DNS since we know above that the DHCP assigned address on the VPN connection is 192.168.200.6. Let&amp;#8217;s do an nslookup to examine the DNS entry for the laptop.     &lt;br /&gt;    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="123" alt="vpn6" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn6_3.jpg" width="365" border="0" /&gt;     &lt;br /&gt;    &lt;br /&gt;Indeed, the laptop from a DNS perspective is incorrect and explains why netmon is resolving 192.168.200.14 to my laptop. (Although I didn&amp;#8217;t mention it, I happen to know that this DNS entry, 192.168.200.14, was the IP address assigned to the laptop when it was last connected directly to the internal network.)     &lt;br /&gt;    &lt;br /&gt;So as an experiment and first workaround, let&amp;#8217;s edit \windows\system32\drivers\etc on the Hyper-V enabled server to add an entry for my laptop as 192.168.200.6, the current IPv4 address for VPN and see what happens.     &lt;br /&gt;    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="127" alt="vpn7" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn7_3.jpg" width="431" border="0" /&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn8_2.jpg" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="113" alt="vpn8" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn8_thumb.jpg" width="426" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;Yes, that works. But it&amp;#8217;s hardly what I could describe as a desirable or every-day-workable solution. If you&amp;#8217;re walking through with me, remember to remove that entry hosts to see if there are any other workarounds.     &lt;br /&gt;    &lt;br /&gt;Well there is one interesting workaround which I mentioned in my remote management configuration series. However, I absolutely do NOT recommend this one unless you really need to as you are lowering the security of your machine. Changing this setting is NOT necessary for remote management in a domain environment, but it is in a workgroup environment (my home environment I&amp;#8217;m using for this is domain based).&amp;#160; Here are the settings to change in dcomcnfg on the management client:     &lt;br /&gt;    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="415" alt="vpn9" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn9_3.jpg" width="346" border="0" /&gt;     &lt;br /&gt;    &lt;br /&gt;Why this works is related to WMI/DCOM fallback, but I&amp;#8217;m far from claiming to be an expert here and will walk swiftly away from any further explanation. However, I re-iterate, I absolutely do not recommend you change this setting unless you need to.     &lt;br /&gt;So let&amp;#8217;s step back a bit now and try and understand a bit more about the DNS issue. The obvious thing to think may be to run &amp;#8220;ipconfig /registerdns&amp;#8221; from an elevated command prompt on the remote management machine to correct the DNS registration. Let&amp;#8217;s see what happens, while at the same time running a network trace on the ISA server with a filter for just the DNS protocol.&amp;#160; &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn10_4.jpg" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="258" alt="vpn10" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn10_thumb_1.jpg" width="433" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;If you&amp;#8217;re ahead of the game, you may notice this is a very interesting capture! Maybe not if you&amp;#8217;re aware of my home setup, so let me explain why. 192.168.15.2 is the external internet address of my ISA server (in turn connected to a VOIP router). The destination being resolved to a host with name starting &amp;#8216;ns&amp;#8217; is my ISP&amp;#8217;s DNS server. Looking at the frame details, you can see the packet is a DNS update request for the laptop. Unsurprisingly, if you look at the response from the ISP in packet 3949, the response is &amp;#8220;NotAuth&amp;#8221;. Afterall, they&amp;#8217;re not authoritative for DNS of my domain. I am!     &lt;br /&gt;    &lt;br /&gt;This routing to the external network through ISA is normal expected behaviour. So I&amp;#8217;m still yet to find a good solution. But all is not lost (of course). Let&amp;#8217;s take a different tactic and look a little closer at the Vista SP1 inbox VPN client configuration (as in one which hasn&amp;#8217;t been created by what-ever the equivalent of CMAK, or Connection Manager Administration Kit, for Vista &amp;#8211; and no, I&amp;#8217;ve no idea what the replacement technology is. But it does remind me to do some research for another day....).     &lt;br /&gt;    &lt;br /&gt;I&amp;#8217;m assuming you&amp;#8217;re already familiar with configuring a PPTP or L2TP VPN connection in Vista &amp;#8211; that&amp;#8217;s a little outside of the scope of this post. But here&amp;#8217;s the IPv4/Properties/Advanced/DNS dialog tab of the VPN connection I&amp;#8217;ve created to connect back to my home network. Look at the bottom three items relating to DNS registration:     &lt;br /&gt;    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="452" alt="vpn11" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn11_3.jpg" width="381" border="0" /&gt;     &lt;br /&gt;    &lt;br /&gt;Hmmmm. These look extremely promising . Logically, it sounds like I want all three: I want to specify a DNS suffix for this connection which is that of my internal domain; Yes, I want to register the connection&amp;#8217;s address in DNS; and I&amp;#8217;d like to use the DNS suffix in the DNS registration. So I changed it to look like this:     &lt;br /&gt;    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="449" alt="vpn12" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn12_3.jpg" width="379" border="0" /&gt;     &lt;br /&gt;After saving the changes, let&amp;#8217;s run that DNS-filtered network trace on the ISA server again while re-establishing the VPN connection:     &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn13_2.jpg" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="247" alt="vpn13" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn13_thumb.jpg" width="426" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;Looks good as a DNS update was sent to the internal DNS servers, not to the external ISP. It shows the update for the IPv4 address of the remote management client as 192.168.200.4 with a success response in the following packet. And ipconfig on the client?     &lt;br /&gt;    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="180" alt="vpn14" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn14_3.jpg" width="427" border="0" /&gt;     &lt;br /&gt;This confirms the trace above &amp;#8211; the remote management client has IP address 192.168.200.4. What about an nslookup of the laptop?     &lt;br /&gt;    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="92" alt="vpn15" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn15_3.jpg" width="416" border="0" /&gt;     &lt;br /&gt;Excellent. Everything is looking rosey &amp;#8211; the DHCP assigned IP address of the laptop acquired from the VPN connection is in DNS on the internal servers. Therefore, the Hyper-V enabled server should be able to locate the laptop when making it&amp;#8217;s DCOM callback, so let&amp;#8217;s fire up Hyper-V manager and see what happens:     &lt;br /&gt;    &lt;br /&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="168" alt="vpn16" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhydoesHyperVManagernotalwayswork_13416/vpn16_3.jpg" width="436" border="0" /&gt;     &lt;br /&gt;Voila! Hope you found that useful.     &lt;br /&gt;    &lt;br /&gt;Cheers,     &lt;br /&gt;John.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3102448" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/Desktop+Operating+Systems/default.aspx">Desktop Operating Systems</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Network+Infrastructure+Systems/default.aspx">Network Infrastructure Systems</category><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Misc+Factoids+_2600_amp_3B00_+Rambling/default.aspx">Misc Factoids &amp;amp; Rambling</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item><item><title>Hyper-V: Why is networking reset in my VM when I copy a VHD?</title><link>http://blogs.technet.com/jhoward/archive/2008/07/22/hyper-v-why-is-networking-reset-in-my-vm-when-i-copy-a-vhd.aspx</link><pubDate>Wed, 23 Jul 2008 01:36:53 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3092626</guid><dc:creator>jhoward</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3092626.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3092626</wfw:commentRss><description>&lt;p&gt;This is a question I&amp;#8217;ve seen come up a few times so figured it was time to examine why in a little more detail. In Virtual Server, you were able to copy VHDs and the associated VMC (Virtual Machine Configuration) file from one host to another, add the VMC to the other host and everything would work. In Hyper-V however, this is not the case due to improvements in our security model.&lt;img src="http://blogpics.dyndns.org/2008-jul-networking-guids.jpg" /&gt; &lt;/p&gt;  &lt;p&gt;The supported way of copying a virtual machine from one Hyper-V enabled server to another is to use the export and import functionality in Hyper-V Manager. However, there are few situations I&amp;#8217;ve seen where some creative workarounds have been necessary.&lt;/p&gt;  &lt;p&gt;Consider the case where you store a VHD on a different physical drive than the VM configuration, and the physical drive holding the configuration gets corrupted or re-imaged for some reason and the original configuration is &amp;#8220;lost&amp;#8221;.&amp;#160; Let&amp;#8217;s suppose further that the virtual machine contains some very specific IP configuration settings on one or more network adapters &amp;#8211; maybe it&amp;#8217;s a router of some kind, for example.   &lt;br /&gt;    &lt;br /&gt;In this scenario, the obvious thing to do is to create a new virtual machine with a similar configuration, add the VHD(s) and start it up. When you log on to the VM, you&amp;#8217;ll see that the originally configured IP settings are no longer present. The reason for this is that the &amp;#8220;GUID&amp;#8221; of the original network adapter was stored in the &amp;#8220;lost&amp;#8221; configuration. So when a new configuration is created, when a synthetic NIC is added, a new GUID is generated. When the virtual machine starts, plug-and-play see this new NIC, as a completely different NIC, just like as you would in a physical machine. &lt;/p&gt;  &lt;p&gt;Of course, you can, in most circumstances (I&amp;#8217;m not aware of any Microsoft applications which you can&amp;#8217;t do this on) reset the IP configuration, change the application(s) to bind to the new network adapter and all is good. Apart, that is, from that reminder from Windows that another adapter already has that IP address, as shown below. &lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="231" alt="1" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhyisnetworkingresetinmyVMwhenIcop_DB86/1_3.jpg" width="387" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;There's a &lt;a href="http://support.microsoft.com/kb/315539"&gt;KB article&lt;/a&gt; outlining how to remove those hidden network adapters. (Although targeted for XP, this appears to also work on Windows Server 2008).     &lt;br /&gt;    &lt;br /&gt;So that explains what&amp;#8217;s going on. The rest of this article really just digs a tad deeper for a little more insight into how Hyper-V operates under the covers, and see if there&amp;#8217;s another way to approach this. &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Let&amp;#8217;s go back and go through what we&amp;#8217;ve done so far: &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Created a (Windows Server 2008) virtual machine with a single &amp;#8220;synthetic&amp;#8221; NIC &lt;/li&gt;    &lt;li&gt;Assigned a static IPv4 address of 192.168.200.248. &lt;/li&gt;    &lt;li&gt;Deleted the virtual machine using Hyper-V manager (this doesn&amp;#8217;t delete the VHD). &lt;/li&gt;    &lt;li&gt;Created a new virtual machine using the same VHD and a single &amp;#8220;synthetic&amp;#8221; NIC. &lt;/li&gt;    &lt;li&gt;In Network Connections (ncpa.cpl), you see Local Area Connection n where n does not match what would have been seen in the original VM&lt;/li&gt;    &lt;li&gt;For that same &amp;#8220;Local Area Connection n&amp;#8221; network connection, you&amp;#8217;ll see the device name is &amp;#8220;Microsoft Virtual Machine Bus Network Adapter #m&amp;#8221; where m does not match what you would have seen in the original VM (or may have been missing entirely). &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;   &lt;br /&gt;Now perform the steps in the KB article so that we can see the &amp;#8220;old&amp;#8221; NIC in device manager. From an elevated command prompt:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;set devmgr_show_nonpresent_devices=1&lt;/li&gt;    &lt;li&gt;start devmgmt.msc&lt;/li&gt;    &lt;li&gt;On the menu bar: View/Show hidden devices&lt;/li&gt;    &lt;li&gt;Expand the Network adapters node&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="261" alt="2" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhyisnetworkingresetinmyVMwhenIcop_DB86/2_5.jpg" width="343" border="0" /&gt;&amp;#160; &lt;br /&gt;    &lt;br /&gt;There are two NICs. Let&amp;#8217;s take a closer look at the dimmed adapter (the one highlighted) by selecting properties, switching to the details tab and selecting Hardware Ids from the dropdown. In particular, notice the first line highlighted which is a GUID, in this example, starting f61bbefc-.&lt;/p&gt;  &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="435" alt="3" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhyisnetworkingresetinmyVMwhenIcop_DB86/3_3.jpg" width="396" border="0" /&gt; &lt;/p&gt;  &lt;p&gt;This is the VMBus &amp;#8220;Channel Offer GUID&amp;#8221; for the &amp;#8220;old&amp;#8221; NIC. Let&amp;#8217;s do the same with the currently configured NIC.    &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhyisnetworkingresetinmyVMwhenIcop_DB86/4_2.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="432" alt="4" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhyisnetworkingresetinmyVMwhenIcop_DB86/4_thumb.jpg" width="393" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;    &lt;br /&gt;Notice that the highlighted GUIDs are different &amp;#8211; the new one, in my case, starts 944fafdc. (Another way to retrieve this GUID is to extract it from the registry &amp;#8211; a little harder, but absolutely possible.) Now a bit of background information &amp;#8211; let&amp;#8217;s take a look at the XML configuration file for the current virtual machine. By default, the XML configuration files are stored under \programdata\microsoft\windows\hyper-v\virtual machines. &lt;strong&gt;&lt;font color="#ff0000"&gt;BUT&lt;/font&gt;&lt;/strong&gt; &amp;#8211; it&amp;#8217;s totally unsupported to edit these files manually, and we entirely reserve the right to change the format at any point in time. There&amp;#8217;s no harm though taking a peek at a section of it. Notice the highlighted line (ChannelInstanceGuid) matches 944fafdc&amp;#8230;.    &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhyisnetworkingresetinmyVMwhenIcop_DB86/5_2.jpg" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="71" alt="5" src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVWhyisnetworkingresetinmyVMwhenIcop_DB86/5_thumb.jpg" width="441" border="0" /&gt;&lt;/a&gt;&amp;#160; &lt;br /&gt;    &lt;br /&gt;So you&amp;#8217;ve probably now worked it out. We know the old &amp;#8220;ChannelInstanceGuid&amp;#8221; from the device manager screenshot above, and need to create a VM configuration with that same ChannelInstanceGuid. As I mentioned above, it&amp;#8217;s totally unsupported to hand-edit the configuration file, so we have to use an alternate mechanism. We expose this property in our WMI model (&lt;a href="http://msdn.microsoft.com/en-us/library/cc136992(VS.85).aspx)"&gt;http://msdn.microsoft.com/en-us/library/cc136992(VS.85).aspx)&lt;/a&gt;. Specifically, it&amp;#8217;s the first element of the array Msvm_SyntheticEthernetPortSettingData.VirtualSystemIdentifiers[] which needs updating. I&amp;#8217;ll leave the actual scripting sample up to someone else &amp;#8211; there&amp;#8217;s various examples out there on the Internet of how to use the Hyper-V WMI model. &lt;/p&gt;  &lt;p&gt;Hope that was of interest.   &lt;br /&gt;Cheers,    &lt;br /&gt;John.&lt;/p&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3092626" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/Network+Infrastructure+Systems/default.aspx">Network Infrastructure Systems</category><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item><item><title>Hyper-V: MAC Address allocation and apparent network issues MAC collisions can cause</title><link>http://blogs.technet.com/jhoward/archive/2008/07/15/hyper-v-mac-address-allocation-and-apparent-network-issues-mac-collisions-can-cause.aspx</link><pubDate>Wed, 16 Jul 2008 06:02:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3089383</guid><dc:creator>jhoward</dc:creator><slash:comments>19</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3089383.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3089383</wfw:commentRss><description>&lt;P&gt;In a physical only world, you don’t usually have to worry about MAC addresses that much as each NIC vendor carves off a MAC address from their ranges which have been allocated to them. However, in a virtual environment, you have to be a little more careful, particularly if you are using dynamic MAC address assignment. This post looks at how Hyper-V allocates dynamic MAC addresses and some potential problems you can face. So often it can be the last thing people think to check, but can be the root cause of otherwise unexplained network oddities.&amp;nbsp; &lt;IMG src="http://blogpics.dyndns.org/2008-jul-mac-addresses.jpg" mce_src="http://blogpics.dyndns.org/2008-jul-mac-addresses.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Here’s a screenshot of a typical MAC collision problem – pings sometimes work, sometimes fail – and this is all on a local isolated network. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/1_4.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/1_4.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=100 alt=1 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/1_thumb_1.jpg" width=437 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/1_thumb_1.jpg"&gt;&lt;/A&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;To start the walkthrough, I have a base install of Windows Server 2008 on a server&amp;nbsp; with a single physical NIC – against best practice, but it serves fine for demonstration.&amp;nbsp; I have already installed the RTM update (KB950050) to the server, but have not yet added the Hyper-V role. Let’s look at an output of “ipconfig /all”. You can see that the MAC address of the physical NIC is 00-13-20-F5-F8-7D and I’m obtaining an IP address from a DHCP server on the private test network I’m using. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/2_4.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/2_4.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=154 alt=2 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/2_thumb_1.jpg" width=444 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/2_thumb_1.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Now let’s use Server Manager to enable the Hyper-V role. Note that Server Manager allows you to create an external virtual network switch during role enabling, but I am choosing not to do this. Let’s see what has happened in the registry after the Hyper-V role is enabled. Specifically, I’m looking at two keys which have been created under HKLM\Software\Microsoft\Windows\NT\CurrentVersion\Virtualization, as-yet unpopulated: MinimumMacAddress and MaximumMacAddress, plus another key in the worker node, CurrentMacAddress – again as-yet unpopulated. (The astute walking through this in front of a machine will notice that CurrentMacAddress also appears in the Virtualization node. That key is not used though.) &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/3_4.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/3_4.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=122 alt=3 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/3_thumb_1.jpg" width=438 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/3_thumb_1.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/4_4.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/4_4.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=104 alt=4 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/4_thumb_1.jpg" width=440 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/4_thumb_1.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Next, I’m going to create my first virtual machine. As I haven’t created any virtual network switches yet, I’ll leave the network disconnected. I don’t need a hard disk. Also, I’m deliberately choosing not to start it.&amp;nbsp; Let’s see what’s happened in the registry. MinimumMacAddress and MaximumMacAddress have been populated with 00-15-5d-c8-6a-00 and 00-15-5d-c8-6a-ff respectively – a range of 256 possible MAC addresses. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/5_4.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/5_4.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=116 alt=5 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/5_thumb_1.jpg" width=436 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/5_thumb_1.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;So where did this range come from? The first three bytes are the Microsoft IEEE Organizationally Unique Identifier, 00-15-5D which we use in Hyper-V. The next two bytes, C8-6A are derived from the lowest two octects of an IPv4 address on the server (the first IP address as NICs are enumerated). If you look at the second screenshot in this post, the IPv4 address on the only NIC on this server was 192.168.200.106. In Hex, this is “C0.A8.C8.6A”. The last two octets or bytes are C8 and 6A. The last byte of the address range is automatically generated with a minimum 00 and maximum FF. &lt;/P&gt;
&lt;P&gt;You can probably now realize, that while this algorithm will work for many people, it may not necessarily be perfect and cause MAC address range clashes. To cope with multiple Hyper-V enabled servers, you would need to ensure address ranges are managed at a higher level across those servers, such as the use of SCVMM. &lt;/P&gt;
&lt;P&gt;Let’s go back to the virtual machine I created. By default, when a virtual machine is created, it is allocated a dynamic MAC address. This can of course be changed in the settings for the virtual machine. Here’s the setting for the blank virtual machine. Notice that it’s set to Dynamic and the MAC address in the “Static” boxes show 00-00-00-00-00-00 &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/6_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/6_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=170 alt=6 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/6_thumb.jpg" width=436 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/6_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Now I’m going to start the Virtual Machine and open the settings. Although some settings cannot be changed while a virtual machine is running (including changing static/dynamic MAC, or the static MAC itself), notice that the boxes under the static MAC address radio button are now populated with the first MAC address in the range defined in the registry: 00-15-5D-C8-6A-00. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/7_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/7_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=170 alt=7 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/7_thumb.jpg" width=436 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/7_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Now for a bit of fun (and to make the walkthrough a bit simpler), let’s change the registry so that the maximum MAC address is 00-15-5D-C8-6A-02. (I’ll also do a reboot just to make sure the change takes effect) This change means that we are limited to three possible dynamically assigned MAC addresses, the last octet being 00 (in use by the “Blank” VM), 01 or 02. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/8_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/8_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=109 alt=8 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/8_thumb.jpg" width=431 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/8_thumb.jpg"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Now, I’m going to create another virtual machine named 6A-01 and power it on, then create a third virtual machine named 6A-02 and power that on too.&amp;nbsp; Let’s look at the settings for each of these while all three virtual machines are running. As expected 6A-01 has a MAC address ending 6A-01 and 6A-02 has a MAC address ending 6A-02. That’s why we have the “CurrentMacAddress” registry key to track what MAC address to assign to VMs in turn. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/9_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/9_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=169 alt=9 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/9_thumb.jpg" width=435 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/9_thumb.jpg"&gt;&lt;/A&gt; 
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/10_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/10_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=171 alt=10 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/10_thumb.jpg" width=439 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/10_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Can you guess though at this point what would happen though if I create another virtual machine and power it on? I don’t have any MAC addresses left in my available range and all MAC addresses are currently in use. &lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=239 alt=11 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/11_3.jpg" width=380 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/11_3.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Did you guess correctly? Let’s now power off the very first virtual machine (“Blank”) I created with MAC address 6A-00, and then try to run through the New Virtual Machine Wizard again with my “No MAC Addresses Available In Range” virtual machine. Try to guess what will happen at the end. &lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=127 alt=12 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/12_3.jpg" width=336 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/12_3.jpg"&gt; &lt;/P&gt;
&lt;P&gt;The virtual machine starts successfully and now has a duplicate MAC address to the first virtual machine I created, ‘Blank’: &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/13_2.jpg" target=_blank mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/13_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=167 alt=13 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/13_thumb.jpg" width=425 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/13_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Last quiz question: What would happen then if I tried to start “Blank” – will it start or not? After all, it has already been allocated a MAC address ending 6A-00. &lt;/P&gt;
&lt;P&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=243 alt=14 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/14_3.jpg" width=386 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVMACAddressallocationandapparentnet_11795/14_3.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Actually, we will detect this as you can see above and stop the virtual machine from powering on. So in some ways, on a single Hyper-V enabled server, we’re relatively immune to duplicate MAC addresses across virtual machines running on a single server. However, due to the algorithm for choosing the ranges of MAC addresses, while relatively safe, there is no guarantee of being unique across an entire network. And of course, chances are that you will want packets from or to virtual machines on a Hyper-V server to “hit” the physical network. &lt;/P&gt;
&lt;P&gt;So hopefully that gives you a better idea why it is important to manage MAC addresses across multiple servers in a virtual machine environment. While the walkthrough above was specific to Hyper-V, the same types of issues could arise in Virtual Server. &lt;/P&gt;
&lt;P&gt;Cheers, &lt;BR&gt;John.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3089383" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/Network+Infrastructure+Systems/default.aspx">Network Infrastructure Systems</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Articles/default.aspx">Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Virtual+Server/default.aspx">Virtual Server</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item><item><title>Deploying Windows Vista SP1 with "slipstreamed" Hyper-V RTM. Part 3.</title><link>http://blogs.technet.com/jhoward/archive/2008/07/03/deploying-windows-vista-sp1-with-slipstreamed-hyper-v-rtm-part-3.aspx</link><pubDate>Thu, 03 Jul 2008 17:32:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3079744</guid><dc:creator>jhoward</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3079744.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3079744</wfw:commentRss><description>&lt;P&gt;The first two parts of this mini-series dealt with deploying Windows Server 2008 – either as the &lt;A class="" href="http://blogs.technet.com/jhoward/archive/2008/06/30/deploying-windows-server-2008-with-slipstreamed-hyper-v-rtm-part-2.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2008/06/30/deploying-windows-server-2008-with-slipstreamed-hyper-v-rtm-part-2.aspx"&gt;root partition&lt;/A&gt; with the RTM Hyper-V role enabled, or as a &lt;A class="" href="http://blogs.technet.com/jhoward/archive/2008/06/26/deploying-windows-server-2008-with-slipstreamed-hyper-v-rtm-part-1.aspx" mce_href="http://blogs.technet.com/jhoward/archive/2008/06/26/deploying-windows-server-2008-with-slipstreamed-hyper-v-rtm-part-1.aspx"&gt;child partition&lt;/A&gt; (virtual machine) with the Hyper-V RTM Integration Services installed. This third part covers an additional step for using the same technique for deploying Windows Vista SP1.&lt;IMG src="http://blogpics.dyndns.org/2008-jul-deploy-part3.jpg"&gt; &lt;/P&gt;
&lt;P&gt;The Windows Vista SP1 Integration Services for Hyper-V RTM are in a different KB and included in vmguest.iso which holds the Integration Services in Hyper-V. Currently, there isn’t a separate download available, but you can extract it really easily if you have a Windows Server 2008 machine up and running with the Hyper-V role enabled. There are a number of tools available to extract from ISOs, but let’s do this a slightly different way by using a virtual machine itself – remember that ISOs can be mounted in virtual machines directly.&lt;/P&gt;
&lt;P&gt;Below is a Windows Server 2008 virtual machine with vmguest.iso mounted in its virtual CD/DVD device. (vmguest.iso resides on the parent partition file system under \windows\system32\language). Notice that there are a couple of .MSU packages under \support\amd64 and \support\x86. We need two files for KB950214: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;\support\amd64\Windows6.0-KB950214-x64.msu and &lt;/LI&gt;
&lt;LI&gt;\support\x86\Windows6.0-KB950214-x86.msu&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/DeployingWindowsVistaSP1withslipstreame_9CA5/1_2.jpg" target=_blank&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=212 alt=1 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/DeployingWindowsVistaSP1withslipstreame_9CA5/1_thumb.jpg" width=244 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;BR&gt;I’ve taken a copy of these across to the WDS server to work on. I can use the same process as for the first part in this series to insert the package into a Windows Vista SP1 Business x64 WIM. You’ll probably want to add KB950214 (unpublished) for the Hyper-V RTM Integration Services and &lt;A class="" href="http://support.microsoft.com/kb/952627" mce_href="http://support.microsoft.com/kb/952627"&gt;KB952627&lt;/A&gt; for the Vista SP1 Hyper-V RTM Management Tools. The latter is available as a separate download from the links below, and is not present on vmguest.iso&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=BF909242-2125-4D06-A968-C8A3D75FF2AA" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=BF909242-2125-4D06-A968-C8A3D75FF2AA"&gt;x86&lt;/A&gt; &lt;/LI&gt;
&lt;LI&gt;&lt;A class="" href="http://www.microsoft.com/downloads/details.aspx?FamilyId=88208468-0AD6-47DE-8580-085CBA42C0C2" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=88208468-0AD6-47DE-8580-085CBA42C0C2"&gt;x64&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/DeployingWindowsVistaSP1withslipstreame_9CA5/2_2.jpg" target=_blank&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=206 alt=2 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/DeployingWindowsVistaSP1withslipstreame_9CA5/2_thumb.jpg" width=244 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Please also take careful note of the warning I put in my first post in this series about the /s: parameter to pkgmgr&lt;/P&gt;
&lt;P&gt;Remember to use an elevated Windows PE Tools Command Prompt for the packaging steps and choose the right architecture MSU for the WIM you are updating! Now you just need to make sure that WIM is present in WDS and deploy a virtual machine (or indeed a physical machine).&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/DeployingWindowsVistaSP1withslipstreame_9CA5/3_2.jpg" target=_blank&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=97 alt=3 src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/DeployingWindowsVistaSP1withslipstreame_9CA5/3_thumb.jpg" width=244 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Cheers, &lt;BR&gt;John.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3079744" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/Articles/default.aspx">Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item><item><title>Hyper-V: Locate Hyper-V enabled servers in your domain</title><link>http://blogs.technet.com/jhoward/archive/2008/06/30/hyper-v-locate-hyper-v-enabled-servers-in-your-domain.aspx</link><pubDate>Mon, 30 Jun 2008 23:25:00 GMT</pubDate><guid isPermaLink="false">d5e57398-b9ef-4490-9955-07cbb4e4a80d:3081119</guid><dc:creator>jhoward</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.technet.com/jhoward/comments/3081119.aspx</comments><wfw:commentRss>http://blogs.technet.com/jhoward/commentrss.aspx?PostID=3081119</wfw:commentRss><description>&lt;P&gt;It seems an eternity ago (May 2007) that I put up a &lt;A href="http://blogs.technet.com/jhoward/archive/2007/05/11/do-you-know-what-virtual-server-hosts-are-running-in-your-domain-find-out.aspx" target=_blank mce_href="http://blogs.technet.com/jhoward/archive/2007/05/11/do-you-know-what-virtual-server-hosts-are-running-in-your-domain-find-out.aspx"&gt;post&lt;/A&gt; describing how to determine which domain-joined servers are running Virtual Server in your domain(s). Well that same functionality is present in Hyper-V, only the &lt;A href="http://msdn.microsoft.com/en-us/library/ms677950(VS.85).aspx" target=_blank mce_href="http://msdn.microsoft.com/en-us/library/ms677950(VS.85).aspx"&gt;SCP&lt;/A&gt; or "Service Connection Point" in Active Directory is different - "&lt;FONT color=#0080c0&gt;&lt;STRONG&gt;Microsoft Hyper-V&lt;/STRONG&gt;&lt;/FONT&gt;".&lt;IMG src="http://blogpics.dyndns.org/2008-jun-hyperv-scp-marker.jpg" mce_src="http://blogpics.dyndns.org/2008-jun-hyperv-scp-marker.jpg"&gt; &lt;/P&gt;
&lt;P&gt;Here's a sample VBScript code. Save the contents as "FindServers.vbs" (text file &lt;A href="http://blogpics.dyndns.org/2008/jun/findservers.hv.txt" target=_blank mce_href="http://blogpics.dyndns.org/2008/jun/findservers.hv.txt"&gt;download&lt;/A&gt;) and run from an elevated command prompt "cscript FindServers.vbs".&lt;/P&gt;
&lt;DIV&gt;
&lt;DIV style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;On&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;Error&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;Resume&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;Next&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;Const&lt;/SPAN&gt; SCP = &lt;SPAN style="COLOR: #006080"&gt;"Microsoft Hyper-V"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #008000"&gt;' Add as many lines as needed for the domains in your org. &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;DoQuery &lt;SPAN style="COLOR: #006080"&gt;"DC=YOURDOMAIN,DC=com"&lt;/SPAN&gt;, &lt;SPAN style="COLOR: #006080"&gt;"YOURDOMAIN"&lt;/SPAN&gt;, SCP&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;Sub&lt;/SPAN&gt; DoQuery(szDomainDN, szDomainShortName, szSCP)&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;Set&lt;/SPAN&gt; oConnection = CreateObject(&lt;SPAN style="COLOR: #006080"&gt;"ADODB.Connection"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;Set&lt;/SPAN&gt; oCommand = CreateObject(&lt;SPAN style="COLOR: #006080"&gt;"ADODB.Command"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;    oConnection.Provider = (&lt;SPAN style="COLOR: #006080"&gt;"ADsDSOObject"&lt;/SPAN&gt;)&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;    oConnection.Open &lt;SPAN style="COLOR: #006080"&gt;"Ads Provider"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;    oCommand.ActiveConnection = oConnection&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;    oCommand.Properties(&lt;SPAN style="COLOR: #006080"&gt;"Page Size"&lt;/SPAN&gt;) = 99&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;    oCommand.Properties(&lt;SPAN style="COLOR: #006080"&gt;"Searchscope"&lt;/SPAN&gt;) = &amp;amp;H2 &lt;SPAN style="COLOR: #008000"&gt;'ADS_SCOPE_SUBTREE&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;    oCommand.Properties(&lt;SPAN style="COLOR: #006080"&gt;"Chase Referrals"&lt;/SPAN&gt;) = &amp;amp;H60 &lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;             &lt;SPAN style="COLOR: #008000"&gt;'ADS_CHASE_REFERRALS_ALWAYS&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;    oCommand.CommandText = _&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #006080"&gt;"select distinguishedName from 'LDAP://"&lt;/SPAN&gt; &amp;amp; _&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       szDomainDN &amp;amp; &lt;SPAN style="COLOR: #006080"&gt;"' "&lt;/SPAN&gt; &amp;amp; _&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #006080"&gt;"where objectCategory='serviceConnectionPoint' "&lt;/SPAN&gt; &amp;amp; _&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #006080"&gt;"and cn='"&lt;/SPAN&gt; &amp;amp; szSCP &amp;amp; &lt;SPAN style="COLOR: #006080"&gt;"'"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;Set&lt;/SPAN&gt; oRecordSet = oCommand.Execute&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;If&lt;/SPAN&gt; Err &lt;SPAN style="COLOR: #0000ff"&gt;Then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       wscript.echo _&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;           &lt;SPAN style="COLOR: #006080"&gt;"ERROR: Unable to find Domain Rooted at: "&lt;/SPAN&gt; &amp;amp; _&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;            szDomainDN&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #0000ff"&gt;exit&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;sub&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;If&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;If&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;Not&lt;/SPAN&gt; oRecordSet.EOF &lt;SPAN style="COLOR: #0000ff"&gt;Then&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       wscript.echo szDomainShortName &amp;amp; &lt;SPAN style="COLOR: #006080"&gt;":"&lt;/SPAN&gt; &amp;amp; _&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;                    oRecordSet.RecordCount&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;' If you want to enumerate the machine names, &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;' uncomment this block of code&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'oRecordSet.MoveFirst&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'Do Until oRecordSet.EOF&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'    szNodeName = _&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'      oRecordSet.Fields("distinguishedName")&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'    'Trim "CN=&amp;lt;szSCP&amp;gt;,CN="&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'    szNodeName = _&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'      mid(szNodeName, InStr(szNodeName,",CN=")+4) &lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'    'Trim the domain DN&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'    szNodeName = _&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'      Left(szNodeName,InStr(szNodeName,",")-1)&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'    wscript.echo szNodeName&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'    oRecordSet.MoveNext&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       &lt;SPAN style="COLOR: #008000"&gt;'Loop&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;else&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;       wscript.echo szDomainShortName &amp;amp; &lt;SPAN style="COLOR: #006080"&gt;": 0"&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;end&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;if&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;set&lt;/SPAN&gt; oRecordSet = &lt;SPAN style="COLOR: #0000ff"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;set&lt;/SPAN&gt; oCommand = &lt;SPAN style="COLOR: #0000ff"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;    oConnection.Close&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;    &lt;SPAN style="COLOR: #0000ff"&gt;set&lt;/SPAN&gt; oConnection = &lt;SPAN style="COLOR: #0000ff"&gt;Nothing&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;&amp;nbsp;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: white; BORDER-BOTTOM-STYLE: none"&gt;&lt;SPAN style="COLOR: #0000ff"&gt;End&lt;/SPAN&gt; &lt;SPAN style="COLOR: #0000ff"&gt;Sub&lt;/SPAN&gt;&lt;/PRE&gt;&lt;PRE style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-SIZE: 8pt; PADDING-BOTTOM: 0px; MARGIN: 0em; OVERFLOW: visible; WIDTH: 100%; COLOR: black; BORDER-TOP-STYLE: none; LINE-HEIGHT: 12pt; PADDING-TOP: 0px; FONT-FAMILY: consolas, 'Courier New', courier, monospace; BORDER-RIGHT-STYLE: none; BORDER-LEFT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; BORDER-BOTTOM-STYLE: none"&gt;       &lt;/PRE&gt;&lt;/DIV&gt;&lt;/DIV&gt;
&lt;P&gt;To use the script, edit the call right at the top to "DoQuery", inserting the appropriate domain for your organisation. Add multiple lines if you have multiple domains. If you want a list of machine names, uncomment the code-block starting "oRecordSet.MoveFirst" and ending "Loop"&lt;/P&gt;
&lt;P&gt;So I'm sure you're wondering, how many servers are actively running at Microsoft? With a bit of additional work using the script as the starting point, a simple database and some Excel macro wizardry, I happen to have been tracking the stats internally for some time now. While I can't share the scale, exact numbers and date-ranges for the graph below, you get an idea of the overall trend over a "few" months. (Don't worry about why there's two lines - the &lt;FONT color=#004080&gt;blue&lt;/FONT&gt; line is the important one). What I can say is that the current number is in the thousands. Many, many, thousands.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVLocateHyperVenabledserversinyourdo_BCD7/hypervusage.jpg" mce_href="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVLocateHyperVenabledserversinyourdo_BCD7/hypervusage.jpg"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=269 alt=hypervusage src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVLocateHyperVenabledserversinyourdo_BCD7/hypervusage_thumb.jpg" width=434 border=0 mce_src="http://blogs.technet.com/blogfiles/jhoward/WindowsLiveWriter/HyperVLocateHyperVenabledserversinyourdo_BCD7/hypervusage_thumb.jpg"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Cheers &lt;BR&gt;John.&lt;/P&gt;&lt;img src="http://blogs.technet.com/aggbug.aspx?PostID=3081119" width="1" height="1"&gt;</description><category domain="http://blogs.technet.com/jhoward/archive/tags/How+to+Articles/default.aspx">How to Articles</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Information/default.aspx">Information</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.technet.com/jhoward/archive/tags/Hyper-V/default.aspx">Hyper-V</category></item></channel></rss>