<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Stuff from stuf</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/stufox/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/stufox/feed.xml</link>
    <description>Bringing sexy back to management...</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:50:22 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Not all Orchestration tools are created equal</title>
      <link>https://docs.microsoft.com/archive/blogs/stufox/not-all-orchestration-tools-are-created-equal</link>
      <pubDate>Tue, 29 Nov 2011 12:33:16 GMT</pubDate>
      <dc:creator><![CDATA[Stu Fox [MSNZ]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/stufox/2011/11/29/not-all-orchestration-tools-are-created-equal/</guid>
      <description><![CDATA[I’ve been doing a lot of work with the Release Candidate of System Center Orchestrator, so it’s...]]></description>
      <content:encoded><![CDATA[<p>I’ve been doing a lot of work with the <a href="https://www.microsoft.com/download/en/details.aspx?id=27842">Release Candidate</a> of System Center Orchestrator, so it’s always interesting to see what other orchestration products are capable of.&#160; I recently read a <a href="https://www.vcoteam.info/learn-vco/creating-workflow-loops.html">blog post</a> on Creating Workflow Loops in vCenter Orchestrator and I was struck by just how complicated it is to do relatively simple tasks, with lots of really arcane syntax to work with.&#160; </p>  <p>It’s probably worth taking a look at how System Center Orchestrator would accomplish a similar task.&#160; First, we start with a new empty runbook.&#160; I’m going to use a text file as an input into the runbook, but we could just as easily prompt for user input, or even better store the list of servers to be patched in a change control record in a <a href="https://www.microsoft.com/download/en/details.aspx?id=27844">service desk</a> system (of course it doesn’t have to be the Microsoft service desk, that’s one of the strengths of the Orchestrator platform).</p>  <p>We’re going to build a runbook that looks like this.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/7723.Snapshot-Final_1E9CE7EC.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/7723.Snapshot_2D00_Final_5F00_1E9CE7EC.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="Snapshot Final" border="0" alt="Snapshot Final" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/3426.Snapshot-Final_thumb_6943AFB9.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/3426.Snapshot_2D00_Final_5F00_thumb_5F00_6943AFB9.png" width="644" height="415" /></a></p>  <p>First we drag out a standard Read Line activity from the palette on the right from the&#160; Text File Management category.&#160; Then we’ll grab a Get VM List activity from the VMware vSphere.&#160; We can then join the two activities together by hovering over the activity, clicking the arrow that appears and then drag it to the next activity.&#160; We’ll repeat the process dragging out a Compare Values activity, and then finally a Take VM Snapshot activity.&#160; We’ve now built the structure of our runbook, and we can go about customising the activities.</p>  <p>First we’ll specify the text file to read in.&#160; Double click the Read Line activity, and you can enter the properties.&#160; I’ve used an ASCII format text file that just contains a list of VM Names, and the 1-END tells the activity to read from the first line to the end of the file.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/1854.SnapshotReadLine_58E83800.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/1854.SnapshotReadLine_5F00_58E83800.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SnapshotReadLine" border="0" alt="SnapshotReadLine" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/5164.SnapshotReadLine_thumb_6575E51C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/5164.SnapshotReadLine_5F00_thumb_5F00_6575E51C.png" width="644" height="434" /></a></p>  <p>The Get-VMList activity doesn’t need much customisation, it just needs to be told which vSphere connection to use (defined in the Runbook Designer under Options…VMware vSphere).</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/7230.SnapshotGetVMList_42D1A6A1.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/7230.SnapshotGetVMList_5F00_42D1A6A1.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SnapshotGetVMList" border="0" alt="SnapshotGetVMList" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/5164.SnapshotGetVMList_thumb_257C4ED7.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/5164.SnapshotGetVMList_5F00_thumb_5F00_257C4ED7.png" width="644" height="434" /></a></p>  <p>The Compare Values activity allows us to compare two text or numeric values – we are going to use this to match our list of VM’s to snapshot from the text file against the list of VM’s returned from vSphere.&#160; We’re going to use one of the real key features of Orchestrator, which is the concept of published data.&#160; Each activity preceding this one returns data onto the databus, and any activity following can take advantage of the published data.&#160; We’re going to use the Line Text returned from the Read Line activity, and the VM Names returned from the Get VM List activity.&#160; In the Test area, we right click and choose Subscribe…Published Data.&#160; We select from the drop down at the top the Read Line activity, and choose the Line Text option</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/2437.SnapshotReadLinePD_45B6E587.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/2437.SnapshotReadLinePD_5F00_45B6E587.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SnapshotReadLinePD" border="0" alt="SnapshotReadLinePD" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/3513.SnapshotReadLinePD_thumb_4F9BD6F2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/3513.SnapshotReadLinePD_5F00_thumb_5F00_4F9BD6F2.png" width="517" height="484" /></a></p>  <p>We then right click in the pattern field and subscribe Published Data again, and choose the Get VM List activity.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/3581.SnapShotGetVMListPD_0DB4F1A4.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/3581.SnapShotGetVMListPD_5F00_0DB4F1A4.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SnapShotGetVMListPD" border="0" alt="SnapShotGetVMListPD" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/7612.SnapShotGetVMListPD_thumb_7374887F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/7612.SnapShotGetVMListPD_5F00_thumb_5F00_7374887F.png" width="517" height="484" /></a></p>  <p>We’ll end up with a Compare Values task that looks like this.&#160; (By default we do a text comparison, if you want to compare numbers, the general tab allows you to select that.)</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/0777.SnapshotCompareValue_5F7AF5E9.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/0777.SnapshotCompareValue_5F00_5F7AF5E9.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SnapshotCompareValue" border="0" alt="SnapshotCompareValue" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/0361.SnapshotCompareValue_thumb_7012F0D7.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/0361.SnapshotCompareValue_5F00_thumb_5F00_7012F0D7.png" width="644" height="434" /></a></p>      <p>We can then customise the Take VM Snapshot activity to customise the behaviour.&#160; Again, we’ll use some published data to identify which VM’s to snapshot.&#160; Up to now we’ve been working with VM names, but the snapshot activity actually requires a VM Path parameter – not to worry, the VM Path is returned along with the VM Name as part of the Get VM List published data.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/5141.SnapshotVMSnapshot_5421BBDF.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/5141.SnapshotVMSnapshot_5F00_5421BBDF.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SnapshotVMSnapshot" border="0" alt="SnapshotVMSnapshot" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/0361.SnapshotVMSnapshot_thumb_4BBDE688.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/0361.SnapshotVMSnapshot_5F00_thumb_5F00_4BBDE688.png" width="644" height="434" /></a></p>  <p>The final step in the puzzle is to customise our link so that the snapshot task only runs for VM’s that match the list of VM’s in the text file.&#160; To do this, we double click the link object between the Compare Values &amp; Take VM Shapshot activities.&#160; This brings up a dialog that allows us to set the conditions when we will execute the next step – by default it will proceed should the task succeed, but success in this case is simply that the task ran.&#160; We will change it by clicking the text that says “Compare Values” and select the Comparison result published data.&#160; We will then change the criteria to true by clicking the text that says value, and entering true in the popup.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/5141.SnapShotLinkProperties_42157852.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/5141.SnapShotLinkProperties_5F00_42157852.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="SnapShotLinkProperties" border="0" alt="SnapShotLinkProperties" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/7608.SnapShotLinkProperties_thumb_39B1A2FB.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/7608.SnapShotLinkProperties_5F00_thumb_5F00_39B1A2FB.png" width="644" height="434" /></a></p>  <p>The great thing about this runbook is that it will loop by itself, you don’t need to keep track of the loops (you might still want to maintain the <strong>state</strong> of the loop so you can restart the runbook should it strike an error) and without any strange syntax we’ve built an easy to understand &amp; debug runbook.&#160; The looping was handled automatically as part of the runbook, and we performed a relatively complex text comparison very quickly.</p>    <p>Compare this to the vCenter Orchestrator example, and you’ll see that using System Center Orchestrator you’ll be up and running with your runbooks much faster.</p>]]></content:encoded>
    </item>
    <item>
      <title>Disingenuous Cost Comparisons</title>
      <link>https://docs.microsoft.com/archive/blogs/stufox/disingenuous-cost-comparisons</link>
      <pubDate>Thu, 16 Jun 2011 17:28:56 GMT</pubDate>
      <dc:creator><![CDATA[Stu Fox [MSNZ]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/stufox/2011/06/16/disingenuous-cost-comparisons/</guid>
      <description><![CDATA[I was inspired by Eric Gray’s recent post “Disingenuous cost comparisons” which purports to show all...]]></description>
      <content:encoded><![CDATA[<p>I was inspired by Eric Gray’s recent post “<a href="https://https://www.vcritical.com/2011/06/disingenuous-cost-comparisons">Disingenuous cost comparisons</a>” which purports to show all the ways that VMware costs less than Microsoft.&#160; I thought I’d take Eric’s advice and see for myself by trying the VMware cost comparison calculator and see exactly how VMware are trying to reduce the high cost of their hypervisor.&#160; </p>  <p>I entered the data below as my starting point:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/3755.vmwarelicensingcalc_739BF1CD.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/3755.vmwarelicensingcalc_5F00_739BF1CD.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="vmwarelicensingcalc" border="0" alt="vmwarelicensingcalc" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/0844.vmwarelicensingcalc_thumb_3C91EDC7.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/0844.vmwarelicensingcalc_5F00_thumb_5F00_3C91EDC7.png" width="580" height="484" /></a></p>  <p>This gives the rather interesting claim that vSphere supports 50% more VM’s that Hyper-V:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/7701.appsperhost_0085AC12.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/7701.appsperhost_5F00_0085AC12.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="appsperhost" border="0" alt="appsperhost" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/4667.appsperhost_thumb_111DA700.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/4667.appsperhost_5F00_thumb_5F00_111DA700.png" width="644" height="170" /></a></p>  <p>That’s a pretty interesting claim, and in the spirit of transparency VMware are good enough to give the reasons they make this assumption.&#160; It’s interesting to see what those claims are, and how they stack up against reality.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/3681.VMwareMemoryMgmt_161FE4AF.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/3681.VMwareMemoryMgmt_5F00_161FE4AF.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VMwareMemoryMgmt" border="0" alt="VMwareMemoryMgmt" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/3583.VMwareMemoryMgmt_thumb_0292850E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/3583.VMwareMemoryMgmt_5F00_thumb_5F00_0292850E.png" width="644" height="90" /></a></p>  <p>From what I know of VMware’s memory overcommitment methods, there are 4 techniques they use:</p>  <ol>   <li>Transparent Page Sharing (TPS)</li>    <li>Memory Ballooning</li>    <li>Memory Compression</li>    <li>Host Paging/Swapping</li> </ol>  <p>The bottom two methods are only used once the host is under memory pressure, and isn’t a great place for you to be really.&#160; If you’re at the point that the host is paging memory out to disk (even SSD) it’s still orders of magnitude slower than real memory, and will have a performance impact.&#160; VMware point this out in <a href="https://www.vmware.com/pdf/Perf_Best_Practices_vSphere4.1.pdf">their documentation</a>:</p>  <blockquote>   <p>“While ESX uses page sharing and ballooning to allow significant memory overcommitment, usually with     <br />little or no impact on performance, you should avoid overcommitting memory to the point that it requires      <br />host-level swapping.” – Page 23</p> </blockquote>  <p>TPS is the concept of finding shared pages of memory between multiple VM’s and collapsing that down to a single copy stored in physical memory, and ballooning allows the host to request the guest to release memory that it can, so it can reduce the overall memory footprint of a guest.&#160; So of the “multiple methods” of oversubscribing memory, two are really used in day to day production.&#160; What VMware don’t talk about much is that most of the benefit of TPS comes in the sharing of blank memory pages (i.e. memory that is allocated to a VM, but isn’t being used).&#160; There is an incremental benefit of shared OS memory pages as well, but the majority of the benefit is from those blank pages.&#160; TPS is also affected by large memory pages &amp; ASLR technologies in modern versions of the Windows OS, and isn’t an immediate technology – TPS takes time to identify the shared pages, and runs on a periodic basis.</p>  <p>Hyper-V has Dynamic Memory functionality that allows machines to be allocated the memory that they need, and ballooning to reclaim memory that isn’t in use.&#160; In practice, this has similar benefits to TPS – blank pages are simply not allocated to VM’s until they need them so they can be used elsewhere as a scheduled resource.&#160; And it’s faster than TPS, as it is immediately responsive to VM demand.&#160; So on a direct comparison, TPS may save slightly more memory due to shared OS pages, but ultimately TPS &amp; Dynamic Memory solve the blank memory pages issue in different ways.&#160; </p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/3681.VMwareDirectDriverModel_403F6CCA.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/3681.VMwareDirectDriverModel_5F00_403F6CCA.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VMwareDirectDriverModel" border="0" alt="VMwareDirectDriverModel" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/3034.VMwareDirectDriverModel_thumb_299D1E83.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/3034.VMwareDirectDriverModel_5F00_thumb_5F00_299D1E83.png" width="644" height="179" /></a></p>  <p>I think in this case it’s best to let the <a href="https://ir.qlogic.com/phoenix.zhtml?c=85695&amp;p=irol-newsArticle&amp;ID=1169854&amp;highlight=">facts</a> speak for <a href="https://gestaltit.com/all/tech/storage/stephen/microsoft-and-intel-push-one-million-iscsi-iops/">themselves</a>.&#160; It’s pretty clear from the sorts of IO numbers in those articles that the indirect driver model (parent partition architecture) doesn’t impose a bottleneck on Hyper-V IO performance.&#160; And it certainly appears that Hyper-V support is a <a href="https://msdn.microsoft.com/en-us/windows/hardware/gg463054.aspx">requirement</a> of WHQL.&#160; And it’s not like VMware can claim to have <a href="https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&amp;cmd=displayKC&amp;externalId=1028091">no</a> <a href="https://h20000.www2.hp.com/bizsupport/TechSupport/Document.jsp?lang=en&amp;cc=us&amp;objectID=c02476622&amp;jumpid=reg_R1002_USEN">driver</a> <a href="https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&amp;cmd=displayKC&amp;externalId=1029368">problems</a>.&#160; It also always makes me laugh when VMware claim that their drivers are optimised for virtualisation.&#160; What does that really mean?&#160; From what I can see, optimised for virtualisation means that you’ve got drivers that can deliver massive amounts of IO to your hardware – which is exactly what Windows Server 2008 R2 has.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/8308.VMwareGangScheduler_2D5AC353.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/8308.VMwareGangScheduler_5F00_2D5AC353.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VMwareGangScheduler" border="0" alt="VMwareGangScheduler" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/7725.VMwareGangScheduler_thumb_2BA9F77F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/7725.VMwareGangScheduler_5F00_thumb_5F00_2BA9F77F.png" width="644" height="146" /></a></p>  <p>Wouldn’t it be embarrassing if a company had invested so much time and money in building a highly optimised gang scheduler, and then someone came along with a general purpose OS scheduler and the <a href="https://www.infoworld.com/d/virtualization/virtualization-shoot-out-citrix-microsoft-red-hat-and-vmware-666?page=0,2">independent</a> test <a href="https://www.projectvrc.nl/index.php?option=com_docman&amp;task=doc_download&amp;gid=11&amp;Itemid=11">results</a> showed that the general purpose OS scheduler performed as well as, or in some cases better than that gang scheduler (or even, that the vSphere results were so bad that they released a hotfix specifically for that issue)? The simple fact is that regardless of what VMware claim, Hyper-V does not use a general purpose OS scheduler – it just shows that they fundamentally don’t understand the Hyper-V architecture. The only place a general purpose OS scheduler is involved is in the parent partition &amp; the running guests. The Hyper-V scheduler is not the parent partition scheduler – it is it’s own optimised for virtualisation scheduler.&#160; So in terms of performance, Hyper-V more than holds it’s own against vSphere and it’s clear that VMware are just throwing this out there and hoping their customers don’t look into it.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/5672.VMwareDRS_7AC74013.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/5672.VMwareDRS_5F00_7AC74013.png"><img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="VMwareDRS" border="0" alt="VMwareDRS" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/8233.VMwareDRS_thumb_2050BD75.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/8233.VMwareDRS_5F00_thumb_5F00_2050BD75.png" width="644" height="90" /></a></p>  <p>DRS is certainly a useful technology for adding flexibility to virtual environments, and Microsoft ships a similar technology with System Center (called PRO) that does a similar function.&#160; So if VMware’s cost calculator adds in extra virtual machines to allow for running System Center, surely they should also allow for the fact that this will give this extra functionality?&#160; And without wanting to talk about the future, Virtual Machine Manager 2012 offers Dynamic Optimisation as an alternative to PRO if you don’t have System Center Operations Manager – give it a <a href="https://connect.microsoft.com/site799/VMM2012Beta">try</a>.</p>  <p>&#160;</p>  <p>So looking through the claims for a 50% increase in VM’s per host we get:</p>  <ol>   <li>Memory overcommit – very slight advantage to VMware because of shared OS pages</li>    <li>Direct Driver Model – no advantage</li>    <li>High performance gang scheduler – no advantage</li>    <li>DRS – similar functionality in System Center, and really contributes to flexibility, not a higher consolidation ratio.</li> </ol>  <p>Based on those claims, I’m struggling to figure out how VMware can make these claims with a straight face.&#160; And overall, my rating of VMware’s licensing calculator – nice try, but you’re smart guys and I’m sure you can do better.</p>]]></content:encoded>
    </item>
    <item>
      <title>Controlling HP ILO with Opalis</title>
      <link>https://docs.microsoft.com/archive/blogs/stufox/controlling-hp-ilo-with-opalis</link>
      <pubDate>Wed, 04 May 2011 21:58:00 GMT</pubDate>
      <dc:creator><![CDATA[Stu Fox [MSNZ]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/stufox/2011/05/04/controlling-hp-ilo-with-opalis/</guid>
      <description><![CDATA[Back to my long neglected blog&hellip;
Inspired by Adam&rsquo;s post about building his own Opalis...]]></description>
      <content:encoded><![CDATA[<p>Back to my long neglected blog&hellip;</p>
<p>Inspired by Adam&rsquo;s <a href="https://blogs.technet.com/b/systemcenter/archive/2011/04/06/migrating-a-powershell-script-to-an-opalis-activity-or-how-the-marketing-guy-built-his-first-opalis-integration-pack.aspx">post</a> about building his own Opalis integration pack I thought I&rsquo;d give it a go myself.&nbsp; I&rsquo;ve seen the sessions at MMS, but never actually sat down to do this.&nbsp; I thought I&rsquo;d start with a scenario that I was looking at for my demo environment, which is all based on HP equipment, and I was trying to figure out a way to ensure that I can bring the demo environment up in an orderly fashion, and in a way that allows me to control when hosts start.&nbsp; The first step in all of this is controlling the power state of the HP servers using ILO.</p>
<p>HP publish <a href="https://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareDescription.jsp?lang=en&amp;cc=us&amp;swItem=MTX-0fcb2f1331034568b60b4061f1&amp;jumpid=reg_R1002_USEN">tools</a> to work with the ILO controller from the command line, and also a set of <a href="https://h20000.www2.hp.com/bizsupport/TechSupport/SoftwareDescription.jsp?lang=en&amp;cc=us&amp;prodTypeId=18964&amp;prodSeriesId=1146658&amp;swItem=MTX-84d9a19b43b84516ac2d26d01f&amp;prodNameId=1135772&amp;swEnvOID=1005&amp;swLang=8&amp;taskId=135&amp;mode=3">sample scripts</a> that allow you to control the machine using the command line tools.</p>
<p>To get things going, I downloaded the HP tools and installed them in the default location (C:\program files\HP Lights-Out Configuration Utility).&nbsp; I created a C:\scripts directory and extracted the sample scripts into this directory.&nbsp; I took the &ldquo;Set_host_Power.xml&rdquo; file and made two copies &ndash; one called &ldquo;poweron.xml&rdquo; &amp; one called &ldquo;poweroff.xml&rdquo;.&nbsp; The script shipped from HP turns the power off, so I left the poweroff.xml file alone, and edited the "poweron.xml file so that the line that read: <br />&lt;SET_HOST_POWER HOST_POWER="No" /&gt; <br />was changed to: <br />&lt;SET_HOST_POWER HOST_POWER="Yes" /&gt; </p>
<p>I also copied &ldquo;get_host_power.xml&rdquo; and named the new copy &ldquo;getpower.xml&rdquo; &ndash; not essential though.</p>
<p>Login username &amp; password are defined in the file, but we will override them at the command line we specify in our Opalis objects so we can leave them as default.</p>
<p>You can test the command line control by issuing the following commands at the command line:</p>
<p>cpqlocfg &ndash;s &lt;ILO IP Address&gt; &ndash;u Administrator &ndash;p &lt;password&gt; &ndash;f &lt;input file from above&gt;</p>
<p>What I&rsquo;ve done with my integration pack is simply wrap the command line &amp; input files together into a single pack that I can then use to control my host power, and created some published data.</p>
<p>Adam went through how to use QIK in it&rsquo;s basic form, so I&rsquo;m not going to cover that here.&nbsp; What I&rsquo;ll cover is the basic commands I added, and the published data I added, along with a couple of limitations I found.</p>
<p>I&rsquo;ll go through the most detailed one which is the GetPower command, as this returns public data.&nbsp; I added a new command in QIK which runs the cpqlocfg tool.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/0552.01.-GetPower_42072FF0.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/0552.01._2D00_GetPower_5F00_42072FF0.png"><img height="371" width="479" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/3288.01.-GetPower_thumb_59BE6756.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/3288.01._2D00_GetPower_5F00_thumb_5F00_59BE6756.png" alt="01. GetPower" border="0" title="01. GetPower" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /></a></p>
<p>I then added my arguments as below.&nbsp; It&rsquo;s pretty straightforward &ndash; we have three parameters that we pass into the tool (ILO IP, Username, Password), we ensure that we define password as encrypted text so the password isn&rsquo;t exposed in the GUI.&nbsp; I&rsquo;ve also hard-coded the path to the getpower.xml input file &ndash; one of the issues I found in QIK is that if you want to pass filenames with spaces in them or the path, you need to put double quotes around them but this makes the QIK compilation process fail. I&rsquo;ve worked around this by using an 8.3 path to the file.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/8507.02.-GetPower_313F8542.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/8507.02._2D00_GetPower_5F00_313F8542.png"><img height="371" width="479" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/6443.02.-GetPower_thumb_6FC4D2E8.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/6443.02._2D00_GetPower_5F00_thumb_5F00_6FC4D2E8.png" alt="02. GetPower" border="0" title="02. GetPower" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" /></a></p>
<p>What I also want this to do is to return to me the power state in a form I can use, and that&rsquo;s where the published data tab comes in.&nbsp; What I&rsquo;m doing is using the &ldquo;Extract Group&rdquo; option when defining published data.&nbsp; This actually pulls out the matching text from the output, and makes it available as published data.&nbsp; This uses standard .NET regular expressions.&nbsp; My output text looks like HOST_POWER=&rdquo;ON&rdquo; or HOST_POWER=&rdquo;OFF&rdquo;.&nbsp; The regular expression I have below matches the = sign, followed by any character, followed by an O and then one or more other characters.&nbsp; This is specific enough to match my text (I could also use =.(ON|OFF)) only, and not anything else.&nbsp; The brackets around the text tells the regular expression to extract the actual data that matches, so my PowerStatus will pass data back that is either ON or OFF.&nbsp; Ideally I would have used =&rdquo;(O\w+), but again with QIK using double quotes causes some compilation issues that I needed to work around.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/3716.04.-GetPower_005CCDD7.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/3716.04._2D00_GetPower_5F00_005CCDD7.png"><img height="267" width="388" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/65/35/metablogapi/8422.04.-GetPower_thumb_4D20946D.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-65-35-metablogapi/8422.04._2D00_GetPower_5F00_thumb_5F00_4D20946D.png" alt="04. GetPower" border="0" title="04. GetPower" style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" /></a></p>
<p>So that&rsquo;s it, I added a couple of other tasks &ndash; one to power the server on, and the other to power the server off &ndash; using the same command line &amp; just pointing at the appropriate input files.&nbsp; I didn&rsquo;t add any published data to these tasks at this point.</p>
<p>I also haven&rsquo;t added any additional error handling in the tasks to extract error conditions, if I require this I&rsquo;ll extract further information from the XML output.</p>
<p>The last step was just to compile the dll into an Integration Pack as per the instructions in Adam&rsquo;s blog.&nbsp; I included the contents of C:\scripts to simplify matters.&nbsp; I won&rsquo;t attach the OIP file to this blog, as I don&rsquo;t want to distribute HP&rsquo;s files &ndash; you can download them yourselves.&nbsp; I will attach the dll that I generated with QIK though so you can download and see what I&rsquo;ve done.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/01/6535/00/00/03/42/65/11/HPILO.zip" original-url="https://blogs.technet.com/cfs-filesystemfile.ashx/__key/telligent-evolution-components-attachments/01-6535-00-00-03-42-65-11/HPILO.zip">HPILO.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Hotfixes for DPM Protected Hyper-V Guests</title>
      <link>https://docs.microsoft.com/archive/blogs/stufox/hotfixes-for-dpm-protected-hyper-v-guests</link>
      <pubDate>Mon, 10 May 2010 21:08:00 GMT</pubDate>
      <dc:creator><![CDATA[Stu Fox [MSNZ]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/stufox/2010/05/10/hotfixes-for-dpm-protected-hyper-v-guests/</guid>
      <description><![CDATA[One of the things that isn’t made 100% clear in the DPM documentation is what you need to do for...]]></description>
      <content:encoded><![CDATA[<P>One of the things that isn’t made 100% clear in the DPM documentation is what you need to do for Hyper-V VM’s that you are protecting at the Hyper-V host layer.&nbsp; The “<A href="https://technet.microsoft.com/en-nz/library/ff399140(en-us).aspx" mce_href="https://technet.microsoft.com/en-nz/library/ff399140(en-us).aspx">Protected Computer Software Requirements</A>” document on Technet tells you that you need to apply certain hotfixes to the Hyper-V host, and you could be forgiven for thinking that was all you needed to do.</P>
<P>However, if you remember that when DPM uses the Hyper-V VSS Writer to take a snapshot of a running VM, it also leverages the in-guest VSS Writers to ensure that the guest itself is consistent inside, so we are able to have application consistent backups.</P>
<P>What’s the implication of this?&nbsp; If there is a hotfix required in the physical world (for instance a file server running Windows Server 2003 requires hotfixes <A href="https://support.microsoft.com/?kbid=940349" mce_href="https://support.microsoft.com/?kbid=940349">940349</A> &amp; <A href="https://support.microsoft.com/kb/975759" mce_href="https://support.microsoft.com/kb/975759">975759</A>) then you should also have that hotfix applied to your protected VM’s, even though you aren’t running a DPM agent in that VM.&nbsp; Essentially treat any machine you are protecting the same according to the “Protected Computer Software Requirements” document, regardless of whether it is physical or virtual, and protected at the host or guest level.</P>]]></content:encoded>
    </item>
    <item>
      <title>server cluster patching with opalis – part 2</title>
      <link>https://docs.microsoft.com/archive/blogs/stufox/server-cluster-patching-with-opalis-part-2</link>
      <pubDate>Mon, 03 May 2010 17:40:00 GMT</pubDate>
      <dc:creator><![CDATA[Stu Fox [MSNZ]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/stufox/2010/05/03/server-cluster-patching-with-opalis-part-2/</guid>
      <description><![CDATA[In my last post on this subject I set up the cluster patching framework in Opalis.&nbsp; In this...]]></description>
      <content:encoded><![CDATA[<P>In my <A href="https://blogs.technet.com/stufox/archive/2010/04/19/server-cluster-patching-with-opalis-part-1.aspx" mce_href="https://blogs.technet.com/stufox/archive/2010/04/19/server-cluster-patching-with-opalis-part-1.aspx">last post</A> on this subject I set up the cluster patching framework in Opalis.&nbsp; In this post I’m going to modify the policy initiation phase to use PowerShell &amp; some text manipulation to make it more dynamic.</P>
<P>I’d set this up originally to simply read the cluster nodes from a text file.&nbsp; There are more options available to us though – we could use PowerShell to query the cluster for a list of cluster nodes, or in this case I’m going to use PowerShell to query Virtual Machine Manager to get the list of Hyper-V cluster nodes.</P>
<P>I’ve got a simple PowerShell script which is as follows:</P>
<P>Add-PSSnapin Microsoft.SystemCenter.VirtualMachineManager <BR>$cluster=get-vmhostcluster -name "democluster.contoso.com" -vmmserver "vmm.contoso.com" <BR>$vmhosts=get-vmhost -vmhostcluster $cluster | select -property Name</P>
<P>Running this script will return me a variable $vmhosts which contains text as follows:</P>
<P>@{Name=clusternode1.contoso.com}</P>
<P>@{Name=clusternode2.contoso.com}</P>
<P>That’s not quite in the format that I want and I could do some further processing in PowerShell to get it right, but I’m lazy, and also want to show off some of the text manipulation features in Opalis.</P>
<P>First thing though, I want to execute this in Opalis.&nbsp; Because I’m using Virtual Machine Manager objects I’ll need to have the VMM 2008 R2 console installed on my Opalis machine.</P>
<P>Once I’ve got it installed I can then modify my policy.&nbsp; I’m going to add a “Run .NET script” object.&nbsp; “Run .NET Script” is pretty powerful and lets us run scripts in C#, JScript, VB.NET or PowerShell.&nbsp; I just drag and drop my object into my policy, and then double click it to open the properties.</P>
<P>My policy looks like this:</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/overall%20policy.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/overall%20policy.png" mce_href="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/overall%20policy.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="overall policy" border=0 alt="overall policy" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/overall%20policy_thumb.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/overall%20policy_thumb.png" width=489 height=251 mce_src="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/overall%20policy_thumb.png"></A></P>
<P>When I open the properties, I can simply paste my script in there, and change the language to PowerShell:</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/net%20script.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/net%20script.png" mce_href="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/net%20script.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="net script" border=0 alt="net script" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/net%20script_thumb.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/net%20script_thumb.png" width=489 height=330 mce_src="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/net%20script_thumb.png"></A></P>
<P>Now I need some way to get the output from the script.&nbsp; The great thing about Opalis is that it makes this really easy.&nbsp; I go to the “Published Data” area and tell the policy which variable I want to return as published data.&nbsp; In this case my vmhosts variable is the data I want, so I simply add that in.&nbsp; Now when I need to retrieve the published data from the data bus, vmhosts will appear as available.</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/published%20data.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/published%20data.png" mce_href="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/published%20data.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="published data" border=0 alt="published data" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/published%20data_thumb.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/published%20data_thumb.png" width=493 height=332 mce_src="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/published%20data_thumb.png"></A> </P>
<P>As I said before the data that comes out of that script isn’t exactly in the format I want – I only want hostnames, not all the other text so I need some way of stripping that out.&nbsp; Fortunately this is another area that Opalis makes really easy.</P>
<P>In my “Trigger Policy” task I previously set it up to pass the Computer Name parameter through to the next policy.&nbsp; I’m going to continue to do this, but manipulate the text that I pass through.</P>
<P>There is a screen shot below that shows the start of this, but I will expand further.&nbsp; Opalis will treat information in square brackets as data manipulation functions, so I start with that.&nbsp; In this case there is a consistent set of data coming out of the script – there is effectively a header (“@{Name=”) , the data (“clusternodex.contoso.com”) and a footer (“}”.&nbsp; I’m going to use a combination of three functions – the Mid function, the Sum function and the Len function.&nbsp; Mid allows me to retrieve text from the middle of a string, and Len will allow me to get the length of a string.&nbsp; Sum just allows me to add two numbers together.</P>
<P>Because my data is in a consistent format the information I want always starts at the 8th character, and the data I need to retrieve is from that point through to the second last character.&nbsp; The length of text I need to grab is the overall length of the string less 8 characters (the 7 in the header plus the 1 in the footer).&nbsp; For this I use the Sum function to add –8 to the length of the string.&nbsp; I could equally use the Diff function to subtract 8.</P>
<P>I then build my function as:</P>
<P>[Mid('&lt;vmhosts published data&gt;’,8, Sum(Len(‘&lt;vmhosts published data&gt;’),-8))]</P>
<P>I insert my published data by right clicking where I want to insert it and choosing “Subscribe…published data”.&nbsp; I choose the “Run .NET Script” task, and the vmhosts data.</P>
<P><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/Trigger%20Policy.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/Trigger%20Policy.png" mce_href="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/Trigger%20Policy.png"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title="Trigger Policy" border=0 alt="Trigger Policy" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/Trigger%20Policy_thumb.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/Trigger%20Policy_thumb.png" width=495 height=334 mce_src="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/serverclusterpatchingwithopalispart2_B245/Trigger%20Policy_thumb.png"></A> </P>
<P>So now when my trigger policy task runs it will pass the ComputerName parameter as clusternodex.contoso.com, having stripped off the header and footer.</P>
<P>If you wanted to simply use the Windows 2008 R2 Failover Cluster PowerShell cmdlet’s to get the cluster nodes you could do this:</P>
<P>Import-Module -Name FailoverClusters <BR>Get-ClusterNode -cluster democluster | Format-Table -Property Name –HideTableHeaders</P>
<P>This actually gives nicer output than the VMM Cmdlets but the VMM ones were slightly easier to work with in my case (I can execute them locally on the Opalis server).</P>
<P>Next time we’ll look at some of the pre-patching checks.</P>
<P>Edit: Should have made clear, the Opalis service account needs to have permission in VMM to execute this script.&nbsp; As there is no concept of an "Operator" in VMM the Opalis account will need to be a delegated administrator.&nbsp; To run the standalone Failover Cluster scripts the Opalis account simply needs to have Read-only permissions on the cluster.</P>]]></content:encoded>
    </item>
    <item>
      <title>Server Cluster patching with Opalis – Part 1</title>
      <link>https://docs.microsoft.com/archive/blogs/stufox/server-cluster-patching-with-opalis-part-1</link>
      <pubDate>Mon, 19 Apr 2010 03:29:46 GMT</pubDate>
      <dc:creator><![CDATA[Stu Fox [MSNZ]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/stufox/2010/04/19/server-cluster-patching-with-opalis-part-1/</guid>
      <description><![CDATA[I’m using this post to document my experiments with Opalis.&#160; One of the things I’ve been...]]></description>
      <content:encoded><![CDATA[<p>I’m using this post to document my experiments with Opalis.&#160; One of the things I’ve been thinking about is using Opalis to orchestrate complicated patching scenarios that have traditionally been difficult to do with tools like System Center Configuration Manager alone (or at least would have involved lots of scripting).&#160; For example patching a cluster would normally involve some manual tasks like failing over the active node before patching, then patching the offline nodes and cycling through the cluster.</p>  <p>In this post I’m going to document the initial setup of the policy (or at least, what I think it’s going to look like at this point).</p>  <p>The first thing that I’m going to set up is the different sets of policies – I’ve divided them into four parts:</p>  <p>1. Policy Initiation (more on this later) and looping</p>  <p>2. Node pre-activity (for instance – in a Hyper-V node putting the node into maintenance mode)</p>  <p>3. The actual patching</p>  <p>4. Node post-activity (confirming the node has returned to service successfully)</p>  <p>I’ll create four empty policies – you can see the policy names in the screenshot below:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch01.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch01.png"></a></p>  <p></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch01.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch01.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="OpalisClusterPatch01" border="0" alt="OpalisClusterPatch01" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch01_thumb.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch01_thumb.png" width="644" height="255" /></a></p>  <p>In that screenshot you can also see the first steps I’ve set up.&#160; I’m using a “Read Line” task to read a text file containing my cluster node names, although in the future I’ll modify this to execute powershell against the cluster to get the node names.&#160; This task then passes into a Trigger Policy task which is used to start the next step in the policy chain. </p>  <p>There is one key configuration to change on the “Trigger Policy” step which I’ve highlighted below.&#160; The “Wait for completion” option will allow the following steps to be executed sequentially for each node in the cluster, and the next node will only start once the previous node has completely finished.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch05.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch05.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="OpalisClusterPatch05" border="0" alt="OpalisClusterPatch05" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch05_thumb.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch05_thumb.png" width="644" height="433" /></a> </p>  <p>The other thing I’m going to do is setup a custom start action in policies 2-4 and define an input parameter for each of “Computer Name” – there may be other parameters to pass in later, but at this point I’ll keep it simple (and I expect I’ll discover the other things I need as I develop this further).</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch06.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch06.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="OpalisClusterPatch06" border="0" alt="OpalisClusterPatch06" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_technet/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch06_thumb.png" original-url="https://blogs.technet.com/blogfiles/stufox/WindowsLiveWriter/ServerClusterpatchingwithOpalisPart1_13C43/OpalisClusterPatch06_thumb.png" width="644" height="431" /></a> </p>  <p>Then in policies 1-3 I set up a “Trigger Policy” action as you can see in the first screenshot – this calls the next policy in line and passes the Computer Name as the parameter.&#160; You can see this in the second screenshot – the parameter is defined as Computer Name, and in this instance I’ve used the “Subscribe to published data” option to subscribe to information read in from the text file.&#160; In subsequent policies I’ll pass that parameter between policies.</p>  <p>That’s the start of my cluster patching policy, stay tuned as I develop this further.</p>]]></content:encoded>
    </item>
    <item>
      <title>Exercising live migration</title>
      <link>https://docs.microsoft.com/archive/blogs/stufox/exercising-live-migration</link>
      <pubDate>Sat, 10 Oct 2009 01:30:40 GMT</pubDate>
      <dc:creator><![CDATA[Stu Fox [MSNZ]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/stufox/2009/10/10/exercising-live-migration/</guid>
      <description><![CDATA[One of the scenarios that we had running at TechEd NZ was a continuous live migration between two...]]></description>
      <content:encoded><![CDATA[<p>One of the scenarios that we had running at TechEd NZ was a continuous live migration between two hosts which I had set up using Virtual Machine Manager &amp; the Powershell components.&#160; Someone asked for it internally, and I thought I’d post it here in case anyone else would find it useful.</p>  <p>This is useful if you want to do any long running tests of live migration, and record the number of migrations you have done.</p>  <p>To set up, create C:\temp\counter.txt and edit it so that it has a single line which has the content 0.&#160; It uses this text file to record the number of migrations (it also stores in memory but uses the file in case you have to restart the script for any reason).&#160; Edit the script to replace the following fields:</p>  <p>vmmhost.yourdomain.com –&gt; FQDN of your VMM Server</p>  <p>HyperVHost1.yourdomain.com –&gt; FQDN of Hyper-V host 1</p>  <p>HyperVHost2.yourdomain.com –&gt; FQDN of Hyper-V host 2</p>  <p>VMName –&gt; Name of the VM you are going to migrate.</p>  <p>There is also a random delay introduced at the end of the script so the migration is not predictable.</p>  <p>get-vmmserver -computername &quot;vmmhost.yourdomain.com&quot;   <br />$vm = get-vm | where { $_.Name -eq &quot;VMName&quot;}    <br />$host1 = get-vmhost | where {$_.Name -eq &quot;HyperVHost1.yourdomain.com&quot;}    <br />$host2 = get-vmhost | where {$_.Name -eq &quot;HyperVHost2.yourdomain.com&quot;}</p>  <p>Do    <br />{</p>  <p>if ($vm.VMhost -eq &quot;HyperVHost1.yourdomain.com&quot;)    <br />{$desthost=$host2}    <br />else    <br />{$desthost=$host1}</p>  <p>move-vm -vm $vm -vmhost $desthost -jobvariable movejob   <br />if ($movejob.Errorinfo.DetailedCode -eq 0)    <br />{    <br />$rawmigrations = get-content -Path C:\temp\counter.txt -TotalCount 1    <br />$migrations = [int32] $rawmigrations    <br />$migrations++    <br />$migrations    <br />set-content -Path C:\temp\counter.txt -value $migrations    <br />}    <br />$wait=get-random -minimum 60 -maximum 240    <br />start-sleep -seconds $wait</p>  <p>}   <br />while ($true)</p>  <p>&#160;</p>  <p>To enhance this you could also randomise the guest that is being migrated, and if you have more than a two node cluster you could randomise the destination host.&#160; If I get bored over the next few weeks I’ll update it so that it does these things.</p>]]></content:encoded>
    </item>
    <item>
      <title>Application Virtualisation – Agent or Agentless Part II?</title>
      <link>https://docs.microsoft.com/archive/blogs/stufox/application-virtualisation-agent-or-agentless-part-ii</link>
      <pubDate>Thu, 11 Jun 2009 23:09:18 GMT</pubDate>
      <dc:creator><![CDATA[Stu Fox [MSNZ]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/stufox/2009/06/11/application-virtualisation-agent-or-agentless-part-ii/</guid>
      <description><![CDATA[In my previous post I talked about some of the advantages of using agent based technology to deliver...]]></description>
      <content:encoded><![CDATA[<p>In my <a href="https://blogs.technet.com/stufox/archive/2009/06/05/application-virtualisation-agent-or-agentless.aspx">previous post</a> I talked about some of the advantages of using agent based technology to deliver virtual applications.&#160; There were a couple of things that I forgot to include when I wrote that post.&#160; So continuing on from that list, here are the extras:</p>  <p>5. Inventory</p>  <p>If I’ve got my application content separated from my agent, I can now query my agent to find out what applications are present on my machine.&#160; That means using tools like System Center Configuration Manager I can find out which virtual applications are where (just because they’re virtual doesn’t mean you don’t have to pay for them).&#160; </p>  <p>6. Usage information</p>  <p>My agent can now collate all the usage information about my virtual applications and report that into a single location, using a single mechanism that is independent of the virtual application itself.&#160; Now I can get accurate information about how my users are using the virtual applications, and use that to optimise my licensing.</p>  <p>&#160;</p>  <p>Those 6 points demonstrate that to truly be effective with virtualisation, the management component is essential.&#160; And the only way to effectively provide an application virtualisation solution that is enterprise ready is to use an agent based technology.&#160; Anyone selling you an agentless application virtualisation solution is not selling you any cost savings or flexibility, they are selling you complexity and overhead.</p>]]></content:encoded>
    </item>
    <item>
      <title>Application Virtualisation – Agent or Agentless?</title>
      <link>https://docs.microsoft.com/archive/blogs/stufox/application-virtualisation-agent-or-agentless</link>
      <pubDate>Thu, 04 Jun 2009 22:15:18 GMT</pubDate>
      <dc:creator><![CDATA[Stu Fox [MSNZ]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/stufox/2009/06/04/application-virtualisation-agent-or-agentless/</guid>
      <description><![CDATA[One of the things I sometimes hear from my customers when we’re talking about Application...]]></description>
      <content:encoded><![CDATA[<p>One of the things I sometimes hear from my customers when we’re talking about Application Virtualisation is “why do you need an agent for virtualising applications, especially when some of your competitors don’t?”.&#160; My answer to them is “what do you think an agentless solution does except introduce management overhead?”.&#160; Sure it looks attractive in the short term since all you have to do is distribute an executable to your clients and they can run virtual applications.&#160; </p>  <p>However I can think of several reasons why an agent based technology is superior.</p>  <p>1. Management of the virtualisation agent</p>  <p>Let’s say that I discover a security vulnerability in my virtualisation agent, or I want to add new capability to my application virtualisation client (for instance, in the App-V 4.5 release, we added the capability to stream over HTTP).&#160; If I’m using an agentless technology and want to update my client, I have to go off and rebuild every package that I’ve deployed, and then redistribute that package to each of my clients.&#160; With agent based technology I just deploy an update to my agent software and can leverage that new technology without rebuilding my application packages.</p>  <p>In addition, if I want to know what version of my virtualisation agent that is in the packages it out there, I can’t really do that.</p>  <p>2. Duplication of resources</p>  <p>If I have an agent based technology, when I launch a virtual app I’m sharing all the same agent resources as any other virtual apps (CPU/Memory/Disk etc).&#160; When I’m running agentless, every virtual app that I launch starts it’s own instance of the virtualisation agent, each adding it’s own overhead to the process.</p>  <p>3. Speed</p>  <p>If I have to extract the agent and execute it every time I launch the application, that adds overhead to my application launch time.</p>  <p>4. Scriptability</p>  <p>Because we’ve separated the virtual application content from the virtual application client, now we can do some more interesting things with the client.&#160; Things like prepopulating the cache with certain applications, or removing applications from the machine at the command line.</p>  <p>&#160;</p>  <p>Overall having the virtual application content separated from the virtual application client allows us to have a more manageable implementation, and this will in turn lead to significantly reduced cost of ongoing maintenance over an agentless environment.&#160; If you can’t manage your virtual apps, you’ve missed half the benefit of having them virtualised in the first place.</p>]]></content:encoded>
    </item>
    <item>
      <title>Save money managing your virtual hosts</title>
      <link>https://docs.microsoft.com/archive/blogs/stufox/save-money-managing-your-virtual-hosts</link>
      <pubDate>Wed, 27 May 2009 00:42:19 GMT</pubDate>
      <dc:creator><![CDATA[Stu Fox [MSNZ]]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/stufox/2009/05/27/save-money-managing-your-virtual-hosts/</guid>
      <description><![CDATA[As I said in my post below, I read a lot of blogs.&#160; I’ve been meaning to write a response to a...]]></description>
      <content:encoded><![CDATA[<p>As I said in my post below, I read a lot of blogs.&#160; I’ve been meaning to write a response to a post I read on Vcritical.com for a while, and haven’t got around to it.&#160; Vcritical is written by Eric Gray who is a VMware employee, so clearly he has a biased view, much as I do given my employer :).&#160; However it’s always fun to debate the issues, and we shouldn’t shy away from respectful disagreement.</p>  <p>Eric wrote a post a while back <a href="https://www.vcritical.com/2009/04/save-14970-on-vmware-esx-management/">“Save $14970 on VMware ESX Management”</a> where he said to save money managing your VMware hosts, don’t use Virtual Machine Manager, and then pointed out that the cost of the Server Management Suite Enterprise license is $1,497 per physical host.</p>  <p>I think Eric is understating the value that the SMSE license brings.&#160; SMSE doesn’t just give you the Operations Manager management license for the host, but also for all the guests running on that host, along with the management agents for Configuration Manager, Data Protection Manager &amp; Virtual Machine Manager.&#160; So now we get detailed information about what’s going on at the host level, but detailed application level information about what’s going in all the guests, plus backup, plus inventory, plus patching, plus software distribution, plus desired configuration management, plus self service VM provisioning, plus a whole bunch of other capability.&#160; </p>  <p>For me the deep application information is really important.&#160; Sure you could take a black box view of the VM and just treat it as a CPU &amp; memory &amp; disk IO consuming thing, but just because it’s virtualised doesn’t mean you don’t want to know what’s going on in that VM.&#160; If that VM is running BizTalk you’d want to know that the BizTalk services are behaving the way they should, if the VM is running Exchange you want to know that mail is flowing, if it’s running SQL you want to know that the SQL databases aren’t running out of space.&#160; The black box view is great if all you want to do is play musical chairs with your VM’s, but if you really want to know that they’re doing what they’re supposed to, you need deep application knowledge.&#160; And that’s where Operations Manager excels.</p>  <p>And forget that Eric tells you that PRO is <a href="https://www.vcritical.com/2008/11/pro-tips-pros-only-please/">too hard to configure</a> – it’s not.</p>  <p>&#160;</p>  <p>Just to be explicit on my comment policy: comments are moderated on this blog, but I’ll publish every comment that isn’t offensive, spam or defamatory.&#160; It just takes me a while sometimes.</p>]]></content:encoded>
    </item>
  </channel>
</rss>