<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Chris's Blog - Just weedin around Microsoft</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/chrad/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/chrad/feed.xml</link>
    <description />
    <lastBuildDate>Mon, 07 Mar 2016 12:30:39 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Configuration Manager 2012:  Package Conversion Manager 2.0 Released</title>
      <link>https://docs.microsoft.com/archive/blogs/chrad/configuration-manager-2012-package-conversion-manager-2-0-released</link>
      <pubDate>Tue, 15 Jan 2013 10:43:31 GMT</pubDate>
      <dc:creator><![CDATA[ChrAd]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chrad/2013/01/15/configuration-manager-2012-package-conversion-manager-2-0-released/</guid>
      <description><![CDATA[The System Center 2012 Service Pack 1 released today and widely available.&#160; With this release,...]]></description>
      <content:encoded><![CDATA[<p>The <a href="http://www.microsoft.com/en-us/server-cloud/system-center/default.aspx">System Center 2012 Service Pack 1 released today</a> and widely available.&#160; With this release, our team has worked really hard to ensure that we update and support Configuration Manager 2012 Service Pack 1 for our application migration tool called Package Conversion Manager (PCM).&#160; We originally released PCM to support RTM of ConfigMgr 2012 and due to changes made in service pack 1 we had to update PCM to support those changes.&#160; </p>  <p>I’m happy to announce that <a href="http://www.microsoft.com/en-us/download/details.aspx?id=34605">Package Conversion Manager 2.0</a> is available on the <a href="http://download.microsoft.com/download/E/0/5/E055E978-CBEE-4429-B5EE-59AA743D8C83/PCMSP1Setup-ENU.EXE">Microsoft Download Center</a> in conjunction with this SP1 release.</p>  <h3>Key Changes for Package Conversion Manager 2.0</h3>  <p>The <a href="http://www.microsoft.com/en-us/download/details.aspx?id=34605">2.0 release of PCM</a> doesn’t have new features implemented yet we did resolve bugs found and reported along with other known issues.&#160; However, we did make a key change for the longer term support of PCM and that was to build a single set of binaries available in a single installer to support both ConfigMgr RTM &amp; SP1.&#160; This is the case for all languages supported from our RTM release.&#160; Thus, you can use a single download for all your RTM &amp; SP1 systems for PCM.</p>  <h3>Downloading Package Conversion Manager 2.0</h3>  <p>To get started or upgrade your version of PCM, please visit the PCM Home page.&#160; For those who are interested in the bits only, please use the following links for each language-</p>  <blockquote>   <p>· <a href="http://download.microsoft.com/download/E/0/5/E055E978-CBEE-4429-B5EE-59AA743D8C83/PCMSP1Setup-ENU.EXE">English</a></p>    <p>· <a href="http://download.microsoft.com/download/E/0/5/E055E978-CBEE-4429-B5EE-59AA743D8C83/PCMSP1Setup-CHS.EXE">Chinese</a></p>    <p>· <a href="http://download.microsoft.com/download/E/0/5/E055E978-CBEE-4429-B5EE-59AA743D8C83/PCMSP1Setup-DEU.EXE">German</a></p>    <p>· <a href="http://download.microsoft.com/download/E/0/5/E055E978-CBEE-4429-B5EE-59AA743D8C83/PCMSP1Setup-FRA.EXE">French</a></p>    <p>· <a href="http://www.microsoft.com/en-us/download/details.aspx?id=34605">Japanese</a></p>    <p>· <a href="http://download.microsoft.com/download/E/0/5/E055E978-CBEE-4429-B5EE-59AA743D8C83/PCMSP1Setup-RUS.EXE">Russian</a></p> </blockquote>  <h3>Reminder:&#160; Training for Package Conversion Manager 2.0</h3>  <p>As a very quick reminder, we wanted to share that you can learn more about PCM from my blog posts below -</p>  <ul>   <li><a href="http://blogs.technet.com/b/chrad/archive/2012/10/07/kicking-the-tires-for-configuration-manager-2012-s-package-conversion-manager-pcm.aspx">Kicking the tires for Configuration Manager 2012’s Package Conversion Manager (PCM)</a></li>    <li><a title="ConfigMgr 2012 PCM-  Walking through PCM Plug-In capabilities" href="http://blogs.technet.com/b/chrad/archive/2012/09/12/configmgr-2012-pcm-walking-through-pcm-plug-in-capabilities.aspx">ConfigMgr 2012 PCM-&#160; Walking through PCM Plug-In capabilities</a></li>    <li><a title="ConfigMgr 2012- Introducing Package Conversion Manager (PCM) for Seamless Migration to the AppMo" href="http://blogs.technet.com/b/chrad/archive/2011/11/07/configmgr-2012-introducing-package-conversion-manager-pcm-for-seamless-migration-to-appmodel.aspx">ConfigMgr 2012- Introducing Package Conversion Manager (PCM) for Seamless Migration to the AppMo</a></li>    <li><a title="ConfigMgr 2012- Package Conversion Manager (PCM) &amp; Readiness State" href="http://blogs.technet.com/b/chrad/archive/2011/11/09/configmgr-2012-package-conversion-manager-pcm-amp-readiness-state.aspx">ConfigMgr 2012- Package Conversion Manager (PCM) &amp; Readiness State</a></li>    <li><a title="Using Package Conversion Manager (PCMs) Fix &amp; Convert – Moving Manual Readiness Packages" href="http://blogs.technet.com/b/chrad/archive/2011/11/16/using-package-conversion-manager-pcms-fix-amp-convert-moving-manual-readiness-packages.aspx">Using Package Conversion Manager (PCMs) Fix &amp; Convert – Moving Manual Readiness Packages</a></li>    <li><a title="Package Conversion Manager Readiness States &amp; Rules" href="http://blogs.technet.com/b/cameronk/archive/2011/04/14/package-conversion-manger-readiness-states-and-rules.aspx">Package Conversion Manager Readiness States &amp; Rules</a></li>    <li><a title="Extending Microsoft System Center Configuration Manager 2012 Package Conversion Manager (PCM)" href="http://blogs.msdn.com/b/one_line_of_code_at_a_time/archive/2012/01/17/microsoft-system-center-configuration-manager-2012-package-conversion-manager-plugin.aspx">Extending Microsoft System Center Configuration Manager 2012 Package Conversion Manager (PCM)</a></li> </ul>  <h3>Getting support for PCM 2.0 </h3>  <p>As a final notice, we wanted to let you know that you can receive full support through CSS for 2.0 just as you could with 1.0.&#160; This support is valid for 1 year from today.</p>  <p>Enjoy!</p>  <p>Thanks,</p>  <p>-Chris</p>]]></content:encoded>
    </item>
    <item>
      <title>Kicking the tires for Configuration Manager 2012’s Package Conversion Manager (PCM)</title>
      <link>https://docs.microsoft.com/archive/blogs/chrad/kicking-the-tires-for-configuration-manager-2012s-package-conversion-manager-pcm</link>
      <pubDate>Sun, 07 Oct 2012 20:32:00 GMT</pubDate>
      <dc:creator><![CDATA[ChrAd]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chrad/2012/10/07/kicking-the-tires-for-configuration-manager-2012s-package-conversion-manager-pcm/</guid>
      <description><![CDATA[In the past few months, we&rsquo;ve received a lot of requests to help many of you focus on...]]></description>
      <content:encoded><![CDATA[<p>In the past few months, we&rsquo;ve received a lot of requests to help many of you focus on &ldquo;testing&rdquo; the new <a href="http://technet.microsoft.com/en-us/library/hh531519.aspx" target="_blank">Package Conversion Manager (PCM)</a> that is available in the <a href="http://download.microsoft.com" target="_blank">Microsoft Download Center</a>.&nbsp; It is rather trivial to actually download PCM and install in your production environment yet for many it is very scary to do so.&nbsp; You *can* safely do this without concerns as we do not modify any <a href="http://blogs.technet.com/b/configmgrteam/" target="_blank">System Center Configuration Manager 2012</a> database settings during install.&nbsp; Instead, we simply update the Administration Console to enable the functionality.&nbsp; The backend database pieces are part of Configuration Manager 2012 that you received already.&nbsp; As such, we reference PCM as a Configuration Manager 2012 Feature Pack.</p>
<p>In today&rsquo;s post, I want to help many of you get started by providing you some files that will import some basic packages/programs into your Configuration Manager 2012 system.&nbsp; Beyond this, I wanted to enable you to test our collection intent functionality enabling you to easily move WQL query targets to the new Application Model&rsquo;s Global Conditions &amp; Requirements.</p>
<p>Lastly, I&rsquo;ve also attached a tool (PCMTestTool.exe) that allow you to easily &ldquo;clean&rdquo; the system and run through various times to get the hang of it.&nbsp; This tool is available as-is and isn&rsquo;t supported by Microsoft.</p>
<h3>Preparing your Configuration Manager 2012 Infrastructure for the test drive</h3>
<p>Let&rsquo;s start by downloading the files attached to this blog.&nbsp; They are in a single zip file called KickingTiresPCM.zip.&nbsp; You can download them here.</p>
<p>After this, we need to do a couple of quick things before we get deep into kicking the tires.&nbsp; First, you must have already installed Configuration Manager 2012 on a server OS such as Windows 2008/R2.&nbsp; We do not have any requirements outside a working server-side infrastructure.&nbsp; You do not for the purpose of this test need working clients as the packages I&rsquo;m providing to you are not designed to be deployed to clients.</p>
<p>Second, you will need to create a new configuration file for PowerShell that allows us to target both framework versions as the clean script is written using PowerShell.&nbsp; By default, PowerShell isn&rsquo;t targeted against both .NET 2.0 and .NET 4.0.&nbsp; I outline how to do this in my blog post here.&nbsp; In order to effectively run through the plug-in demo, you will need to do this step.</p>
<h3>Setting up Applications for Testing of Configuration Manager PCM Usage</h3>
<p>The first step is to import some applications.&nbsp; I&rsquo;ve outlined in the following blog post how to effectively import a set of applications called HRBusinessApps.zip (they are part of the above zip.)&nbsp; To simplify, use my blog titled &ldquo;<a href="http://blogs.technet.com/b/chrad/archive/2012/09/12/configmgr-2012-pcm-walking-through-pcm-plug-in-capabilities.aspx" target="_blank">ConfigMgr 2012 PCM Walking Through PCM Plug In Capabilities</a>&rdquo; under the section titled Developing your Plug In.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/4667.image_5AEAF738.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/4667.image_5F00_5AEAF738.png"><img width="644" height="241" title="image" style="display: inline; background-image: none;" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/2021.image_thumb_56747671.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/2021.image_5F00_thumb_5F00_56747671.png" border="0" /></a>&nbsp;</p>
<p>After you&rsquo;ve imported the applications, you will need to change the source for the packages. To do this, you follow these instructions outlined in the above blog in section &ldquo;Edit the Program Source for the HR Business Apps&rdquo; -</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/4263.image_11C7DC30.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/4263.image_5F00_11C7DC30.png"><img width="644" height="284" title="image" style="display: inline; background-image: none;" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/7701.image_thumb_140464EC.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/7701.image_5F00_thumb_5F00_140464EC.png" border="0" /></a></p>
<h3>Stepping through Analyze, Convert, Fix &amp; Convert, and Scheduling with PCM</h3>
<p>In the past, I&rsquo;ve provided several detailed blogs on how to utilize the features of PCM.&nbsp; Rather than repeat them, I&rsquo;m going to provide them as reference as they will step you through using the major aspects of PCM.&nbsp; The blogs are outlined below and if you have any questions, please do not <a href="mailto:chradatmicrosoft.com" target="_blank">hesitate to let me know</a>.</p>
<blockquote>
<p><a href="http://blogs.technet.com/b/chrad/archive/2011/11/09/configmgr-2012-package-conversion-manager-pcm-amp-readiness-state.aspx" target="_blank">Analyzing Packages in PCM</a></p>
<p><a href="http://blogs.technet.com/b/chrad/archive/2011/11/16/using-package-conversion-manager-pcms-fix-amp-convert-moving-manual-readiness-packages.aspx" target="_blank">Using Fix &amp; Convert scenario in PCM</a></p>
<p><a href="http://blogs.technet.com/b/cameronk/archive/2012/09/12/pcm-converting-queries-to-collection-requirements.aspx" target="_blank">Targeting:&nbsp; Using PCM&rsquo;s Collection Query Migration to the App Model</a></p>
<p><a href="http://blogs.technet.com/b/chrad/archive/2012/01/19/introducing-package-conversion-manager-pcm-scheduled-package-analyzer.aspx" target="_blank">Using Scheduled Package Analyzer to schedule Analysis</a></p>
<p><a href="http://blogs.technet.com/b/chrad/archive/2012/09/12/configmgr-2012-pcm-walking-through-pcm-plug-in-capabilities.aspx" target="_blank">Developing a Plug-In for PCM to support custom wrappers</a></p>
</blockquote>
<h3>Resetting Configuration Manager Readiness to re-test/re-enable PCM</h3>
<p>To allow you to go through multiple iterations of testing and learning, I&rsquo;ve provided you a tool our development team built that will facilitate cleaning your test environment.&nbsp; This application is fully un-supported though it is signed with Microsoft&rsquo;s digital signature to ensure you can trust it.&nbsp; It provides several functions and I will provide their outline below.</p>
<p>Inside the downloaded zip file, you will find an application called PCMTestTool.exe.&nbsp; This application allows you to do the following-</p>
<ul>
<li>It creates packages &amp; programs for you to test PCM</li>
<li>It will create these packages &amp; programs with sample WQL queries for you to test Fix &amp; Convert including collection intent</li>
<li>It will remove all PCM-specific state such as readiness, etc. so that you can test over &amp; over again</li>
</ul>
<p>This is the primary purpose of this blog is to help get you started with testing.&nbsp; This allows you to test PCM without having any internal needs and you can simply download the single attached zip file, following instructions provided to import the packages/programs and off you go.&nbsp; You can then utilize PCMTestTool.exe to clean your Configuration Manager 2012 test server to re-run and test.&nbsp; You can also use PCMTestTool.exe against your own applications if you like.</p>
<blockquote>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/3107.image_7A302EBC.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/3107.image_5F00_7A302EBC.png"><img width="530" height="484" title="image" style="display: inline; background-image: none;" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/8053.image_thumb_038BF3F1.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/8053.image_5F00_thumb_5F00_038BF3F1.png" border="0" /></a></p>
</blockquote>
<p>By default, each package created will create a WQL collection.&nbsp; If you like to create a package with a unique WQL, you can use WQL Collection argument.</p>
<h3>Summary</h3>
<p>In today&rsquo;s post, I focused on helping many of you get started in testing your environment by not requiring you to do it against your packages/programs.&nbsp;&nbsp; Instead, I provided you with files you can use to test PCM and get familiar with it.&nbsp; This will allow you to go through the various scenarios that PCM solves for you.</p>
<p>Let me know if you have any problems!</p>
<p>Enjoy!</p>
<p>Thanks,</p>
<p>-Chris</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/01/7489/00/00/03/52/46/14/KickingTiresPCM.zip" original-url="http://blogs.technet.com/cfs-filesystemfile.ashx/__key/telligent-evolution-components-attachments/01-7489-00-00-03-52-46-14/KickingTiresPCM.zip">KickingTiresPCM.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>ConfigMgr 2012 PCM:  Walking through PCM Plug-In capabilities</title>
      <link>https://docs.microsoft.com/archive/blogs/chrad/configmgr-2012-pcm-walking-through-pcm-plug-in-capabilities</link>
      <pubDate>Wed, 12 Sep 2012 13:56:00 GMT</pubDate>
      <dc:creator><![CDATA[ChrAd]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chrad/2012/09/12/configmgr-2012-pcm-walking-through-pcm-plug-in-capabilities/</guid>
      <description><![CDATA[&nbsp;
In the complicated and dynamic world of applications, Enterprises continued to find unique...]]></description>
      <content:encoded><![CDATA[<p>&nbsp;</p>
<p>In the complicated and dynamic world of applications, Enterprises continued to find unique and interesting ways to approach software delivery with System Center Configuration Manager.&nbsp; During the development of Package Conversion Manager (PCM), we quickly determined that one area that was ripe for investment was in helping customers to take advantage of PCM when using custom wrappers.</p>
<p>Custom wrappers are defined as non-MSI based capabilities such as scripts or executable that usually provide capabilities above and beyond what Configuration Manager offered.&nbsp; With System Center Configuration Manager 2012, the application model provides much of the robustness that were found in these custom wrappers.&nbsp; The PCM team wanted to ensure that we provided a low-cost solution for IT professionals (or developers) to automate and integrate with PCM&rsquo;s analysis engine to allow wrappers to work effectively for migration.</p>
<p>By default, PCM&rsquo;s analysis engine will interrogate programs and determine if it is MSI and if not will mark any non-MSI as Manual assuming <a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/4375.AnalysisEngineRules_6AFEDC82.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/4375.AnalysisEngineRules_5F00_6AFEDC82.png"><img title="AnalysisEngineRules" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/7827.AnalysisEngineRules_thumb_11CCF2C3.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/7827.AnalysisEngineRules_5F00_thumb_5F00_11CCF2C3.png" alt="AnalysisEngineRules" width="427" height="242" align="left" border="0" /></a>it meets 3 rules outlined in the below.&nbsp; If the program has content, is a software distribution package, and contains at least 1 program it is marked as manual.</p>
<p>What does this mean for you?&nbsp; If you are using a wrapper that is a script (.vbs) or exe then you will show all manual.</p>
<p>The PCM team was aware of this huge need and thus we approached this in a manner where we provide you a &ldquo;hook&rdquo; that will interact with our analysis engine.&nbsp; The hook allows you to write a script, or code, that will interrogate your wrapper to pull out key pieces of data such as detection method or manipulate metadata (like contact help desk information) &ndash; and do it only once.</p>
<p>Thus, the plug in doesn&rsquo;t just magically solve your problem.&nbsp; The experts in wrappers is you and your team and we focused on enabling you to use this expert knowledge to develop a wrapper that would interrogate your &ldquo;system&rdquo; and figure out what needs to be extracted and provide it to the PCM engine.&nbsp; This serialize &amp; de-serialize process makes it very robust and capable of handling a multitude of scenarios.</p>
<h5>Developing your Plug In:&nbsp; A Sample to get Started</h5>
<p>To get you started, I&rsquo;m providing an attachment that has a set of applications that you will need to import into your Configuration Manager 2012 system.&nbsp; The first step is to download using the link below included with this post.&nbsp; It is called HRBusinessApps.zip.&nbsp; Afterwards, let&rsquo;s import then so let&rsquo;s open the Administrator console and do the following -</p>
<ol>
<li>Click the Software Library Wonderbar</li>
<li>Click Packages</li>
<li>Right-click, select Folder, and then Create Folder and name it HR</li>
<li>Click HR folder</li>
<li>In the Ribbon, click Import</li>
<li>Click Browse and locate the HRBusinessApps.zip downloaded from my blog</li>
<li>Click Next</li>
<li>Click Close</li>
</ol>
<p>After completing it, you should see the summary and completion success.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/3617.image_06A36879.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/3617.image_5F00_06A36879.png"><img title="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/6740.image_thumb_4D8C8B76.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/6740.image_5F00_thumb_5F00_4D8C8B76.png" alt="image" width="644" height="334" border="0" /></a></p>
<h5>Source Path:&nbsp; Editing to location of Test MSI&rsquo;s</h5>
<p>I&rsquo;ve provided as a sample a base Test MSI that you can download below in attachment MSISimple.zip.&nbsp; This zip contains a simple MSI with a product ID and the association.&nbsp; It is for testing purposes only.&nbsp; The next step is to download it and put on your network (UNC) and then edit the source path for the imported packages.</p>
<h6>Download &amp; Put on Network Share</h6>
<ol>
<li>Download to your local machine</li>
<li>Upload to a share on the network</li>
</ol>
<h6>Edit the Program Source for the HR Business Apps</h6>
<p>Because you are importing from a different environment, you will need to change the properties of the programs to point to the test MSI.&nbsp; This is rather trivial and I outline the steps below.</p>
<ol>
<li>Click the Software Library Wonderbar</li>
<li>Click Packages</li>
<li>Click HR</li>
<li>Right-click on the first package, click Properties</li>
<li>Click the Data Source tab</li>
<li>Under the &ldquo;This package contrains source files, click Set</li>
<li>Select Network path (UNC name)</li>
<li>Enter the UNC path to the location <a href="file://server/share/%22%20data-mce-href=">\\server\share\</a> to the Simple MSI.&nbsp; (EX:&nbsp; <a href="file://server/Test">\\Server\Test</a> MSIs\MSI &ndash; Simple)</li>
</ol>
<p>After this, you are ready to get started creating your plug-in and the first thing to make sure you see is that you analyze the packages and they return manual.</p>
<h5>Plug In:&nbsp; Why do I need to do this?</h5>
<p>For this sample, I&rsquo;ve provided you a PowerShell script that has been built by our development team.&nbsp; The purpose of the powershell script is to interrogate information stored in XML streams that are utilized by Wrapper called &ldquo;SoftwareInstaller.exe&rdquo;.</p>
<p>You can either use the scripts which are included in the zip file available for download from this blog or create two new PowerShell scripts as outlined below.</p>
<ol>
<li>PlugInAppModel.ps1</li>
<li>SharedFunctions.ps1</li>
</ol>
<p><strong>NOTE: If the Admin console is installed to someplace other than the default location you will need to modify the first entry in the SharedFunctions.ps1 to point to the appropriate location.</strong></p>
<p><strong>The code to copy is the following- PlugInAppModel.ps1</strong></p>
<pre>&nbsp;</pre>
<pre>#   Microsoft Corporation.</pre>
<pre>#</pre>
<pre>#   PCM Plug-In Sample</pre>
<pre>#</pre>
<pre>#   This Sample modifies the application to be created,</pre>
<pre>#   it shows the way to alter the information such as </pre>
<pre>#   Display Name, change the Deployment Type Priority, </pre>
<pre>#   and provide a Detection Method.</pre>
<pre>#</pre>
<pre>#   Input Parameters:</pre>
<pre>#   packageID FullFileName SiteServerName</pre>
<pre>#</pre>
<pre>#   Example Call:</pre>
<pre>#</pre>
<pre>#   PS &gt; .PCMPlugIn.ps1 PKGID0001 C:\3213321-3313213-32313.xml SCCMMachinName </pre>
<pre>&nbsp;</pre>
<pre>#Read Input parameters</pre>
<pre>$packageId      = $args[0]</pre>
<pre>$fullFileName   = $args[1]</pre>
<pre>$sccmServerName = $args[2]</pre>
<pre>&nbsp;</pre>
<pre>$currentPath= Split-Path $MyInvocation.MyCommand.Path</pre>
<pre>import-module "$currentPath\SharedFunctions.ps1"</pre>
<pre>&nbsp;</pre>
<pre>try</pre>
<pre>  {</pre>
<pre>     #Loads Application Model into Application Domain</pre>
<pre>    LoadSccmAssemblies</pre>
<pre>&nbsp;</pre>
<pre>    #Deserialize XML file</pre>
<pre>    $applicaton = GetApplicationObject $fullFileName</pre>
<pre>&nbsp;</pre>
<pre>    #Modifies Application Name</pre>
<pre>    $applicaton.Title = $applicaton.Title + "_ModifiedByPlugIn"</pre>
<pre>    $applicaton.DisplayInfo.Current.Title = $applicaton.DisplayInfo.Current.Title + "_ModifiedByPlugIn"</pre>
<pre>&nbsp;</pre>
<pre>    #If there is any Deployment Type change its Installer properties</pre>
<pre>    if($applicaton.DeploymentTypes.Count -gt 0)</pre>
<pre>    {</pre>
<pre>        VerifyEmptyProductCode $applicaton.DeploymentTypes</pre>
<pre>        $deploymentType = $applicaton.DeploymentTypes[0]</pre>
<pre>&nbsp;</pre>
<pre>        $deploymentType.Installer.InstallCommandLine = 'MSIExec.exe /i "SimpleMSI.msi" /q'</pre>
<pre>        $deploymentType.Installer.UninstallCommandLine = 'MSIExec.exe /uninstall "SimpleMSI.msi"'</pre>
<pre>&nbsp;</pre>
<pre>        $deploymentType.Installer.DetectionMethod = [Microsoft.ConfigurationManagement.ApplicationManagement.DetectionMethod]::Enhanced</pre>
<pre>        Create-EnhancedDetectionMethod $deploymentType.Installer $sccmServerName    </pre>
<pre>&nbsp;</pre>
<pre>        #Add a dependency to a predefined Application</pre>
<pre>        AddDTPreExistantDependency "Automatic01_ModifiedByPlugin" $sccmServerName $deploymentType</pre>
<pre>&nbsp;</pre>
<pre>        #Adds a Predefined Requirement to the DT</pre>
<pre>        Add-DTRequirements $deploymentType "Test setting" "Test Value" $sccmServerName</pre>
<pre>    }</pre>
<pre>&nbsp;</pre>
<pre>    #Change DT Priority</pre>
<pre>    ChangeDTPriority($applicaton)</pre>
<pre>&nbsp;</pre>
<pre>    #Add Custom Predifined DT</pre>
<pre>    Add-DeploymentType $applicaton "Custom Deployment Type" $sccmServerName</pre>
<pre>&nbsp;</pre>
<pre>&nbsp;</pre>
<pre>    #Saves Modified Application into the same File</pre>
<pre>    SaveApplicationObject $applicaton $fullFileName</pre>
<pre>&nbsp;</pre>
<pre>    #If everything was executed successfuly exit with 0</pre>
<pre>    Write-Host "The PCM Plug IN executed successfuly"</pre>
<pre>    exit 0</pre>
<pre>&nbsp;</pre>
<pre>  }catch</pre>
<pre>&nbsp;</pre>
<pre>  {</pre>
<pre>    #If we need to report a problem with the plug in exit with 1</pre>
<pre>    Write-Host "The PCM Plug IN executed with errors"</pre>
<pre>    exit 1</pre>
<pre>  }</pre>
<pre>&nbsp;</pre>
<pre>&nbsp;</pre>
<pre>&nbsp;</pre>
<p><strong>The code to copy is the following &ndash; SharedFunctions.ps1</strong></p>
<pre>$sccmPath = "C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin\"</pre>
<pre>&nbsp;</pre>
<pre>function Get-AuthoringScope($siteServerName)</pre>
<pre>{</pre>
<pre>  $returnValue = [string]::Empty  </pre>
<pre>  $connectionManager = new-object Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlConnectionManager</pre>
<pre>&nbsp;</pre>
<pre>  if($connectionManager.Connect($siteServerName))</pre>
<pre>  {</pre>
<pre>      $result = $connectionManager.ExecuteMethod("SMS_Identification","GetSiteID", $null) </pre>
<pre>      $returnValue = $result["SiteID"].StringValue.Replace("{", [string]::Empty)</pre>
<pre>      $returnValue = $returnValue.Replace("}", [string]::Empty)</pre>
<pre>&nbsp;</pre>
<pre>      $returnValue = "ScopeId_" + $returnValue</pre>
<pre>      $connectionManager.Dispose()</pre>
<pre>  }</pre>
<pre>&nbsp;</pre>
<pre>  $returnValue</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>function Get-ExecuteWqlQuery($siteServerName, $query)</pre>
<pre>{</pre>
<pre>  $returnValue = $null</pre>
<pre>  $connectionManager = new-object Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlConnectionManager</pre>
<pre>&nbsp;</pre>
<pre>  if($connectionManager.Connect($siteServerName))</pre>
<pre>  {</pre>
<pre>      $result = $connectionManager.QueryProcessor.ExecuteQuery($query)</pre>
<pre>&nbsp;</pre>
<pre>      foreach($i in $result.GetEnumerator())</pre>
<pre>      {</pre>
<pre>        $returnValue = $i</pre>
<pre>        break</pre>
<pre>      }</pre>
<pre>&nbsp;</pre>
<pre>      $connectionManager.Dispose() </pre>
<pre>  }</pre>
<pre>&nbsp;</pre>
<pre>  $returnValue</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>&nbsp;</pre>
<pre>function Create-EnhancedDetectionMethod($installer, $siteServerName)</pre>
<pre>{</pre>
<pre>    $authScope = Get-AuthoringScope $siteServerName</pre>
<pre>    $refName = "SettingRef_" + [Guid]::NewGuid().ToString()</pre>
<pre>&nbsp;</pre>
<pre>    $cfgItemType = [Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ConfigurationItemPartType]::File</pre>
<pre>    $setting = Create-EDMSetting $cfgItemType</pre>
<pre>&nbsp;</pre>
<pre>    $logicalName = $setting.LogicalName</pre>
<pre>&nbsp;</pre>
<pre>    $dataType = [Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.ScalarDataType]::GetDataTypeFromDotNetTypeName("String")</pre>
<pre>    $settingSourceType = [Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ConfigurationItemSettingSourceType]::File</pre>
<pre>    $settingReference = new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.SettingReference -ArgumentList $authScope, $refName, 0, $logicalName, $dataType, $settingSourceType , $false</pre>
<pre>&nbsp;</pre>
<pre>    $settingReference.MethodType = [Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ConfigurationItemSettingMethodType]::Count</pre>
<pre>&nbsp;</pre>
<pre>    $constantValue = new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.ConstantValue -ArgumentList "0",$dataType</pre>
<pre>&nbsp;</pre>
<pre>    $operands = new-object "Microsoft.ConfigurationManagement.DesiredConfigurationManagement.CustomCollection``1[Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.ExpressionBase]"</pre>
<pre>    $operands.Add($settingReference)    </pre>
<pre>    $operands.Add($constantValue)</pre>
<pre>&nbsp;</pre>
<pre>    $expressionOperator = [Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ExpressionOperators.ExpressionOperator]::NotEquals</pre>
<pre>    $rootExp = new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.Expression -ArgumentList $expressionOperator, $operands</pre>
<pre>&nbsp;</pre>
<pre>    $installer.EnhancedDetectionMethod = new-object Microsoft.ConfigurationManagement.ApplicationManagement.EnhancedDetectionMethod</pre>
<pre>&nbsp;</pre>
<pre>    $installer.EnhancedDetectionMethod.Settings.Add($setting)</pre>
<pre>&nbsp;</pre>
<pre>    $severity = [Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Rules.NoncomplianceSeverity]::Critical</pre>
<pre>    $installer.EnhancedDetectionMethod.Rule = new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Rules.Rule -ArgumentList "exp1", $severity , $null, $rootExp</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>function Create-EDMSetting([Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ConfigurationItemPartType]$configItemType)</pre>
<pre>{</pre>
<pre>    if($configItemType -eq [Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ConfigurationItemPartType]::File)</pre>
<pre>    {</pre>
<pre>        $setting = new-object Microsoft.ConfigurationManagement.DesiredConfigurationManagement.FileOrFolder -ArgumentList $configItemType, $null</pre>
<pre>        $setting.FileOrFolderName = "TestFile.txt" </pre>
<pre>        $setting.Path = "C:\ProgramFiles\SomeSoftware"</pre>
<pre>    }</pre>
<pre>&nbsp;</pre>
<pre>    $setting</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>&nbsp;</pre>
<pre>#Deserialize XML into Application</pre>
<pre>function GetApplicationObject([string]$xmlFilePath)</pre>
<pre>{</pre>
<pre>   $fileContent = get-content $xmlFilePath -readcount 0   </pre>
<pre>  [Microsoft.ConfigurationManagement.ApplicationManagement.Serialization.SccmSerializer]::DeserializeFromString($fileContent,$false)</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>function SaveApplicationObject($application, [string]$fullFileName)</pre>
<pre>{ </pre>
<pre>&nbsp;</pre>
<pre>  if($applicaton -ne $null)</pre>
<pre>  {</pre>
<pre>    [Microsoft.ConfigurationManagement.ApplicationManagement.Serialization.SccmSerializer]::Serialize($application, $false).Save($fullFileName)    </pre>
<pre>  }</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>&nbsp;</pre>
<pre>#Load Sccm Assemblies</pre>
<pre>function LoadSccmAssemblies()</pre>
<pre>{</pre>
<pre>    $filesToLoad = "Microsoft.ConfigurationManagement.ApplicationManagement.dll","AdminUI.WqlQueryEngine.dll", "AdminUI.DcmObjectWrapper.dll" </pre>
<pre>&nbsp;</pre>
<pre>    Set-Location $sccmPath</pre>
<pre>    [System.IO.Directory]::SetCurrentDirectory($sccmPath)</pre>
<pre>&nbsp;</pre>
<pre>    foreach($fileName in $filesToLoad)</pre>
<pre>    {</pre>
<pre>       $fullAssemblyName = [System.IO.Path]::Combine($sccmPath, $fileName)</pre>
<pre>       if([System.IO.File]::Exists($fullAssemblyName ))</pre>
<pre>       {   </pre>
<pre>           $FileLoaded = [Reflection.Assembly]::LoadFrom($fullAssemblyName )</pre>
<pre>       }</pre>
<pre>       else</pre>
<pre>       {</pre>
<pre>            Write-Host ([System.String]::Format("File not found {0}",$fileName )) -backgroundcolor "red"</pre>
<pre>       }</pre>
<pre>    }</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>#Changes the Deployment Type Priority</pre>
<pre>function ChangeDTPriority($application)</pre>
<pre>{</pre>
<pre>    if($application.DeploymentTypes.Count -gt 1)</pre>
<pre>    {    </pre>
<pre>        $reorderedDT = new-object "Microsoft.ConfigurationManagement.ApplicationManagement.NamedObjectCollection``1[[Microsoft.ConfigurationManagement.ApplicationManagement.DeploymentType]]"</pre>
<pre>&nbsp;</pre>
<pre>        for($i=$application.DeploymentTypes.Count-1; $i -ge 0; $i--)</pre>
<pre>        {</pre>
<pre>            #Inverse DT Priority on the firs two DTs</pre>
<pre>            $temp = $application.DeploymentTypes[$i]</pre>
<pre>            $application.DeploymentTypes.Remove($temp)</pre>
<pre>            $reorderedDT.Add( $temp )            </pre>
<pre>        }</pre>
<pre>&nbsp;</pre>
<pre>        $application.DeploymentTypes = $reorderedDT</pre>
<pre>    }</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>&nbsp;</pre>
<pre>function AddDTPreExistantDependency($appName, $siteServerName, $deploymentType)</pre>
<pre>{</pre>
<pre> $app = Get-ApplicationObjectFromServer $appName $siteServerName</pre>
<pre>&nbsp;</pre>
<pre> if($app -ne $null )</pre>
<pre>    {</pre>
<pre>     $appAuthScope = $app.Scope</pre>
<pre>     $appLogicalName = $app.Name  </pre>
<pre>     $dtAppVersion = $deploymentType.Application.Version  </pre>
<pre>     $dtAuthScope = $app.DeploymentTypes[0].Scope </pre>
<pre>     $dtLogicalName = $app.DeploymentTypes[0].Name </pre>
<pre>     $dtVersion = $deploymentType.Version </pre>
<pre>     $DTDesiredState = [Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.DeploymentTypeDesiredState]::Required </pre>
<pre>&nbsp;</pre>
<pre>     $intentExpression = new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.DeploymentTypeIntentExpression -ArgumentList $appAuthScope, $appLogicalName, $dtAppVersion, $dtAuthScope, $dtLogicalName, $dtVersion, $DTDesiredState, $true</pre>
<pre>&nbsp;</pre>
<pre>     $operands = new-object "Microsoft.ConfigurationManagement.DesiredConfigurationManagement.CustomCollection``1[[Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.DeploymentTypeIntentExpression]]"</pre>
<pre>     $operands.Add($intentExpression)</pre>
<pre>&nbsp;</pre>
<pre>     $expression = new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.DeploymentTypeExpression -ArgumentList ([Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ExpressionOperators.ExpressionOperator]::Or),$operands</pre>
<pre>&nbsp;</pre>
<pre>     $anno =  new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Rules.Annotation</pre>
<pre>     $anno.Description = new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Rules.LocalizableString -ArgumentList "Description", $appLogicalName, $null</pre>
<pre>     $anno.DisplayName = new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Rules.LocalizableString -ArgumentList "DisplayName", $appLogicalName, $null</pre>
<pre>&nbsp;</pre>
<pre>     $rule = new-object "Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Rules.DeploymentTypeRule" -ArgumentList ([Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Rules.NoncomplianceSeverity]::Critical, $anno, $expression)</pre>
<pre>     $deploymentType.Dependencies.Add($rule)</pre>
<pre>    }</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>function Get-ApplicationObjectFromServer($appName,$siteServerName)</pre>
<pre>{    </pre>
<pre>    $resultObject = Get-ExecuteWqlQuery $siteServerName "select thissitecode from sms_identification" </pre>
<pre>    $siteCode = $resultObject["thissitecode"].StringValue</pre>
<pre>&nbsp;</pre>
<pre>    $path = [string]::Format("\\{0}\ROOT\sms\site_{1}", $siteServerName, $siteCode)</pre>
<pre>    $scope = new-object System.Management.ManagementScope -ArgumentList $path</pre>
<pre>&nbsp;</pre>
<pre>    $query = [string]::Format("select * from sms_application where LocalizedDisplayName='{0}'", $appName.Trim())</pre>
<pre>&nbsp;</pre>
<pre>    $oQuery = new-object System.Management.ObjectQuery -ArgumentList $query</pre>
<pre>    $obectSearcher = new-object System.Management.ManagementObjectSearcher -ArgumentList $scope,$oQuery</pre>
<pre>    $applicationFoundInCollection = $obectSearcher.Get()    </pre>
<pre>    $applicationFoundInCollectionEnumerator = $applicationFoundInCollection.GetEnumerator()</pre>
<pre>&nbsp;</pre>
<pre>    if($applicationFoundInCollectionEnumerator.MoveNext())</pre>
<pre>    {</pre>
<pre>        $returnValue = $applicationFoundInCollectionEnumerator.Current</pre>
<pre>        $getResult = $returnValue.Get()        </pre>
<pre>        $sdmPackageXml = $returnValue.Properties["SDMPackageXML"].Value.ToString()</pre>
<pre>        [Microsoft.ConfigurationManagement.ApplicationManagement.Serialization.SccmSerializer]::DeserializeFromString($sdmPackageXml)</pre>
<pre>    }</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>#Add Predifined DT</pre>
<pre>function Add-DeploymentType($application, $DTName, $siteServerName)</pre>
<pre>{</pre>
<pre>&nbsp;</pre>
<pre>    $objectId= new-object Microsoft.ConfigurationManagement.ApplicationManagement.ObjectId -ArgumentList ([Guid]::NewGuid.ToString()), ("Transformed DT " + $DTName)</pre>
<pre>&nbsp;</pre>
<pre>    $deploymentType = new-object Microsoft.ConfigurationManagement.ApplicationManagement.DeploymentType -ArgumentList $objectId , ([Microsoft.ConfigurationManagement.ApplicationManagement.MsiInstallerTechnology]::TechnologyId)</pre>
<pre>    $deploymentType.Title = $DTName;</pre>
<pre>    $deploymentType.Version = 1;</pre>
<pre>    $deploymentType.Enabled = $true</pre>
<pre>    $deploymentType.Name = "DeploymentType_" + [Guid]::NewGuid().ToString()</pre>
<pre>    $deploymentType.Description = "DT Added by PCM PLug In"</pre>
<pre>    #$deploymentType.Hosting = HostingTechnology.Registrar.First();</pre>
<pre>    $deploymentType.Scope = Get-AuthoringScope $siteServerName;</pre>
<pre>    #$deploymentType.Application.AutoInstall = $true</pre>
<pre>&nbsp;</pre>
<pre>    $application.DeploymentTypes.Add($deploymentType)</pre>
<pre>&nbsp;</pre>
<pre>&nbsp;</pre>
<pre>    $deploymentType.Installer.InstallCommandLine = 'MSIExec.exe /i "SimpleMSI.msi" /q'</pre>
<pre>    $deploymentType.Installer.UninstallCommandLine = 'MSIExec.exe /uninstall "SimpleMSI.msi"'</pre>
<pre>&nbsp;</pre>
<pre>    $deploymentType.Installer.DetectionMethod = [Microsoft.ConfigurationManagement.ApplicationManagement.DetectionMethod]::Enhanced</pre>
<pre>    Create-EnhancedDetectionMethod $deploymentType.Installer $sccmServerName    </pre>
<pre>&nbsp;</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>function Add-DTRequirements($deploymentType, $requirementName, $requirementValue, $siteServerName)</pre>
<pre>{ </pre>
<pre>     $deploymentType.Requirements.Clear()</pre>
<pre>&nbsp;</pre>
<pre>     $setting = Get-DcmSettingReference $requirementName $siteServerName</pre>
<pre>&nbsp;</pre>
<pre>     $operands = new-object "Microsoft.ConfigurationManagement.DesiredConfigurationManagement.CustomCollection``1[[Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.ExpressionBase]]"</pre>
<pre>     $operands.Add($setting)</pre>
<pre>&nbsp;</pre>
<pre>     $constant = new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.ConstantValue($requirementValue, [Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.DataType]::String)</pre>
<pre>     $operands.Add($constant)</pre>
<pre>&nbsp;</pre>
<pre>     $expression = new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.Expression -ArgumentList ([Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ExpressionOperators.ExpressionOperator]::IsEquals), $operands</pre>
<pre>     $appLogicalName = $requirementName + " Equals " + $requirementValue</pre>
<pre>     $anno =  new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Rules.Annotation </pre>
<pre>     $anno.DisplayName = new-object Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Rules.LocalizableString -ArgumentList "DisplayName", $appLogicalName, $null</pre>
<pre>&nbsp;</pre>
<pre>     $rule = new-object "Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Rules.Rule" -ArgumentList ( ("Rule_" + [Guid]::NewGuid().ToString()), [Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Rules.NoncomplianceSeverity]::None, $anno, $expression)</pre>
<pre>     $deploymentType.Requirements.Add($rule)</pre>
<pre>&nbsp;</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>&nbsp;</pre>
<pre>function Get-DcmSettingReference($settingName, $siteServerName)</pre>
<pre>{     </pre>
<pre>    $referencedSetting = Create-DcmSetting $settingName $siteServerName</pre>
<pre>&nbsp;</pre>
<pre>    Build-SettingReference $referencedSetting</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>function Build-SettingReference($setting)</pre>
<pre>{</pre>
<pre>     $authScope =  Get-AuthoringScope $siteServerName</pre>
<pre>     $gsrLogicalName = $setting.ParentConfigItem.LogicalName</pre>
<pre>     $dataType = [Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.DataType]::String</pre>
<pre>     $gsr = new-object  Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.GlobalSettingReference -ArgumentList $authScope, $gsrLogicalName, $dataType, $setting.LogicalName, ([Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ConfigurationItemSettingSourceType]::WqlQuery)</pre>
<pre>     $gsr</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>function Create-DcmSetting ($settingName, $siteServerName)</pre>
<pre>{</pre>
<pre>    #Create a DcmConnection</pre>
<pre>    $connectionManager = new-object Microsoft.ConfigurationManagement.ManagementProvider.WqlQueryEngine.WqlConnectionManager  </pre>
<pre>    $isConnected = $connectionManager.Connect($siteServerName)</pre>
<pre>    $dcmConnectionObj = new-object Microsoft.ConfigurationManagement.AdminConsole.DesiredConfigurationManagement.ConsoleDcmConnection -ArgumentList $connectionManager, $null</pre>
<pre>&nbsp;</pre>
<pre>    #The object was implemented with explicit interfaces</pre>
<pre>    $dcmConnection = Get-Interface $dcmConnectionObj ([Microsoft.ConfigurationManagement.DesiredConfigurationManagement.IDcmStoreConnection])               </pre>
<pre>&nbsp;</pre>
<pre>    [Microsoft.ConfigurationManagement.DesiredConfigurationManagement.GlobalSettingsConfigurationItem]$gsci = [Microsoft.ConfigurationManagement.DesiredConfigurationManagement.GlobalSettingsConfigurationItem]::CreateNew($dcmConnectionObj, [Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ConfigurationItemType]::GlobalSettings)</pre>
<pre>&nbsp;</pre>
<pre>    $gsci.Description = "Test Global Setting added by PCM Plug In"</pre>
<pre>    $gsci.Name = $settingName</pre>
<pre>    $gsci.Type = [Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ConfigurationItemType]::GlobalSettings</pre>
<pre>    #set category ID: IS this always the same? as in hardcoded within SCCM?</pre>
<pre>    $gsci.CategoryIDs = [string[]] "GlobalCondition:08347928-D747-4b2e-B99C-94876C0D3D74"</pre>
<pre>    $setting = Get-Setting $gsci</pre>
<pre>    #add it to the ci</pre>
<pre>    $gsci.Settings.ChildSimpleSettings.Add($setting)</pre>
<pre>&nbsp;</pre>
<pre>    #Assuming we want to add a new Global setting to Sccm.</pre>
<pre>    $newItem = $dcmConnection.StoreNewItem([Microsoft.ConfigurationManagement.DesiredConfigurationManagement.ConfigurationItem]$gsci)</pre>
<pre>&nbsp;</pre>
<pre>    $setting</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>function Get-Setting($parent)</pre>
<pre>{</pre>
<pre>    $setting = new-object Microsoft.ConfigurationManagement.DesiredConfigurationManagement.WqlQuerySetting $parent</pre>
<pre>&nbsp;</pre>
<pre>    $setting.SettingDataType = [Microsoft.SystemsManagementServer.DesiredConfigurationManagement.Expressions.DataType]::String</pre>
<pre>    $setting.WqlClass = "SMS_R_System";</pre>
<pre>    $setting.WqlNamespace = "ROOT\ccm";</pre>
<pre>    $setting.WhereClause = "";</pre>
<pre>    $setting.WqlProperty = "ClientType";</pre>
<pre>&nbsp;</pre>
<pre>    $setting.Description = "SMS_R_System\ClientType"</pre>
<pre>    $setting.Name = "SMS_R_System\ClientType"</pre>
<pre>    $setting</pre>
<pre>&nbsp;</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>&nbsp;</pre>
<pre>#In order for the application to Serialize, the Installer.ProductCode is being set to " ",</pre>
<pre>#this is only when PCM is unable to locate the product code.</pre>
<pre>function VerifyEmptyProductCode($DeploymentTypes)</pre>
<pre>{</pre>
<pre>    foreach($i in $DeploymentTypes)</pre>
<pre>    {</pre>
<pre>        if($i.Installer.ProductCode -eq " ")</pre>
<pre>        {</pre>
<pre>           $i.Installer.ProductCode = [Guid]::NewGuid().ToString()</pre>
<pre>        }</pre>
<pre>    }</pre>
<pre>}</pre>
<pre>&nbsp;</pre>
<pre>function Get-Interface {</pre>
<pre>&nbsp;</pre>
<pre>#.Synopsis</pre>
<pre>#   Allows PowerShell to call specific interface implementations on any .NET object. , Workaround for Powershell Bug : 249840</pre>
<pre>#.Description</pre>
<pre>#   Allows PowerShell to call specific interface implementations on any .NET object. </pre>
<pre>#</pre>
<pre>#   As of v2.0, PowerShell cannot cast .NET instances to a particular interface. This makes it</pre>
<pre>#   impossible (shy of reflection) to call methods on explicitly implemented interfaces.   </pre>
<pre>#.Parameter Object</pre>
<pre>#   An instance of a .NET class from which you want to get a reference to a particular interface it defines.</pre>
<pre>#.Parameter InterfaceType</pre>
<pre>#   An interface type, e.g. [idisposable], implemented by the target object.</pre>
<pre>#.Example</pre>
<pre>#   // a class with explicitly implemented interface   </pre>
<pre>#   public class MyObj : IDisposable {</pre>
<pre>#      void IDisposable.Dispose()</pre>
<pre>#   }</pre>
<pre>#   </pre>
<pre>#   ps&gt; $o = new-object MyObj</pre>
<pre>#   ps&gt; $i = get-interface $o ([idisposable])</pre>
<pre>#   ps&gt; $i.Dispose()      </pre>
<pre>#.ReturnValue</pre>
<pre>#   A PSCustomObject with ScriptMethods and ScriptProperties representing methods and properties on the target interface.</pre>
<pre>#.Notes</pre>
<pre>#   LASTEDIT:  2009-03-25 11:35:23</pre>
<pre>&nbsp;</pre>
<pre>    [CmdletBinding()]</pre>
<pre>    param(</pre>
<pre>        [ValidateNotNull()]</pre>
<pre>        $Object,</pre>
<pre>&nbsp;</pre>
<pre>        [ValidateScript( { $_.IsInterface } )]</pre>
<pre>        [type]$InterfaceType</pre>
<pre>    )</pre>
<pre>&nbsp;</pre>
<pre>    $private:t  = $Object.GetType()</pre>
<pre>&nbsp;</pre>
<pre>    try {</pre>
<pre>&nbsp;</pre>
<pre>        $private:m  = $t.GetInterfaceMap($InterfaceType)</pre>
<pre>&nbsp;</pre>
<pre>    } catch [argumentexception] {</pre>
<pre>&nbsp;</pre>
<pre>        throw "Interface $($InterfaceType.Name) not found on ${t}!"</pre>
<pre>    }</pre>
<pre>&nbsp;</pre>
<pre>    $private:im = $m.InterfaceMethods</pre>
<pre>    $private:tm = $m.TargetMethods</pre>
<pre>&nbsp;</pre>
<pre>    # TODO: use param blocks in functions instead of $args</pre>
<pre>    #       so method signatures are visible via get-member</pre>
<pre>&nbsp;</pre>
<pre>    $body = [scriptblock]::Create(@"</pre>
<pre>        param(`$o, `$i)    </pre>
<pre>&nbsp;</pre>
<pre>        `$script:t  = `$o.GetType()</pre>
<pre>        `$script:m  = `$t.GetInterfaceMap(`$i)</pre>
<pre>        `$script:im = `$m.InterfaceMethods</pre>
<pre>        `$script:tm = `$m.TargetMethods</pre>
<pre>&nbsp;</pre>
<pre>        # interface methods $($im.count)</pre>
<pre>        # target methods $($tm.count)</pre>
<pre>&nbsp;</pre>
<pre>        $(</pre>
<pre>            for ($ix = 0; $ix -lt $im.Count; $ix++) {</pre>
<pre>                $mb = $im[$ix]</pre>
<pre>                @"</pre>
<pre>                function $($mb.Name) {</pre>
<pre>                    `$tm[$ix].Invoke(`$o, `$args)</pre>
<pre>                }</pre>
<pre>&nbsp;</pre>
<pre>                $(if (!$mb.IsSpecialName) {</pre>
<pre>                    @"</pre>
<pre>                    Export-ModuleMember $($mb.Name)</pre>
<pre>&nbsp;</pre>
<pre>"@</pre>
<pre>                })</pre>
<pre>"@</pre>
<pre>            }</pre>
<pre>        )</pre>
<pre>"@)</pre>
<pre>   # write-verbose $body.tostring()    </pre>
<pre>&nbsp;</pre>
<pre>    # create dynamic module</pre>
<pre>    $module = new-module -ScriptBlock $body -Args $Object, $InterfaceType </pre>
<pre>&nbsp;</pre>
<pre>    # generate method proxies - all exported members become scriptmethods</pre>
<pre>    # however, we are careful not to export getters and setters.</pre>
<pre>    $custom = $module.AsCustomObject()</pre>
<pre>&nbsp;</pre>
<pre>    # add property proxies - need to use scriptproperties here.</pre>
<pre>    # modules cannot expose true properties, only variables and </pre>
<pre>    # we cannot intercept variables get/set.</pre>
<pre>&nbsp;</pre>
<pre>    $InterfaceType.GetProperties() | % {</pre>
<pre>&nbsp;</pre>
<pre>        $propName = $_.Name</pre>
<pre>        $getter   = $null</pre>
<pre>        $setter   = $null</pre>
<pre>&nbsp;</pre>
<pre>        if ($_.CanRead) {</pre>
<pre>&nbsp;</pre>
<pre>            # where is the getter methodinfo on the interface map?</pre>
<pre>            $ix = [array]::indexof($im, $_.GetGetMethod())</pre>
<pre>&nbsp;</pre>
<pre>            # bind the getter scriptblock to our module's scope</pre>
<pre>            # and generate script to call target method</pre>
<pre>            $getter = $module.NewBoundScriptBlock(</pre>
<pre>                [scriptblock]::create("`$tm[{0}].Invoke(`$o, @())" -f $ix))</pre>
<pre>        }</pre>
<pre>&nbsp;</pre>
<pre>        if ($_.CanWrite) {</pre>
<pre>&nbsp;</pre>
<pre>            # where is the setter methodinfo on the interface map?</pre>
<pre>            $ix = [array]::indexof($im, $_.GetSetMethod())</pre>
<pre>&nbsp;</pre>
<pre>            # bind the setter scriptblock to our module's scope</pre>
<pre>            # and generate script to call target method</pre>
<pre>            $setter = $module.NewBoundScriptBlock(</pre>
<pre>                [scriptblock]::create(</pre>
<pre>                    "param(`$value); `$tm[{0}].Invoke(`$o, `$value)" -f $ix))</pre>
<pre>        }</pre>
<pre>&nbsp;</pre>
<pre>        # add our property to the pscustomobject</pre>
<pre>        $prop = new-object management.automation.psscriptproperty $propName, $getter, $setter</pre>
<pre>        $custom.psobject.properties.add($prop)</pre>
<pre>    }</pre>
<pre>&nbsp;</pre>
<pre>    # insert the interface name at the head of the typename chain (for get-member info)</pre>
<pre>    $custom.psobject.TypeNames.Insert(0, $InterfaceType.FullName)</pre>
<pre>&nbsp;</pre>
<pre>    # dump our pscustomobject to pipeline</pre>
<pre>    $custom</pre>
<pre>}</pre>
<p>Lastly, store these files in a location that you note as you will need to change the configuration for the Plug In in a later step.</p>
<h5>Housekeeping:&nbsp; Configuring PCM &ldquo;Host&rdquo; for PowerShell Execution</h5>
<p>Prior to moving to setup and execution phase, we need to do two pieces of key changes to your system.&nbsp; This is because we decided to build this PowerShell using the .NET 4.0 framework rather than 2.0 as well as to have you change the Execution Policy.</p>
<h6>Create &amp; Edit x86 PowerShell Configuration File</h6>
<p>In order to utilize PowerShell from within the Configuration Manager console, you must create a new configuration file called powershell.exe.config and store it in the following path - C:\Windows\SysWOW64\WindowsPowerShell\v1.0.</p>
<pre>&lt;?xml version="1.0"?&gt;</pre>
<pre>&lt;configuration&gt;</pre>
<pre>    &lt;startup useLegacyV2RuntimeActivationPolicy="true"&gt;</pre>
<pre>        &lt;supportedRuntime version="v4.0.30319"/&gt;</pre>
<pre>        &lt;supportedRuntime version="v2.0.50727"/&gt;</pre>
<pre>    &lt;/startup&gt;</pre>
<pre>&lt;/configuration&gt;</pre>
<p>This allows you to execute the PowerShell that I&rsquo;ve provided above.</p>
<p><strong>NOTE:&nbsp; In order do get SPA to work with the PCM Plugin you will need to configure a few additional things. However, this will be covered in a different blog post.</strong></p>
<h6>Change Execution Policy to Unrestricted</h6>
<p>In order to execute the PowerShell you&rsquo;ve created above, you will need to change the value for the default execution-policy.&nbsp; It is very important to do this with the x86 version of PowerShell.&nbsp; The easiest method on Windows 2008/7 is to do the following-</p>
<ol>
<li>Click Start</li>
<li>In Search box, enter PowerShell</li>
<li>It should have Windows PowerShell (x86), right-click and select Run As Administrator</li>
<li>Click Yes to elevate</li>
</ol>
<blockquote>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/5344.image_2D717EB9.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/5344.image_5F00_2D717EB9.png"><img title="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1134.image_thumb_745AA1B6.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1134.image_5F00_thumb_5F00_745AA1B6.png" alt="image" width="258" height="484" border="0" /></a></p>
</blockquote>
<p>To do this, please open PowerShell and issue the following command-</p>
<pre>Set-ExecutionPolicy Unrestricted</pre>
<p>This should allow your PowerShell scripts to run when executed within the context of PCM.</p>
<p><strong>NOTE:&nbsp; These changes are only for the temporary purposes of this blog.&nbsp; I&rsquo;d not recommend them in a production environment and you should look into PowerShell script signing capabilities for future plug-in enhancements you make.</strong></p>
<h5>Changing Analysis Engine to utilize Plug-In</h5>
<p>After you&rsquo;ve created the plug-in, the next step is to enable the PlugIn to be utilized by the PCM Analysis Engine.&nbsp; All the configuration such as logging trace levels and plug-in settings are stored in the Configuration Manager Administration Console&rsquo;s configuration file.&nbsp; A colleague of mine has put together a good blog post covering this topic <a href="http://blogs.msdn.com/b/one_line_of_code_at_a_time/archive/2012/01/17/microsoft-system-center-configuration-manager-2012-package-conversion-manager-plugin.aspx">here</a>. However, we will delve into what you need to change in this post as well. Navigate to the location you installed your ConfigMgr console. This is normally C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin, but you may have installed it to a different location.&nbsp; The configuration file is named Microsoft.ConfigurationManagement.exe.config.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/5367.image_7864EF88.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/5367.image_5F00_7864EF88.png"><img title="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/3223.image_thumb_1B28B7F7.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/3223.image_5F00_thumb_5F00_1B28B7F7.png" alt="image" width="644" height="300" border="0" /></a></p>
<p>Inside of this file you will need to follow these steps in order to configure the plug-in:</p>
<p><strong>1. Add the following child node to configSections.</strong></p>
<pre>&lt;section name="Microsoft.ConfigurationManagement.UserCentric.Workflow.Properties.Settings" </pre>
<pre>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" </pre>
<p>requirePermission="false" /&gt;</p>
<p><a href="file:///C:/Users/chrad/AppData/Local/Temp/WindowsLiveWriter1286139640/supfilesB847C/PCMpluginConfig18.png"><img style="display: inline;" title="PCMpluginConfig1" src="file:///C:/Users/chrad/AppData/Local/Temp/WindowsLiveWriter1286139640/supfilesB847C/PCMpluginConfig1_thumb4.png" alt="PCMpluginConfig1" width="762" height="86" border="0" /></a></p>
<p><strong>2. Add in a UserCentric node in the ApplicationSettings section.</strong></p>
<p>&nbsp;</p>
<p>&lt;Microsoft.ConfigurationManagement.UserCentric.Workflow.Properties.Settings&gt;</p>
<p>&lt;/Microsoft.ConfigurationManagement.UserCentric.Workflow.Properties.Settings&gt;</p>
<p>&nbsp;</p>
<p><strong>3. Add the rest of the settings within the UserCentric node just added.</strong></p>
<p><strong></strong>&nbsp;</p>
<pre>      &lt;setting name="PcmPlugIn" serializeAs="String"&gt;</pre>
<pre>        &lt;!-- &lt;value&gt;&lt;/value&gt; --&gt;</pre>
<pre>        &lt;value&gt;powershell.exe E:\PlugIn\PlugInAppModel.ps1&lt;/value&gt;</pre>
<pre>      &lt;/setting&gt;</pre>
<pre>      &lt;setting name="PcmPlugInTimeoutMilliseconds" serializeAs="String"&gt;</pre>
<pre>        &lt;value&gt;90000&lt;/value&gt;</pre>
<pre>      &lt;/setting&gt;</pre>
<pre>      &lt;setting name="PcmPluginExitCode" serializeAs="String"&gt;</pre>
<pre>        &lt;value&gt;0&lt;/value&gt;</pre>
<pre>      &lt;/setting&gt;</pre>
<pre>&nbsp;</pre>
<p>As you can see, I&rsquo;ve got an element configuration that is defined in the &lt;value /&gt; setting for PcmPlugIn.&nbsp; This calls PowerShell and loads the PlugIn.ps1. An example configuration would be &lt;value&gt;powershell.exe "C:\sample\PlugInAppModel.ps1"&lt;/value&gt;.</p>
<p>&nbsp;</p>
<p><a href="file:///C:/Users/chrad/AppData/Local/Temp/WindowsLiveWriter1286139640/supfilesB847C/PCMpluginConfig25.png"><img style="display: inline;" title="PCMpluginConfig2" src="file:///C:/Users/chrad/AppData/Local/Temp/WindowsLiveWriter1286139640/supfilesB847C/PCMpluginConfig2_thumb3.png" alt="PCMpluginConfig2" width="721" height="578" border="0" /></a></p>
<h6><strong>Execution Time:&nbsp; Changing value to have threshold that accommodates your PlugIn</strong></h6>
<p>A key area of focus for you in your plug in is to understand exactly what the time it takes for execution.&nbsp; There are a lot of variables that are required for you to take into account.&nbsp; These include the speed of the machine as well whether it is making any network calls and the speed of the external resources.&nbsp; It is important to note that the PCM analysis engine is spawning this process and will continue to &ldquo;pause&rdquo; while it is executing.&nbsp; Thus, as part of the plugin model, we built functionality to say how long for the engine to &ldquo;pause&rdquo; and this is stored in the &lt;value /&gt; setting for PcmPlugInTimeoutMilliseconds.</p>
<p>For our example, I set it at <strong>90000</strong> to allow a <strong>90</strong> seconds for it to complete.&nbsp; If it doesn&rsquo;t complete with success and return a blog of data to the analysis engine this PCM will error out.</p>
<h6>Copy New Configuration to BIN Directory</h6>
<p>You will need to have administrative level access (UAC) to change the configuration file for Configuration Manager.&nbsp; The simple way to effect this is to copy the file to your desktop (or wherever) and then edit the file.&nbsp; You can then copy this file to the C:\Program Files (x86)\Microsoft Configuration Manager\AdminConsole\bin directory.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/5342.image_7B0DAB39.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/5342.image_5F00_7B0DAB39.png"><img title="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/3288.image_thumb_2D054BC4.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/3288.image_5F00_thumb_5F00_2D054BC4.png" alt="image" width="490" height="484" border="0" /></a></p>
<h5>Re-Executing using Plug In &amp; Readiness State Change</h5>
<p>The last step is to see the plug in in action.&nbsp; This requires you to close the console, re-open with the new configuration in place, and then execute analysis.&nbsp; The end result should be a package completes that was now manual and is instead completely automatic.</p>
<p><strong>Before Plug-In:</strong></p>
<p>This shows the packages/programs in the Manual state&hellip;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1145.image_0CEA3F07.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1145.image_5F00_0CEA3F07.png"><img title="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/7002.image_thumb_6CCF3249.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/7002.image_5F00_thumb_5F00_6CCF3249.png" alt="image" width="644" height="178" border="0" /></a></p>
<p><strong>After Plug-In:</strong></p>
<p>This shows the package/programs after running analyze with our plug-in&hellip;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/3782.image_0F92FAB8.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/3782.image_5F00_0F92FAB8.png"><img title="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/7024.image_thumb_418A9B42.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/7024.image_5F00_thumb_5F00_418A9B42.png" alt="image" width="644" height="160" border="0" /></a></p>
<h5>Putting it all Together</h5>
<p>Wow.&nbsp; I can&rsquo;t believe the length of this blog.&nbsp; It has almost worn me out and I can&rsquo;t imagine for those who are reading it.&nbsp; Is it difficult to actually do the work for a plug-in?&nbsp; No, but it is lengthy to share with you all the nuisances in a blog.&nbsp; The goals of today&rsquo;s blog was to help you better understand all the steps but better yet walk you through using the Plug-In to impact and change the readiness status.&nbsp; As you should have witnessed, we were able to use a plug-in that interrogated our custom wrapper and pulled the detection method from it.&nbsp; Before this plug-in, all packages were showing Manual meaning you would need to do them one-by-one.&nbsp; With a plug-in, do the work once, migrate hundreds or thousands easily!</p>
<p>Enjoy!</p>
<p>Thanks,</p>
<p>Chris</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/01/7489/00/00/03/51/97/78/BlogPost.zip" original-url="http://blogs.technet.com/cfs-filesystemfile.ashx/__key/telligent-evolution-components-attachments/01-7489-00-00-03-51-97-78/BlogPost.zip">BlogPost.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Introducing Package Conversion Manager (PCM) 2.0 Beta:  ConfigMgr 2012 SP1 Support</title>
      <link>https://docs.microsoft.com/archive/blogs/chrad/introducing-package-conversion-manager-pcm-2-0-beta-configmgr-2012-sp1-support</link>
      <pubDate>Tue, 11 Sep 2012 10:59:40 GMT</pubDate>
      <dc:creator><![CDATA[ChrAd]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chrad/2012/09/11/introducing-package-conversion-manager-pcm-2-0-beta-configmgr-2012-sp1-support/</guid>
      <description><![CDATA[As I’ve outlined in the past, System Center Configuration Manager 2012 and Package Conversion...]]></description>
      <content:encoded><![CDATA[<p>As I’ve outlined in the past, <a href="http://www.microsoft.com/en-us/server-cloud/system-center/configuration-manager-2012.aspx" target="_blank">System Center Configuration Manager 2012</a> and <a href="http://technet.microsoft.com/en-us/library/hh531519.aspx" target="_blank">Package Conversion Manager (PCM)</a> are very tightly integrated.&#160; This integration creates a situation whereby any major updates to the ConfigMgr 2012 product requires the PCM team to update PCM.&#160; Yesterday, our team released the <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=21191778-5308-4efc-82fe-c8396ed68169" target="_blank">PCM 2.0 Beta</a> that aims at fully supporting <a href="http://www.microsoft.com/en-us/download/details.aspx?id=34605" target="_blank">ConfigMgr SP1 Beta</a> which released as well.</p>  <p>It goes without saying that we would like to have everyone who is working with SP1 to please download the PCM 2.0 bits and give them a test.&#160; In the coming days, I will release several blogs that outline how to effectively test scenarios for PCM allowing you to do so against our 1.0 release or the 2.0 beta release.&#160; </p>  <p>The PCM 2.0 release will release at the same time as the Configuration Manager 2012 SP1 releases and as a PCM user you should follow closely the plans for SP1 Beta.</p>  <h3>What’s New in PCM 2.0</h3>  <p>For the most part the PCM 2.0 code-base goes unchanged however we have fixed several bugs and they newest functionality is to support Configuration Manager 2012 SP1.&#160; For the SP1 Beta release of PCM, it will <strong><font color="#ff0000">only</font></strong> work with the ConfigMgr 2012 SP1 Beta bits and will fail to work if you download it and test against Configuration Manager 2012 RTM.&#160; This is not our long-term plans as we envision 2.0 being a single binary that supports all Configuration Manager 2012 platforms including RTM and SP1.</p>  <h3>Getting Started with PCM Learning</h3>  <p>To get you started with learning PCM, I wanted to provide you some references that exist now and I will update this blog in the future to support the new ones as they come online.</p>  <ul>   <li><a href="http://blogs.technet.com/b/chrad/archive/2011/11/07/configmgr-2012-introducing-package-conversion-manager-pcm-for-seamless-migration-to-appmodel.aspx" target="_blank">ConfigMgr 2012:&#160; Introducing Package Conversion Manager (PCM) for Seamless Migration to the AppModel</a></li>    <li><a href="http://blogs.technet.com/b/chrad/archive/2011/11/09/configmgr-2012-package-conversion-manager-pcm-amp-readiness-state.aspx" target="_blank">ConfigMgr 2012:&#160; Package Conversion Manager (PCM) &amp; Readiness State</a></li>    <li><a href="http://blogs.technet.com/b/chrad/archive/2011/11/16/using-package-conversion-manager-pcms-fix-amp-convert-moving-manual-readiness-packages.aspx" target="_blank">Using Package Conversion Manager (PCMs) Fix &amp; Convert – Moving Manual Readiness Packages</a></li>    <li><a href="http://blogs.technet.com/b/chrad/archive/2012/01/19/introducing-package-conversion-manager-pcm-scheduled-package-analyzer.aspx" target="_blank">Introducing Package Conversion Manager (PCM) Scheduled Package Analyzer</a></li>    <li><a href="http://blogs.technet.com/b/cameronk/archive/2011/04/14/package-conversion-manger-readiness-states-and-rules.aspx" target="_blank">Package Conversion Manager Readiness States &amp; Rules</a></li>    <li><a href="http://blogs.msdn.com/b/one_line_of_code_at_a_time/archive/2012/01/17/microsoft-system-center-configuration-manager-2012-package-conversion-manager-plugin.aspx" target="_blank">Extending Microsoft System Center Configuration Manager 2012 Package Conversion Manager (PCM)</a></li> </ul>  <p>To learn more from Microsoft TechNet, view the <a href="http://technet.microsoft.com/en-us/library/hh531519.aspx" target="_blank">PCM TechNet online documentation</a>.</p>  <h3>Downloading PCM 2.0 for System Center Configuration Manager 2012 SP1 Beta</h3>  <p>As mentioned above, we’ve provided all testers of SP1 Beta the opportunity to <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=21191778-5308-4efc-82fe-c8396ed68169" target="_blank">download our PCM 2.0</a> and to test the scenarios in your environments.&#160; We will provide key scenarios and capabilities to everyone via blogs very soon but for now get started by downloading the bits on the <a href="https://connect.microsoft.com/ConfigurationManagervnext/program4346" target="_blank">Microsoft Connect site</a>.</p>  <p>Enjoy!</p>  <p>Thanks,</p>  <p>-Chris</p>]]></content:encoded>
    </item>
    <item>
      <title>SCVMM 2012: A Frustrating Library that just will not go away! Forcibly Removing it</title>
      <link>https://docs.microsoft.com/archive/blogs/chrad/scvmm-2012-a-frustrating-library-that-just-will-not-go-away-forcibly-removing-it</link>
      <pubDate>Thu, 06 Sep 2012 15:56:12 GMT</pubDate>
      <dc:creator><![CDATA[ChrAd]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chrad/2012/09/06/scvmm-2012-a-frustrating-library-that-just-will-not-go-away-forcibly-removing-it/</guid>
      <description><![CDATA[We recently had a situation with our System Center 2012 Virtual Machine Manager (VMM) that literally...]]></description>
      <content:encoded><![CDATA[<p>We recently had a situation with our <a href="http://technet.microsoft.com/en-us/library/gg610610.aspx" target="_blank">System Center 2012 Virtual Machine Manager</a> (VMM) that literally frustrated the crap out of me.&#160; Don’t take that wrong, the product didn’t really cause the frustration instead it was the <a href="http://technet.microsoft.com/en-us/library/gg610598.aspx" target="_blank">mis-use of the libraries in 2012 that did</a>.&#160; You see, you live &amp; learn and when we originally setup our Development Cloud in 2012, we hacked together the libraries to allow the most flexibility. <strong> You should read that as saying – we didn’t RTFM before we embarked on creating the libraries</strong>.&#160;&#160; </p>  <p>After months &amp; months of using VMM 2012, we finally figured out (or this is where I should confuse you with tense and say that, I, figured it out) how to setup libraries correctly for a cloud.&#160; This is what we (Microsoft) thought most administrators would do before they created a cloud &amp; made libraries available.&#160; The breakdown of clouds, libraries, and 2012 I will save for another day but for now let me just explain the nightmare that will exist when you have physical objects (e.g. iso’s, VHDs, etc.) in the VMM database yet the physical files themselves are gone.&#160; </p>  <p>The result:&#160; Your library will fail to refresh.&#160; Again.&#160; Again.&#160; And did I mention again?&#160; </p>  <h3>Detecting the Problem:&#160; Error 801 VMM cannot find {Object Type} {Object ID}</h3>  <p>It starts with investigating you Jobs wonderbar in the VMM Administration Console.&#160; During the <a href="http://technet.microsoft.com/en-us/library/cc956097.aspx" target="_blank">typical 60 minute refresh cycle</a> (60 is the default, but configurable), you will see an entry that says your refresh failed.&#160; In our case, we had a tester who was wanting to utilize a ISO they’d uploaded to the <a href="http://technet.microsoft.com/en-us/library/gg610608.aspx" target="_blank">Self-service Library though they couldn’t use it as VMM</a> wasn’t aware of it due to the refresh failing.&#160; Wow.&#160; (In this case, it was easier to use Hyper-V Manager to attach and we did so to unblock the tester but that would kill this blog post <img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/7043.wlEmoticon-smile_1E600D5F.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/7043.wlEmoticon_2D00_smile_5F00_1E600D5F.png" /></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/3817.Error801VMObjectIdErrorVMM_0C17469D.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/3817.Error801VMObjectIdErrorVMM_5F00_0C17469D.png"><img title="Error801VMObjectIdErrorVMM" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" border="0" alt="Error801VMObjectIdErrorVMM" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/3733.Error801VMObjectIdErrorVMM_thumb_12CA5020.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/3733.Error801VMObjectIdErrorVMM_5F00_thumb_5F00_12CA5020.png" width="537" height="124" /></a></p>  <p>Well, this is easy…let’s remove the object right?&#160; Let’s do it…</p>  <p>Thus, I chased down trying to remove any instance of the VM object in question and I was able to do so by doing the following in SQL Management Studio:</p>  <ol>   <li>Connect to the VirtualManagerDB using credentials with sysadmin permissions </li>    <li>Click New Query </li>    <li>Select the VirtualManagerDB and enter the following: </li> </ol>  <blockquote>   <pre class="csharpcode"><span class="kwrd">Select</span> * <span class="kwrd">from</span> dbo.tbl_WLC_VMInstance <span class="kwrd">where</span> ObjectID = <span class="str">'{Enter Object Id from Jobs Details}'</span></pre>
</blockquote>


<p>This should return any instances of this object and the next thing to do is the following:</p>

<blockquote>
  <pre class="csharpcode"><span class="kwrd">Delete</span> <span class="kwrd">from</span> dbo.tbl_WLC_VMInstance <span class="kwrd">where</span> ObjectId = <span class="str">'{Enter Object ID}'</span></pre>
</blockquote>


<p>This will return that it completed successfully and then re-run the select command and you will see 0 instances and you are set.&#160; Below are complete examples of the commands used -</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1680.VMObjectIdVMInstance_553CF256.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1680.VMObjectIdVMInstance_5F00_553CF256.png"><img title="VMObjectIdVMInstance" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" border="0" alt="VMObjectIdVMInstance" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/5383.VMObjectIdVMInstance_thumb_630F3851.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/5383.VMObjectIdVMInstance_5F00_thumb_5F00_630F3851.png" width="534" height="33" /></a></p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/5315.DeleteVMObjectIdVMInstance_74EBCC1E.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/5315.DeleteVMObjectIdVMInstance_5F00_74EBCC1E.png"><img title="DeleteVMObjectIdVMInstance" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" border="0" alt="DeleteVMObjectIdVMInstance" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/7043.DeleteVMObjectIdVMInstance_thumb_30AB64D2.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/7043.DeleteVMObjectIdVMInstance_5F00_thumb_5F00_30AB64D2.png" width="535" height="36" /></a></p>

<p>The last step is to try and refresh the library shares and see if they complete.</p>

<h3>Refresh Fails:&#160; What do I do now?</h3>

<p>The downside of doing this is that you’ve successfully removed the object yet you don’t have the library happy at this point.&#160; I was *unsuccessful* at determining how to correct this and thus I went the hard route and RTFM (e.g. read documentation) and set things up a bit different like I mentioned above.&#160; The real fun began when you try and remove the library using the VMM Administration Console</p>

<p>Unfortunately, it turns out the library when in this state is also un-removable and there is no method I could determine to correct this.&#160; The error returned was the same as above-</p>

<blockquote></blockquote>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/7127.Error801VMObjectId_57797B12.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/7127.Error801VMObjectId_5F00_57797B12.png"><img title="Error801VMObjectId" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" border="0" alt="Error801VMObjectId" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1777.Error801VMObjectId_thumb_17436198.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1777.Error801VMObjectId_5F00_thumb_5F00_17436198.png" width="541" height="93" /></a></p>

<blockquote></blockquote>

<p>It turns out, I couldn’t remove the library even though I had removed all VM objects in VMM (trust me, I might have missed ‘em in the DB but not for the lack of trying).</p>

<h3>Nuke Library in Database, I say…</h3>

<p>As a last resort, you can always go straight to the database.&#160; This is not recommended for the faint of heart and I suggest you <a href="http://technet.microsoft.com/en-us/library/hh882397.aspx" target="_blank">backup your VMM database immediately – now – before you continue forward</a>.&#160; Let’s get on with forcibly removing your library share.</p>

<p>To remove a library share from your VMM instance that is un-manageable, do the following:</p>

<p><strong><font color="#ff0000">NOTE:&#160; Please stop your VMM Service before proceeding</font></strong></p>

<ol>
  <li>Open SQL Management Studio </li>

  <li>Select New Query &amp; connect to the VirtualManagerDB </li>

  <li>The first thing to do is find the LibShareId for the share you’d like to remove.&#160; To do this, use the following command: </li>
</ol>

<blockquote>
  <pre class="csharpcode"><span class="kwrd">Select</span> Name, LibraryShareId <span class="kwrd">from</span> dbo.tbl_IL_LibraryShare</pre>
</blockquote>

<p>The result set returns to you a list of all the library shares known to this VMM server.&#160; The key thing you want is the Library Share ID which is used in the upcoming steps.</p>

<blockquote></blockquote>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1185.image_36F23B60.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1185.image_5F00_36F23B60.png"><img title="image" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/6560.image_thumb_76BC21E5.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/6560.image_5F00_thumb_5F00_76BC21E5.png" width="535" height="194" /></a></p>

<blockquote>&#160;</blockquote>

<h3>Deleting References &amp; Library Share:&#160; Let’s do this</h3>

<p>If you immediately attempt to delete the library share, you will violate a constraint in the VirtualManagerDB between two tables – LibraryShare &amp; PhysicalObject.&#160; To allow the removal, you need to remove the reference to the Library Share found above it in the PhysicalObject’s table using the following command:</p>

<pre class="csharpcode"><span class="kwrd">Select</span> * <span class="kwrd">from</span> dbo.tbl_WLC_PhysicalObject <span class="kwrd">where</span> LibShareId = <span class="str">'{Insert Library Share ID from step 3}'</span></pre>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/7140.image_38C29127.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/7140.image_5F00_38C29127.png"><img title="image" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1777.image_thumb_4694D722.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1777.image_5F00_thumb_5F00_4694D722.png" width="507" height="26" /></a></p>

<pre class="csharpcode">&#160;</pre>

<pre class="csharpcode"><font face="Calibri">If you move forward, you will notice no references and you should not have any problems with the constraint.   </font></pre>

<pre class="csharpcode"><font face="Calibri">You will now be able to delete the reference in the dbo.tbl_IL_LibraryShare table:</font></pre>

<pre class="csharpcode"><span class="kwrd">Delete</span> <span class="kwrd">from</span> dbo.tbl_WLC_PhysicalObject <span class="kwrd">where</span> LibShareId = <span class="str">'{Insert Library Share ID from step 3}</span></pre>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/5305.image_1B50401B.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/5305.image_5F00_1B50401B.png"><img title="image" style="border-width: 0px; padding-top: 0px; padding-right: 0px; padding-left: 0px; display: inline; background-image: none;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/8032.image_thumb_29228616.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/8032.image_5F00_thumb_5F00_29228616.png" width="513" height="35" /></a></p>

<p>You will now be able to confirm that under Library &gt; Library Servers &gt; {Server}&#160; you will no longer have the share you just removed.&#160; We monitored the server for several days but the first thing we did was refresh the library and watched it successfully complete across all our shares.</p>

<h3>Summary</h3>

<p>This was painful on our end.&#160; It took over 2 weeks to figure out what is going on and make the appropriate changes to allow folks to get back to work.&#160; I personally take credit for screwing up a few things when we set the cloud up and I will not do that again but in the end the work required to figure out, and clean up, was above and beyond anything done before by us in VMM.&#160; Because of this, you’ve hopefully learned a few things around how to go hunting in the VirtualManagerDB for objects and hopefully removing them.&#160; Happy hunting…don’t forget to <a href="http://technet.microsoft.com/en-us/library/hh882397.aspx" target="_blank">backup your VMM Database</a>.</p>

<p>Enjoy!</p>

<p>Thanks,</p>

<p>-Chris</p>]]></content:encoded>
    </item>
    <item>
      <title>Introducing User-Driven Install (UDI) for MDT 2012 Update 1</title>
      <link>https://docs.microsoft.com/archive/blogs/chrad/introducing-user-driven-install-udi-for-mdt-2012-update-1</link>
      <pubDate>Tue, 21 Aug 2012 11:08:41 GMT</pubDate>
      <dc:creator><![CDATA[ChrAd]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chrad/2012/08/21/introducing-user-driven-install-udi-for-mdt-2012-update-1/</guid>
      <description><![CDATA[Our engineering team has had an amazing journey this past year with two key releases to help our...]]></description>
      <content:encoded><![CDATA[<p>Our engineering team has had an amazing journey this past year with two key releases to help our customers improve their capabilities for deploying Windows in their enterprises.&#160;&#160; As you know, we released <a href="http://technet.microsoft.com/en-us/solutionaccelerators/dd407791.aspx" target="_blank">Microsoft Deployment Toolkit 2012</a> in April of this year to coincide with the <a href="http://www.mms-2012.com/" target="_blank">Microsoft Management Summit (MMS)</a> and this enabled a lot of functionality asked for by you.&#160; These are outlined <a href="http://blogs.technet.com/b/chrad/archive/2011/11/14/mdt-2012-beta-2-user-driven-installation-udi-version-2.aspx" target="_blank">in this post</a> I made back around this release and include an all-new extensible wizard, all-new rebuilt designer, and support for all the enterprise deployment scenarios.</p>  <p>On the heels of the 2012 release, our team was quickly focused on enabling the UDI scenario for <a href="http://windows.microsoft.com/en-US/windows-8/download" target="_blank">Windows 8</a> &amp; <a href="http://www.microsoft.com/en-us/server-cloud/windows-server/2012-default.aspx" target="_blank">2012</a> which were soon-to-be-released.&#160; The final “gold” bits were announced for Windows 8 &amp; Windows Server 2012, and with that, I’m super proud that we have released <a href="http://www.microsoft.com/en-us/download/details.aspx?id=25175" target="_blank">MDT 2012 Update 1</a> which enables all the key features and support needed to deploy Windows 8 &amp; 2012 with MDT UDI.</p>  <p>In today’s post, I want to make you aware of the key additional features &amp; support added in this release for UDI.&#160; In today’s post, I will not drill-down into the features and will save this for later more in-depth posts but I want you to start playing with them now.</p>  <h3>Introducing USMT for Windows 8 Support</h3>  <p>The major testing that our team had to do across the various refresh &amp; replace scenarios was focusing on ensuring that we could effectively capture and restore your user’s data.&#160; In Windows 8, a new version of <a href="http://blogs.technet.com/b/askds/archive/2012/04/13/new-usmt-5-0-features-for-windows-8-consumer-preview.aspx" target="_blank">User State Migration Tool (USMT)</a> was released and as part of Update 1 we’ve validated that all UDI-based scenarios using this new USMT is supported.</p>  <h3>Full Support for selection, detecting, and re-installing Windows 8 Application Packages (.appx)</h3>  <p>Introduced in Windows 8 is the <a href="http://msdn.microsoft.com/en-us/windows/apps/br229512.aspx" target="_blank">new modern experience for application development.</a>&#160; This development platform is based on the <a href="http://msdn.microsoft.com/en-us/windows/apps/br229516" target="_blank">WinRT libraries</a> and will result in a new paradigm for enterprises to develop applications for your users.&#160; With this new paradigm, the deployment team (along with the greater management team such as Configuration Manager) had to enable capabilities for making these new applications discoverable and installable.&#160; If you are using Windows 8 as a individual, or as we call consumer, your new applications are discovered through the new <a href="http://blogs.msdn.com/b/windowsstore/archive/2011/12/06/announcing-the-new-windows-store.aspx" target="_blank">Windows Store</a>.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/3857.image_48931CD4.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/3857.image_5F00_48931CD4.png"><img style="margin: 0px 15px 0px 0px; float: left; display: inline; background-image: none;" title="image" border="0" alt="image" align="left" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/0714.image_thumb_28781017.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/0714.image_5F00_thumb_5F00_28781017.png" width="126" height="127" /></a>For corporations, you want your applications to be discoverable using an internal-facing portal such as the one that is part of <a href="http://systemcenter2012.com/blogs/vnext/archive/2012/07/02/how-to-install-and-configure-system-center-configuration-manager-2012-sccm2012.aspx" target="_blank">Configuration Manager 2012 Service Pack 1</a>.&#160; </p>  <p>The key work here for the UDI team is to allow deployment administrators to provide these new applications stored in the corporate portal to be installable as part of the deployment process.&#160; You can now do this easily using the <a href="http://blogs.technet.com/b/chrad/archive/2012/07/26/learning-mdt-2012-s-user-driven-installation-udi.aspx" target="_blank">UDI Designer</a> as part of MDT 2012 Update 1.</p>  <p>This is allowed as part of the building of new UDI Wizard experiences but also we’ve enhanced the capabilities of our <a href="http://technet.microsoft.com/en-us/video/leveraging-application-discovery-with-mdt-2012-udi" target="_blank">Application Discovery</a> feature that will detect on Windows 8 devices that applications are installed and will mark them to be re-installed.&#160; As enterprises start taking advantage of the new paradigm, this support is super critical to providing seamless experiences as UDI is the only method to ensure that Windows 8 Application Packages are restored automatically during provisioning.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1374.image_5A6FB0A1.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1374.image_5F00_5A6FB0A1.png"><img style="display: inline; background-image: none;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/4011.image_thumb_6841F69C.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/4011.image_5F00_thumb_5F00_6841F69C.png" width="520" height="484" /></a></p>  <h3>Introducing Powerful Build your Own Pages Feature</h3>  <p>The top request since we released MDT 2010 Update 1 and completely through MDT 2012 is the ability for non-developers to build custom UDI pages.&#160; We are excited to announce that we’ve enabled this capability in MDT 2012 Update 1 and it includes a easy-to-use drag-n-drop experience for creation.&#160; This drag &amp; drop provides grids for making visibly appealing pages, along with a full interface that shows the experience as it would look to the end-user.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/4034.image_0F100CDD.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/4034.image_5F00_0F100CDD.png"><img style="display: inline; background-image: none;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1385.image_thumb_4ACFA590.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1385.image_5F00_thumb_5F00_4ACFA590.png" width="644" height="384" /></a></p>  <p>You have a fixed list of controls that in this release we support and it includes common types such as Check Box, Combo Box, and Labels.&#160; What does this allow you to do?&#160; It allows you to build simple, verbose pages that takes advantage of custom scenarios not covered in out-of-box pages delivered in MDT 2012 Update 1.</p>  <h3>Summary</h3>  <p>It is time to usher in Windows 8 &amp; Windows Server 2012.&#160; As announced on the <a href="http://blogs.msdn.com/b/b8/" target="_blank">Building Windows 8 blog</a>, Windows 8 is now golden.&#160; As a <a href="http://msdn.microsoft.com/en-us/" target="_blank">MSDN subscriber</a>, you can begin working to build your deployments for your enterprise and we hope that you decide to put the end-user or service technicians in control of the deployment experience using MDT 2012 Update 1’s UDI feature.&#160; </p>  <p>To download MDT 2012 Update 1, please use the below link:</p>  <blockquote>   <p><a href="http://www.microsoft.com/en-us/download/details.aspx?id=25175" target="_blank">Microsoft Deployment Toolkit Update 1</a></p> </blockquote>  <p>Enjoy!</p>  <p>Thanks,</p>  <p>-Chris</p>]]></content:encoded>
    </item>
    <item>
      <title>Disaster: Sector “0” Blanked for Cluster CSV, VMM Incomplete Configuration</title>
      <link>https://docs.microsoft.com/archive/blogs/chrad/disaster-sector-0-blanked-for-cluster-csv-vmm-incomplete-configuration</link>
      <pubDate>Mon, 06 Aug 2012 08:00:00 GMT</pubDate>
      <dc:creator><![CDATA[ChrAd]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chrad/2012/08/06/disaster-sector-0-blanked-for-cluster-csv-vmm-incomplete-configuration/</guid>
      <description><![CDATA[Earlier this week, I had the privilege of living through a living hell whereby I was wondering what...]]></description>
      <content:encoded><![CDATA[<p>Earlier this week, I had the privilege of living through a living hell whereby I was wondering what exactly would happen when our development engineering team had to figure out how to rebuild 53+ virtual machines hosted on a <a href="http://www.microsoft.com/en-us/server-cloud/windows-server/failover-clustering-network-load-balancing.aspx" target="_blank">Failover Cluster</a> with <a href="http://technet.microsoft.com/en-us/library/dd759255.aspx" target="_blank">Clustered Shared Volumes</a> (CSV) enabled.&#160; The first question is why don’t you have backups and I will tell you we do but let me talk about what I believe is the perfect storm of irony.</p>  <p>In today’s post, I will walk you through this scenario so you can re-live the unbelievable pain and hopefully in this blog you will enjoy the entertainment value as much as what I hope you learn.&#160; Let’s get started…</p>  <h3>Scenario:&#160; Say goodbye to EMC AX4-5 Storage Area Network (SAN) &amp; Hello to NetApp SAN</h3>  <p>Our engineering development cluster has ran great for 3+ years and has lived through host decommissions, failed drives, and even expansions of size for CSVs when running low.&#160; We’ve moved data successfully around easily and pulled hosts in &amp; out based on our needs.&#160; The datacenter is an interesting place you see – hardware grows old and begins to show its age though to EMC’s credit we didn’t really see this age.&#160; It was running, and for our needs, running well.&#160; However, it was out of support effective April 2012 and at this point we were putting our business at risk.</p>  <p>Enter NetApp with it’s great integration points with <a href="http://www.microsoft.com/en-us/server-cloud/readynow/?EP=200072478" target="_blank">System Center 2012</a> and we couldn’t say no.&#160; There were other factors but in the end we now ended up with 2 SANs racked side-by-side – one old and one new.&#160; The techie in me couldn’t say no to this and we were excited to get the NetApp into production as it was bigger, faster, and newer.&#160; The LUNs were provisioned and presented to the hosts and now added to our Failover Cluster.</p>  <p>It’s time to migrate…</p>  <h3>System Center 2012:&#160; VMM’s Migrate Storage Feature</h3>  <p>With <a href="http://technet.microsoft.com/en-us/library/gg610610.aspx" target="_blank">System Center 2012’s Virtual Machine Manager</a>, you can easily migrate from one storage to another.&#160; It is an operation you can do manually or automate using PowerShell.&#160; In our case, we decided to move manually and for this post I focus on the manual process for a single VM.</p>  <p>The steps were straight forward:</p>  <ol>   <li>Open the VMM Admin Console </li>    <li>Expand the Failover Cluster in VMM’s host group, locate your Virtual Machine (VM) </li>    <li>Right-click and choose Migrate Storage<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/6560.image_5B1D4BBE.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/6560.image_5F00_5B1D4BBE.png"><img style="background-image: none; border-right-width: 0px; margin: 15px 32px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/5383.image_thumb_6429D73F.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/5383.image_5F00_thumb_5F00_6429D73F.png" width="164" height="244" /></a> </li>    <li>Select the storage, or in our case the CSV, location for both the configuration &amp; virtual hard disks (VHDs) and click Next </li>    <li>Select the host you’d like to host the VM (this can be the same as it is currently hosted on if you like) and click Next </li>    <li>Click Move </li> </ol>  <p><strong>NOTE:&#160; In some cases, you have non-highly available Virtual Machines that you’d like to move to your Highly Available infrastructure.&#160; In System Center 2012’s VMM it is possible to do this by using the Migrate Virtual Machine option and check the “Make this VM highly available” and this will migrate the VM to the cluster for the configuration &amp; VHDs.</strong></p>  <p>This job will take time depending on the size of the disks and the number of disks to move.&#160; For some of our VMs it was 8 to 10 minutes while for others they were in the 3 to 4 hours as they were large VMs with multiple disks running System Center 2012 platforms like Configuration Manager and Operations Manager.</p>  <p>For more in-depth information on the migrate storage feature, please review my blog at <a title="http://blogs.technet.com/b/chrad/archive/2009/09/07/virtualization-tip-migrating-to-san-s-after-the-fact-with-scvmm-using-r2-s-migrate-storage.aspx?CommentPosted=true" href="http://blogs.technet.com/b/chrad/archive/2009/09/07/virtualization-tip-migrating-to-san-s-after-the-fact-with-scvmm-using-r2-s-migrate-storage.aspx?CommentPosted=true">http://blogs.technet.com/b/chrad/archive/2009/09/07/virtualization-tip-migrating-to-san-s-after-the-fact-with-scvmm-using-r2-s-migrate-storage.aspx?CommentPosted=true</a> that outlined the new feature when it appeared in VMM 2008 R2.</p>  <h3>Life was good:&#160; Monday morning was pretty and 3.6 Terabytes had been migrated successfully</h3>  <p>On Monday morning after the migration, we were nearly 75% completed with the migration from the EMC to the new NetApp.&#160; We were at 60+ Virtual Machines or so migrated and they were all in their existing state as the team had left them on Friday.</p>  <p>This is the time you’d normally start the day with a meeting and talk about the next steps.&#160; This is exactly what we did at 9:30 and we decided that we needed to provision one more LUN and add to the cluster as an additional CSV to complete the migration off the EMC.&#160; The migration would continue the following weekend.</p>  <p>At 12:36 PM, I heard from some folks on my team that they were unable to access any VMs and the question was something like this -</p>  <blockquote>   <p>“What did you do again this weekend, Chris?”</p> </blockquote>  <p>After hearing this enough, I immediately checked the Failover Cluster using the Manager and saw that nearly 75% of our Virtual Machines were offline.&#160; In looking at the event viewer, I recognized that the new CSV showed dismounted at 12:36 and I was shocked.&#160; The first visual indication I got was checking the Cluster Shared Volumes in the Failover Cluster Manager and realizing that the disk showed no indication of the volume:</p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/4338.image_6A70ADCD.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/4338.image_5F00_6A70ADCD.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/5327.image_thumb_1F110A09.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/5327.image_5F00_thumb_5F00_1F110A09.png" width="675" height="135" /></a></p> </blockquote>  <p>As you can see, the NetApp CSV-based LUN was seen by the cluster yet had no volumes and the result was that in <a href="http://technet.microsoft.com/en-us/library/bb457122.aspx" target="_blank">Disk Management the disk showed offline</a>.&#160; Bring it online led to it asking to <a href="http://technet.microsoft.com/en-us/library/cc771486.aspx" target="_blank">initialize the disk</a> which no one should do to an existing volume with data you’d like to retain as this re-writes the partition table for a <a href="http://en.wikipedia.org/wiki/Master_boot_record" target="_blank">MBR</a> or <a href="http://en.wikipedia.org/wiki/GUID_Partition_Table" target="_blank">GPT-based volume</a>.</p>  <h3>Oh heck, what do we do now?</h3>  <p>After working all day with the NetApp and internal Microsoft expert named James, I’m happy to say we solved this problem with no data loss whatsoever.&#160; I was @#$#% bullets until late Monday night but I knew that our team would validate in the morning any data problems and we did confirm this.</p>  <p>James determined that on our CSV our LUN’s Sector “0” was blanked and thus had no recognizable data to the operating system.&#160; For some, you might just think this is a problem and decide to re-initialize the disk but when you do this you would blank out Sectors 1 &amp; 2 which are very important in MBR/GPT volumes.&#160; This engineer taught us a lot while we nervously awaited to see if he could re-establish the sectors and cause the cluster to recognize the volume again.</p>  <p>To do this, the engineer sent us a tool called <a href="http://www.tburke.net/info/suptools/topics/diskprobe.htm" target="_blank">Disk Probe</a> and he started playing with Go To Sector, copy sectors off to file, taking screen shots and overly amazing us while we were praying.&#160; In the end, he found that Sector 0 was blank and didn’t look like it “should” and I’ve provided a sector 0 that isn’t blanked out in the screenshot below-</p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/8535.image_094721AC.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/8535.image_5F00_094721AC.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1273.image_thumb_418598C4.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1273.image_5F00_thumb_5F00_418598C4.png" width="581" height="484" /></a></p> </blockquote>  <p><strong><font color="#ff0000">NOTE:&#160;&#160; This is the typical warning I’d like to share.&#160; If you are faint of heart, or pregnant, or whatever I’d recommend you do not get this application and do anything with it.&#160; I will never touch it personally as it allows you to edit sectors directly on the disk.&#160; James was a cool customer and obviously knew what he was doing but for those that don’t, call someone who does.&#160; You should know that James role at Microsoft is currently in our <a href="http://support.microsoft.com/" target="_blank">Customer Service &amp; Support group</a> so you might can get lucky and find him.&#160; Consider this your warning.</font></strong></p>  <p><font color="#000000">After he’d done some “stuff”, saved it, the volume returned in our Failover Cluster Manager.&#160; The VM’s, all 53 of them, could effectively start now and be effectively managed which is where we decompressed.</font></p>  <h3>Rebuilding Sector 0:&#160; Disk Signature Changes with Initialize Disk</h3>  <p>As part of the exercise, James was capable of pulling key information from Sector 1 &amp; 2 which include the reserved partitions for Microsoft’s MBR/GPT volumes (I think).&#160; James took the appropriate screenshots of Sector 1 &amp; 2 and then he initialized the disk which created a new disk signature.&#160; For your education, prior to the “blanking” of our sector 0 I want to provide you a before after:</p>  <blockquote>   <p>Before Sector 0 Corrupt:&#160; {B08C099D-54B4-476B-94A4-3A5B4C5ED03F}</p>    <p>After Sector 0 Corrupt:&#160; {5A038286-1631-40AC-A329-5BA4EC28A9C3}</p> </blockquote>  <p>We noticed a flooding of events getting logged in the cluster that read like the below which indicated to us that the cluster was still unhappy overall.</p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/3833.ClusterEventInvalidResource_343F0FB1.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/3833.ClusterEventInvalidResource_5F00_343F0FB1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ClusterEventInvalidResource" border="0" alt="ClusterEventInvalidResource" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/3240.ClusterEventInvalidResource_thumb_&96C1.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/3240.ClusterEventInvalidResource_5F00_thumb_5F00_260096C1.png" width="644" height="239" /></a></p> </blockquote>  <p>Although the VM’s were successfully running, we noticed that every Virtual Machine under Services &amp; Applications in the Failover Cluster Manager failed to show the volume resource binding like it normally does.&#160; We were unsure if it impacts anything and since the VMs were running, we decided to worry about it later.</p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/2671.image_7DEDE7A1.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/2671.image_5F00_7DEDE7A1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/8055.image_thumb_2B02D470.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/8055.image_5F00_thumb_5F00_2B02D470.png" width="644" height="377" /></a></p> </blockquote>  <p>A normal view shows the resources required for the configuration such as drives, etc.&#160; I’ve shown a typical working example below in the graphic -</p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/5315.image_2952089C.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/5315.image_5F00_2952089C.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="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/2843.image_thumb_2EC07940.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/2843.image_5F00_thumb_5F00_2EC07940.png" width="644" height="163" /></a></p> </blockquote>  <h3>System Center 2012:&#160; VMM’s Incomplete VM Configuration</h3>  <p>Because of the late night hour, and determining that the VMs were functional, we decided that the mission linkage to Cluster Shared Volume wasn’t a problem,.&#160; It was only a few days later we realized that we seem to might have some correlation between the state of the VM’s in the cluster and the VMM state “Incomplete CM Configuration.”&#160; We couldn’t understand if the disk signature was causing an issue or what but thanks to the help of Hector from our VMM team we were able to determine that this in fact was a clustering issue and not a VMM.</p>  <p>I wanted to step you through some of the VMM errors were receiving during this to help you -</p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/4403.MSCluster_ResourceNameVMM_39119DA0.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/4403.MSCluster_5F00_ResourceNameVMM_5F00_39119DA0.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="MSCluster_ResourceNameVMM" border="0" alt="MSCluster_ResourceNameVMM" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1108.MSCluster_ResourceNameVMM_thumb_181E2AF9.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1108.MSCluster_5F00_ResourceNameVMM_5F00_thumb_5F00_181E2AF9.png" width="644" height="482" /></a></p> </blockquote>  <p>As you can see, we have an issue with MSCluster_Resource.Name=”{Guid}” and it was unhappy.&#160; For each VM, the GUID was different but the error 12711 was the same and the until this problem was corrected the VM’s in VMM were unable to be refreshed.</p>  <h3>Refreshing Cluster Configuration for Virtual Machines</h3>  <p>The magic bullet to get the cluster back to a healthy state was to do an easy exercise of refreshing the virtual machine configuration so that it would drop the cache (which was inaccurate now) and re-build it.&#160; This allows it to verify everything is working.&#160; The major complaint I have is that it is very buried in the Failover Cluster Manager user experience and many will not know it.</p>  <p>To refresh the configuration for a VM, do the following-</p>  <ol>   <li>Open Failover Cluster Manager </li>    <li>Expand the clusters Services &amp; Applications and click the Virtual Machine </li>    <li>In the middle console, right-click on the virtual machine and select More Actions… </li>    <li>Click Refresh virtual machine configuration<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/4338.ClusterRefreshVirtualMachineConfiguration_16012C30.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/4338.ClusterRefreshVirtualMachineConfiguration_5F00_16012C30.png"><img style="background-image: none; border-right-width: 0px; margin: 15px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ClusterRefreshVirtualMachineConfiguration" border="0" alt="ClusterRefreshVirtualMachineConfiguration" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/2678.ClusterRefreshVirtualMachineConfiguration_thumb_2A867BAE.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/2678.ClusterRefreshVirtualMachineConfiguration_5F00_thumb_5F00_2A867BAE.png" width="552" height="484" /></a> </li>    <li>After it completes, you will be prompted to see if you’d like to see the results – Click Yes or No<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1106.ClusterEventInvalidResourceView_548679D6.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1106.ClusterEventInvalidResourceView_5F00_548679D6.png"><img style="background-image: none; border-right-width: 0px; margin: 15px auto; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ClusterEventInvalidResourceView" border="0" alt="ClusterEventInvalidResourceView" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/6560.ClusterEventInvalidResourceView_thumb_2941E2CF.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/6560.ClusterEventInvalidResourceView_5F00_thumb_5F00_2941E2CF.png" width="244" height="114" /></a> </li>    <li>Click off your VM (or refresh) and come back and you will now see the Disk resource binding </li> </ol>  <p>If the refresh was successful, you can view the report and it will look similar to the below.&#160; The result is that you now have a healthy VM in the cluster and you can move to fixing Virtual Machine Manager.</p>  <blockquote>   <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/0525.ClusterEventInvalidResourceViewDetails_33FF3A24.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/0525.ClusterEventInvalidResourceViewDetails_5F00_33FF3A24.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="ClusterEventInvalidResourceViewDetails" border="0" alt="ClusterEventInvalidResourceViewDetails" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/8547.ClusterEventInvalidResourceViewDetails_thumb_0F0179AB.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/8547.ClusterEventInvalidResourceViewDetails_5F00_thumb_5F00_0F0179AB.png" width="565" height="484" /></a></p> </blockquote>  <h3>Virtual Machine Manager:&#160; Refresh Your Virtual Machine</h3>  <p>The actual action to make the virtual machine in VMM happy is so simple now that you will be happy to know that it is a single right-click experience.&#160; You right-click on the virtual machine and choose refresh and the refresh should now complete successfully.&#160; You should also refresh the entire cluster at this point as it should be healthy now and you are off to the races.</p>  <h3>Summary</h3>  <p>This blog was one that I hope was a bit entertaining while at the same time informative.&#160; As we continue this migration, we hold hope for no more surprises though there was a lot of learning taking place early this week.&#160; The key takeaways I hope you learned how to effectively understand are -</p>  <ol>   <li>Using System Center 2012’s VMM Migrate Storage feature is super simple and easy – Use It! </li>    <li>Sector “0” clearing is a exercise in futility and painful and not for the faint of heart – Find an expert and befriend them until you leave this planet </li>    <li>Failover Clusters can be unhealthy <strong>and</strong> still providing working VMs to end-users </li>    <li>Refreshing virtual machine configurations are easy, diagnosing this is the issue not so much </li> </ol>  <p>Enjoy!</p>  <p>Thanks,</p>  <p>-Chris</p>]]></content:encoded>
    </item>
    <item>
      <title>Extending User-Driven Installation (UDI) in MDT 2012</title>
      <link>https://docs.microsoft.com/archive/blogs/chrad/extending-user-driven-installation-udi-in-mdt-2012</link>
      <pubDate>Fri, 03 Aug 2012 17:36:13 GMT</pubDate>
      <dc:creator><![CDATA[ChrAd]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chrad/2012/08/03/extending-user-driven-installation-udi-in-mdt-2012/</guid>
      <description><![CDATA[A key pillar in our rebuilt User-driven installation for MDT 2012 was to remove the monolithic...]]></description>
      <content:encoded><![CDATA[<p>A key pillar in our rebuilt User-driven installation for MDT 2012 was to remove the monolithic approach and focus on building an extensible, lego-set approach to our UDI Wizard &amp; Designer.&#160; This is an important feature that allows developers, and some IT professionals with coding abilities, to effectively create new pages to meet the dynamic environments each of you live in every day.&#160; </p>  <p>For MDT 2012 UDI, we have several personas who can uniquely contribute to the success of deploying Windows in their environment.&#160; UDI is a user-centric approach to deploying Windows and enables the user to take control of their device running Windows.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/6403.image_54F581E7.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/6403.image_5F00_54F581E7.png"><img style="background-image: none; border-right-width: 0px; margin: 0px 15px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/0844.image_thumb_7BC39827.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/0844.image_5F00_thumb_5F00_7BC39827.png" width="346" height="246" /></a></p>  <p>The UDI Wizard provides a easy-to-use method for end-users to make common decisions for how Windows is deployed on their corporate device.&#160; This includes selecting applications, choosing a language pack, entering their unique machine name, and many more settings.</p>  <p>However, the UDI Wizard is broken down into a set of pages that execute in a stage group, as well as a stage.&#160; This allows IT professionals to really make key decisions on what they want, don’t want, and customize based on the type of deployment your end-user is doing.</p>  <p>In many cases, the pages used to deploy Windows at places such as Microsoft are too complex or not relevant and this drives IT professionals to seek ways to effectively solve these dynamic challenges.&#160; This is where corporate developers can use Microsoft’s Visual Studio tools to develop pages using UDI’s Software Development Kit (SDK).&#160; This provides maximum flexibility for corporations to ensure that they have the right deployment for the right user each time.</p>  <p>Lastly, the key to bringing this all together is the IT professional who often is the deployment engineer and also has knowledge of Configuration Manager’s OSD feature which UDI is built on top of.&#160; The deployment admin hears from end-users, has a unique understanding of corporate environment, and helps bring together the solution.&#160; This is super important for us at Microsoft is to offer the maximum flexibility – if you use what we provide in-box then we are golden.&#160; If not, we offer you the ability to customize to meet your needs.</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/5710.image_5BA88B6A.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/5710.image_5F00_5BA88B6A.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width: 0px; margin-left: auto; border-left-width: 0px; margin-right: auto; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/8446.image_thumb_1F7CBFC2.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/8446.image_5F00_thumb_5F00_1F7CBFC2.png" width="612" height="331" /></a></p>  <p>A lot of folks are looking for documentation and help in getting up to speed with how they can utilize MDT 2012 UDI.&#160; To facilitate and help customers get up-to-speed, we’ve spent a lot of effort to help educate deployment engineers, and now developers, on how to take advantage of UDI.&#160; </p>  <p>Learn from the Software Development Engineer who architected the extensible UDI Wizard on how to extend and build your own pages as well as how to build extensions for our UDI Designer.&#160; </p>  <blockquote>   <p><a href="http://technet.microsoft.com/en-us/video/customizing-the-wizard-pages-in-mdt-udi">System Center 2012 Configuration Manager OSD and MDT User-Driven Installation (UDI) work together to deploy Windows. This video shows from a developer perspective how to customize the wizard pages in MDT UDI. Watch this if you would like to code your own customizations into the pages.</a></p>    <p><a href="http://technet.microsoft.com/en-us/video/building-extensions-for-the-mdt-udi-designer">System Center 2012 Configuration Manager OSD and MDT User-Driven Installation (UDI) work together to deploy Windows. In this video, see how to build extensions for your deployment to further customize MDT UDI for your environment</a></p> </blockquote>  <p>Enjoy!</p>  <p>Thanks,</p>  <p>-Chris</p>]]></content:encoded>
    </item>
    <item>
      <title>Learning MDT 2012’s User-Driven Installation (UDI)</title>
      <link>https://docs.microsoft.com/archive/blogs/chrad/learning-mdt-2012s-user-driven-installation-udi</link>
      <pubDate>Thu, 26 Jul 2012 17:14:04 GMT</pubDate>
      <dc:creator><![CDATA[ChrAd]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chrad/2012/07/26/learning-mdt-2012s-user-driven-installation-udi/</guid>
      <description><![CDATA[After spending a lot of time talking to customers after we integrated code-name “Modena” into the...]]></description>
      <content:encoded><![CDATA[<p>After spending a lot of time talking to customers after we <a href="http://blogs.technet.com/b/chrad/archive/2009/11/15/deploying-windows-7-in-the-enterprise-a-blueprint-for-success.aspx">integrated code-name “Modena”</a> into the powerful, and enterprise-ready <a href="http://technet.microsoft.com/en-us/solutionaccelerators/dd407791.aspx">Microsoft Deployment Toolkit 2010</a>, it was obvious that our engineering team needed to spend some dedicated effort in helping customers get the right training for implementing User-driven Installation (UDI).&#160; I outlined in a <a href="http://blogs.technet.com/b/chrad/archive/2011/11/14/mdt-2012-beta-2-user-driven-installation-udi-version-2.aspx">previous post the key tenants</a> that defined the MDT 2012 UDI release such as deep investments in extensibility across all of UDI as well expanding our support for additional deployment methods such as New Computer, Replace, etc.</p>  <p>After our engineering team spent 9+ months rebuilding the UDI Wizard &amp; Designer from the ground up, we turned focus on helping all of you improve your ability to execute using the UDI pieces in your deployments of Windows.</p>  <h3>Understanding UDI in Enterprise Deployment</h3>  <p>MDT 2012 UDI now supports all the deployment types commonly associated with enterprises:</p>  <ul>   <li>New Computer:&#160; This solution is used to deploy to a bare-metal device with no operating system installed on the hardware </li>    <li>Refresh:&#160; This solution will install a new operating system on a device with an operating system already install on the hardware </li>    <li>Replace:&#160; This solution aids the migration from old computer hardware (e.g. out of support) to a new device </li> </ul>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/3463.image_2068A662.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/3463.image_5F00_2068A662.png"><img style="background-image: none; border-right-width: 0px; margin: 0px 15px 0px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/8662.image_thumb_46CA89AD.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/8662.image_5F00_thumb_5F00_46CA89AD.png" width="298" height="149" /></a>For all of these scenarios, and any variation of them, we wanted UDI to be simple to use and highly flexible.&#160; The process of doing Windows deployments can be complex with lots of technologies involved and we wanted to bring these pieces together and simplify as much as possible in MDT 2012 no matter the scenario.</p>  <p>To aid in helping you get started, I’m happy to announce that we currently have 15-minute tutorials helping you get started with UDI in a couple of the scenarios listed above.</p>  <blockquote>   <p><a href="http://technet.microsoft.com/en-us/video/configuring-mdt-2012-udi-pre-staged-new-computer.aspx">Configuring MDT 2012 UDI for Pre-Staged New Computer</a></p>    <p><a href="http://technet.microsoft.com/en-us/video/configuring-mdt-2012-udi-replace-computer-scenario.aspx">Configuring MDT 2012 UDI in Replace Scenario</a></p>    <p><a href="http://technet.microsoft.com/en-us/video/configuring-mdt-udi-for-hardware-refresh-deployments">Configuring MDT 2012 UDI in Refresh Scenario</a></p> </blockquote>  <h3>User-driven Installation (UDI):&#160; Automatically Re-install Applications with Application Discovery</h3>  <p>For many MDT users, a great number of are un-aware of the extensive work our team create a solution that leads to end-users having zero work to do when their new OS install is completed.&#160; This includes extending User State Migration Tool (USMT) to support the interrogation of printers and network shares and restoring them in the new OS.&#160; Beyond this, we built functionality to support the rapidly evolving and changing landscape of software deployments.&#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/74/89/metablogapi/0333.image_3FAB4D35.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/0333.image_5F00_3FAB4D35.png"><img style="background-image: none; border-right-width: 0px; margin: 0px 15px 2px 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" align="left" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/1803.image_thumb_0A9EBE05.png" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/1803.image_5F00_thumb_5F00_0A9EBE05.png" width="306" height="174" /></a>In UDI, you can utilize a feature called Application Discovery that executes on your old computer (in Replace Scenario) or your current OS (Refresh scenario) to detect the applications installed that are supported for re-installation by System Center Configuration Manager.&#160; This powerful features allows UDI to ensure that upon completion of the new operating system, the end-user has little or no work to do to return to work.</p>  <p>The UDI engineering team, a part of the MDT team, will continue to invest lots of energy in driving down the time lost due to operating system upgrades by end-users until the day we are at zero.&#160; The more your enterprise does software delivery using Configuration Manager the more robust capabilities we have in putting that software back on your machine.</p>  <p>To help you learn more about Application Discovery, we’ve outlined in a 15-minute video how to set up your deployment using UDI to support application discovery to detect and re-install applications.</p>  <blockquote>   <p><a href="http://technet.microsoft.com/en-us/video/leveraging-application-discovery-with-mdt-2012-udi">Leveraging Application Discovery with MDT 2012 User-Driven Installation</a></p> </blockquote>  <h3>Summary</h3>  <p>We are excited by a lot of the features and functionality coming in the upcoming <a href="https://connect.microsoft.com/site14">MDT 2012 Update 1</a>, though, we are focused primarily on helping each and every deployment admin in using MDT UDI.&#160; We will continue to invest lots of energy over the coming months with more video’s, hands on labs, and blogs from myself and my teammate <a href="http://blogs.technet.com/b/cameronk/">Cameron King</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>MDT 2012 User Driven Installation (UDI) Drill-down at MMS 2012</title>
      <link>https://docs.microsoft.com/archive/blogs/chrad/mdt-2012-user-driven-installation-udi-drill-down-at-mms-2012</link>
      <pubDate>Mon, 16 Apr 2012 09:54:03 GMT</pubDate>
      <dc:creator><![CDATA[ChrAd]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/chrad/2012/04/16/mdt-2012-user-driven-installation-udi-drill-down-at-mms-2012/</guid>
      <description><![CDATA[I’ve arrived.&#160; The wheels are down here in Las Vegas and I’m getting pretty excited.&#160; I’m...]]></description>
      <content:encoded><![CDATA[<p>I’ve arrived.&#160; The wheels are down here in Las Vegas and I’m getting pretty excited.&#160; I’m participating in a few sessions this week and I wanted to talk through some of the things to expect if you attend our <a href="http://technet.microsoft.com/en-us/library/ee376932.aspx" target="_blank">MDT 2012 User-Driven Installation</a> (UDI) talk.&#160; In MDT 2012 UDI, which is currently released as a <a href="https://connect.microsoft.com/content/content.aspx?ContentID=12463&amp;SiteID=14" target="_blank">Release Candidate 1</a>, we’ve completely re-vamped UDI to provide you maximum flexibility.&#160; Deploying Windows at the enterprise is super flexible in your options making it rather a complex process.&#160; MDT 2012 provides you a reliable method to piece together your Windows deployments and allow you the control your organization needs.</p>  <p>Enough marketing speak – let’s focus a bit on why UDI exist and why we built it.&#160; The enterprise is changing dramatically from yesteryear and the result is a challenge for many deployment admins to keep up with this shift.&#160; In the past, the Windows desktop was a palace of policies, lock downs, and registry settings aimed at having the same “common operating environment”&#160; for all users in the enterprise.&#160; This led to reduced help desk costs and overall satisfaction from end-users.&#160; Not today.&#160; Today’s users aren’t afraid to jump into the bowels of Windows and customize to their liking, and for many out there, the workforce in these enterprises have had computers in their lives since they were children.&#160; The reality is this – if you lock the Windows desktop down too far they will not use it.&#160; They will go elsewhere and our industry has started calling this the <a href="http://www.gartner.com/it/products/research/consumerization_it/consumerization.jsp" target="_blank">consumerization of IT</a>.</p>  <p>UDI is built to bridge this gap.&#160; Out of the box, Configuration Manager provides a robust task sequence engine allowing you to build the perfect Windows desktop for your users.&#160; Unfortunately, this task sequence assumes one thing – IT has all the answers.&#160; For workforces today, this isn’t the case.&#160; For example, at Microsoft or other technology-based companies, the very idea of not allowing you to customize what applications are installed is simply unforgiving.&#160; Furthermore, the focus of allowing the end-user to do things like add additional administrative users (or groups), or to copy their data from one machine to another and restore it is where I feel the enterprise is going.&#160; These new end-users want to run Windows in a safe, comfortable manner and they also want to provide IT the flexibility to ensure that they provide the best experience to do the job.</p>  <h3>MMS 2012:&#160; Understanding how UDI provides flexibility for end-users &amp; IT</h3>  <p>In our <a href="http://www.mms-2012.com/topic/details/CD-B337" target="_blank">session</a> this week (see below for details), <a href="http://blogs.technet.com/cameronk" target="_blank">Cameron King</a> &amp; I will focus on ensuring that we help you get the most out of UDI including diving into new scenarios supported by MDT 2012 UDI.&#160; We will walk you through building a robust deployment for the MDT Replace scenario whereby the user captures their data from their “soon to be retired” machine and restores it on their pristine new machine when it arrives.&#160; This is accomplished using a familiar experience and is customize to provide them just the right access to control the deployment and not too much.<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/6562.Whats_New_in_2012_0EC18807.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/6562.Whats_5F00_New_5F00_in_5F00_2012_5F00_0EC18807.jpg"><img title="What&#39;s_New_in_2012" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 15px 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="What&#39;s_New_in_2012" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/7658.Whats_New_in_2012_thumb_2031E8DF.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/7658.Whats_5F00_New_5F00_in_5F00_2012_5F00_thumb_5F00_2031E8DF.jpg" width="644" height="364" /></a></p>  <p>Beyond this, we will demonstrate how to effectively navigate our brand new UDI Designer where you will put piece together your flexible deployment(s) for your users.&#160; The UDI designer is where it starts for anyone wanting to use UDI and we will outline how to ensure that all your users applications that are currently installed are automatically re-installed on the new machine using Configuration Manager.&#160; The new designer offers support for <a href="http://www.microsoft.com/en-us/server-cloud/system-center/configuration-manager-2012.aspx" target="_blank">Configuration Manager 2012</a> including new features such as User-device affinity (UDA) and full support for applications (we’ve always supported packages/programs).</p>  <p>For all you Configuration Manager deployment experts, you will certainly want to see our demonstration on how to support the powerful new centralized configuration.&#160; Centralized configuration offers admins the ability to create, then publish using the designer multiple configurations to a central location.&#160; The supported types for central location is UNC (SMB) or HTTP (web service).&#160;&#160; During deployment, prior to executing, the end user’s experience is downloaded from this location allowing administrators the flexibility to make a change at 11:37 and it impact users at 11:40.&#160; In the past with <a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;id=25175" target="_blank">MDT 2010 Update 1</a>, you were required to update the Configuration Manager toolkit package and wait for it to be sent to all the Distribution Points (DPs) before the user got the new experience.&#160; Ironically, during this time period, the end-user would often get errors due to policy throwing has mis-match errors.&#160; We will walk you through how to do this step-by-step!<a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/4812.UDI_Replace_2012_149C2BA0.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/4812.UDI_5F00_Replace_5F00_2012_5F00_149C2BA0.jpg"><img title="UDI_Replace_2012" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; float: right; padding-top: 0px; padding-left: 0px; margin: 15px 0px 0px 15px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="UDI_Replace_2012" align="right" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/74/89/metablogapi/5008.UDI_Replace_2012_thumb_46279935.jpg" original-url="http://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-74-89-metablogapi/5008.UDI_5F00_Replace_5F00_2012_5F00_thumb_5F00_46279935.jpg" width="644" height="364" /></a></p>  <p>&#160;</p>  <p>Lastly, you asked us for additional pages and we’ve responded.&#160; In fact, we’ve provided you the best situation possible – you can now build your own pages and customize to your hearts content.&#160; This allows you to replace our pages, or augment the built-in pages with additional end-user pages.&#160; In this session, we will share with you exactly “how” to do this providing you with all the power with UDI, Configuration Manager,&#160; &amp; MDT 2012.</p>  <h3>Session Details</h3>  <p>Our session should be a lot of fun as we embark on a demo-heavy presentation and beyond this we might even let you play a game or two… but we will see.&#160; The end goal though, not to be mistaken, is to have you walk away with the understanding of how to empower your enterprise users while you provide the right level of management for your Windows deployments.&#160; We want you to be an UDI expert – it starts on Wednesday.</p>  <blockquote>   <p>Session Title:&#160; <a href="http://www.mms-2012.com/topic/details/CD-B337" target="_blank">Microsoft Deployment Toolkit 2012 UDI: Deploying Windows and Customizing the End User Deployment Experience</a> </p>    <p>Day:&#160; Tuesday, April 17</p>    <p>Time:&#160; 2:15-3:30 PDT</p>    <p>Room:&#160; Veronese 2401</p> </blockquote>  <p>Enjoy!</p>  <p>Thanks,</p>  <p>-Chris</p>]]></content:encoded>
    </item>
  </channel>
</rss>