<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Scott’s Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/scott/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/scott/feed.xml</link>
    <description>Managing and Deploying Windows with Configuration Manager and the Cloud.</description>
    <lastBuildDate>Tue, 16 Apr 2019 06:16:21 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Office 365 ProPlus Deployment - We found a problem - Configuration Manager 1702</title>
      <link>https://docs.microsoft.com/archive/blogs/scott/office-365-proplus-deployment-we-found-a-problem-configuration-manager-1702</link>
      <pubDate>Tue, 19 Sep 2017 17:29:09 GMT</pubDate>
      <dc:creator><![CDATA[Scott Breen MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scott/?p=425</guid>
      <description><![CDATA[During the deployment of Office 365 ProPlus downloaded using the Office 365 Installer wizard in...]]></description>
      <content:encoded><![CDATA[During the deployment of Office 365 ProPlus downloaded using the Office 365 Installer wizard in Configuration Manager current branch, version 1702, you may receive Error Code 30053-4 or 300353-39. The Office ProPlus installer will present the error “We found a problem! This installation requires a compatible Microsoft Office program installed on your computer".

[caption id="attachment_446" align="aligncenter" width="497"]<img width="497" height="306" class="size-full wp-image-446" alt="Office 365 ProPlus -We found a problem" src="https://msdnshared.blob.core.windows.net/media/2017/09/Office-365-ProPlus-We-Found-A-Problem.png" /> <strong>Office 365 ProPlus - We found a problem</strong>[/caption]

Clicking on the link takes you to a page on <a href="https://support.office.microsoft.com/en-us/article/Error-code-30053-4-or-30053-39-when-installing-a-language-pack-76590aba-2613-47e0-90a4-8067dcf29d08?NS=OCSAC2RCLICKTORUN&amp;Version=16&amp;SysLcid=3081&amp;UiLcid=3081&amp;AppVer=CCL160&amp;HelpId=%2213-BOOTSTRAPPER_PREREQ-languagePack%22&amp;ui=en-US&amp;rs=en-AU&amp;ad=AU">Office Support</a> about error code  30053-4 or 300353-39.

The likely cause of this error is a bug in the wizard if you are logged into a computer where the language is set to an English language other than <strong>English (United States)</strong>, the wizard will enter the language code for the unsupported language into the XML file. The Office Deployment Tool supports downloading Office in the following languages: <a href="https://technet.microsoft.com/EN-US/library/cc179219(v=office.16).aspx">https://technet.microsoft.com/EN-US/library/cc179219(v=office.16).aspx</a>.

[caption id="attachment_445" align="aligncenter" width="500"]<img width="500" height="255" class="wp-image-445" alt="Office 365 Installer English Australia" src="https://msdnshared.blob.core.windows.net/media/2017/09/Office-365-Installer-English-Australia.png" /> <strong>Office 365 Installer - English (Australia)</strong>[/caption]

If you try to edit the language in the wizard, you'll get an exception with the text "unhandled exception has occurred in your application, the given key is not present".

[caption id="attachment_435" align="aligncenter" width="500"]<img width="500" height="281" class="wp-image-435" alt="Office 365 Installer Console Exception" src="https://msdnshared.blob.core.windows.net/media/2017/09/Office-365-Installer-Console-Exception.png" /> <strong>Office 365 Installer - Console Exception</strong>[/caption]
<h2>Solution</h2>
This particular bug has been fixed in Configuration Manager, version 1706 which is now available for general release. The code has been fixed so that if an unsupported language is selected, the wizard will default to <strong>English (United States)</strong>.
<h2>Workaround 1 - Change Windows Display Language</h2>
If you don't have the luxury of upgrading the newest version of Configuration Manager just yet, you change your display language to <strong>English (United States)</strong> and restart the console.

[caption id="attachment_455" align="aligncenter" width="300"]<img width="300" height="233" class="wp-image-455 size-medium" alt="Settings - Language English (United States)" src="https://msdnshared.blob.core.windows.net/media/2017/09/Settings-Language-English-United-States-300x233.png" /> <strong>Settings - Language English (United States)</strong>[/caption]

When you try again, you'll notice the wizard has <strong>English (United States)</strong> selected and you can add/remove additional languages without causing a console exception.

[caption id="attachment_475" align="aligncenter" width="500"]<img width="500" height="248" class="wp-image-475" alt="Office 365 Installer English (United States)" src="https://msdnshared.blob.core.windows.net/media/2017/09/Office-365-Installer-English-United-States.png" /> <strong>Office 365 Installer - English (United States)</strong>[/caption]
<h2>Workaround 2 - Download Manually</h2>
You can always download Office 365 ProPlus using the Office Deployment Tool and create the application manually. To get started, see <a>Using the Office Deployment Tool for Click-to-Run</a>.]]></content:encoded>
    </item>
    <item>
      <title>Boundary Group Validation Script - Configuration Manager</title>
      <link>https://docs.microsoft.com/archive/blogs/scott/boundary-group-validation-script-configuration-manager</link>
      <pubDate>Thu, 14 Sep 2017 16:12:03 GMT</pubDate>
      <dc:creator><![CDATA[Scott Breen MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scott/?p=385</guid>
      <description><![CDATA[Configuration Manager uses Boundary Groups to define site system roles that a client should use for...]]></description>
      <content:encoded><![CDATA[Configuration Manager uses Boundary Groups to define site system roles that a client should use for site assignment or content retrieval. Ensuring clients are covered by a Boundary and that Boundary is added to a Boundary Group with site systems listed is critical to ensuring clients can successfully download content for any deployment.

For general information about Boundary Groups (which you will need to understand this post), see <a href="https://docs.microsoft.com/en-us/sccm/core/servers/deploy/configure/boundary-groups">https://docs.microsoft.com/en-us/sccm/core/servers/deploy/configure/boundary-groups</a>.

Finding clients that do not have a valid location to download content from can be challenging depending on the size or complexity of an environment. As a result, I've created a script that helps an administrator review their configuration and hopefully identify clients that are in a boundary that provides them with content.

The script has been through a few iterations, and can now successfully validate boundaries based on:
<ul>
 	<li>Active Directory site;</li>
 	<li>IP Subnet;</li>
 	<li>IP Range, or;</li>
 	<li>IPv6 Prefix.</li>
</ul>
The script prompts for and connects to a site server and checks the information recorded for each client to verify that either it's Active Directory site name, or one of it's IP addresses results in it being a member of a Boundary Group with a Site System listed.
<h2>Script Details</h2>
This section details how the script works.
<h3>Results if all Clients are Covered by a Boundary Group</h3>
Figure 1 displays the script results if all clients are detected as being covered by a Boundary Group.

[caption id="attachment_395" align="alignnone" width="500"]<img width="500" height="120" class="wp-image-395" alt="All clients are covered by a Boundary Group" src="https://msdnshared.blob.core.windows.net/media/2017/09/All-clients-are-covered-by-a-boundary-group-1024x246.png" /> Figure 1 - All clients are covered by a Boundary Group[/caption]
<h3>Results if Some Clients are not Covered by a Boundary Group</h3>
Figure 2 shows the script results when some clients are not covered by a Boundary Group.

[caption id="attachment_405" align="alignnone" width="498"]<img width="498" height="141" class="wp-image-405" alt="Some clients are not covered by a Boundary Group" src="https://msdnshared.blob.core.windows.net/media/2017/09/Some-clients-are-not-covered-by-a-boundary-group.png" /> Figure 2 - Some clients are not covered by a Boundary Group[/caption]

The script will also pop a window (Figure 3) that displays a list of computers and their IP addresses that are not covered by a Boundary Group.

[caption id="attachment_415" align="alignnone" width="501"]<img width="501" height="238" class="wp-image-415" alt="All clients not covered by a Boundary Group" src="https://msdnshared.blob.core.windows.net/media/2017/09/All-clients-not-covered-by-a-Boundary-Group.png" /> Figure 3 - All clients not covered by a Boundary Group[/caption]

The results are exported to a file called BoundaryGroups.csv in the temp directory (%temp%).
<h3>BoundaryGroups.csv</h3>
The CSV file outputs the following columns:
<table>
<tbody>
<tr>
<th>Column Name</th>
<th>Description</th>
</tr>
<tr>
<th>BoundaryCount</th>
<td>The number of Boundaries detected for this client</td>
</tr>
<tr>
<th>CoveredByBoundary</th>
<td>True if the client has any Boundary found</td>
</tr>
<tr>
<th>Type</th>
<td>The type of Boundary checked (IP range, AD Site, Iv6 Prefix, IP Subnet)</td>
</tr>
<tr>
<th>IP</th>
<td>The IP address checked (if relevant)</td>
</tr>
<tr>
<th>GroupNameContent</th>
<td>The Boundary Group name detected that has a site system</td>
</tr>
<tr>
<th>SiteCode</th>
<td>The site code listed if the Boundary Group is configured as a Site Assignment Boundary.</td>
</tr>
<tr>
<th>Value</th>
<td>The detected or suggested Boundary value (AD Site name, IP Subnet or IP address range)</td>
</tr>
<tr>
<th>Name</th>
<td>The name of the Boundary if detected</td>
</tr>
<tr>
<th>DPs</th>
<td>How many DPs the client has access to</td>
</tr>
<tr>
<th>GroupNameSiteOnly</th>
<td>The name of the Boundary Group if it's used for Site Assignment</td>
</tr>
<tr>
<th>CoveredByBoundaryGroup</th>
<td>True if the client is covered by a Boundary Group that also has a site system in the references tab.</td>
</tr>
</tbody>
</table>
&nbsp;

If you are opening the CSV file in Excel and want to just list possible boundaries for a client that does not have a Boundary Group with a site system - filter the Covered by Boundary Group column to "not true".

You'll notice multiple entries for each client, that's because it provides you with the information you'd need to create an appropriate boundary depending on your preference. Could be that you select AD Site, which should be listed.
<h3>Script Download</h3>
You can download the script from TechNet gallery, here: <a href="https://gallery.technet.microsoft.com/Validate-Boundary-Group-d85ed496">https://gallery.technet.microsoft.com/Validate-Boundary-Group-d85ed496</a>.
<h2>Summary</h2>
This script is provided as is with no warranties. I recommend running it on your PC and connecting remotely to the Configuration Manager server rather than running it on the Configuration Manager server as it stores client and boundary information in memory while running.

If computers are connected over VPN or DirectAccess, some of the IP addresses listed (and collected by Configuration Manager) might include private addresses of home networks. So keep that in mind when you are looking to create boundaries and ensure you check with your network teams.

Please comment below if you have any feedback or questions.]]></content:encoded>
    </item>
    <item>
      <title>Collection Evaluation Overview - Configuration Manager</title>
      <link>https://docs.microsoft.com/archive/blogs/scott/collection-evaluation-overview-configuration-manager</link>
      <pubDate>Wed, 13 Sep 2017 21:46:49 GMT</pubDate>
      <dc:creator><![CDATA[Scott Breen MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scott/?p=325</guid>
      <description><![CDATA[Collection evaluation is the method by which Configuration Manager (ConfigMgr) takes the collection...]]></description>
      <content:encoded><![CDATA[Collection evaluation is the method by which Configuration Manager (ConfigMgr) takes the collection rules you have defined and updates collection membership based on these rules. Collection evaluation happens differently and at different times based on the administrator-defined configuration of a site and collection.

Some advice for the management of collections can appear counter-intuitive. For example, the general recommendation is to limit the number of collections that update frequently to avoid creating performance problems. However, creating frequently updating collections can be very convenient, especially in light of most ConfigMgr functionality being dependent on collections. The performance impacts and business requirements need to be carefully considered to come up with an appropriate collection evaluation plan.

This blog post seeks to explain how collection evaluation works in ConfigMgr 2012 (and ConfigMgr current branch) including the new concept of a collection evaluation graph.

At a high level, a collection will be evaluated based on the flow identified in Figure 1.

[caption id="attachment_355" align="aligncenter" width="500"]<img width="500" height="216" class="wp-image-355" alt="High-Level Collection Update Process" src="https://msdnshared.blob.core.windows.net/media/2017/09/High-Level-Collection-Update-Process-with-Pictures-1024x442.png" /> Figure 1 - High-Level Collection Update Process[/caption]
<h2>Hierarchy Considerations</h2>
A ConfigMgr environment may have one or more sites based on requirements.  There are three types of sites that can be created:
<ul>
 	<li><strong>Central Administration Site (CAS)</strong> which sits at the root level of the ConfigMgr environment. This site does not manage clients but does manage lower level sites.</li>
 	<li><strong>Primary Sites</strong> sit immediately below the CAS and receive instructions replicated from the CAS database on which they act. Primary Sites manage clients and are the only site that evaluates collections.</li>
 	<li><strong>Secondary Sites</strong> sit below a primary site and act as a proxy for that primary site. Data on the secondary site is exclusively populated using replication from the associated primary site.  Secondary sites do not evaluate collections.</li>
</ul>
Given that a CAS does not evaluate collection membership, it needs to send a request to each primary and request a collection update. The primary sites evaluation the collection update and send the results back to the CAS.

Figure 2 demonstrates an administrators experience when requesting a manual collection update.

[caption id="attachment_365" align="aligncenter" width="499"]<img width="499" height="183" class="wp-image-365" alt="Administrator Experience During a Manual Collection Update from a CAS" src="https://msdnshared.blob.core.windows.net/media/2017/09/Administrator-Experience-During-a-Manual-Collection-Update-from-a-CAS.png" /> Figure 2 - Administrator Experience During a Manual Collection Update from a CAS[/caption]
<h2>Collection Evaluation Types</h2>
Collection evaluation is handled by different threads depending on the type of evaluation. These threads are:
<ul>
 	<li><strong>Primary</strong> – when a collection update is scheduled;</li>
 	<li><strong>Auxiliary</strong> – when a manual collection update is triggered for a collection with dependent collections;</li>
 	<li><strong>Single</strong> – when a manual collection update is triggered for a collection with no dependent collections;</li>
 	<li><strong>Express</strong> – processes incremental collection evaluation.</li>
</ul>
Table 1 describes the collection evaluation triggers:
<table>
<thead>
<tr>
<th>Trigger</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<th>Manual</th>
<td>This is the highest priority collection evaluation.  If an administrator chooses to perform a manual collection evaluation, then the next evaluation thread that becomes available will be assigned to a manual evaluation.</td>
</tr>
<tr>
<th>Scheduled</th>
<td>The process of scheduled evaluation is identical to that of manual evaluation with the exception of course that the evaluation is now not event-driven but time-driven.</td>
</tr>
<tr>
<th>Incremental</th>
<td>Incremental Collections are a collection evaluation schedule that is similar to the Delta collection updates that were possible in ConfigMgr 2007.

In ConfigMgr 2007, delta updates only added resources to a collection when the device was initially discovered. So if a collection query was based off information that would only be updated later (i.e. hardware inventory), then the resource would only be added to or removed from a collection during a scheduled collection update.

In ConfigMgr 2012, incremental collections work as administrators expected in ConfigMgr 2007. Any update to a resources objects are monitored and updated in collections configured for incremental updates.

Incremental evaluation uses a collection evaluation graph to evaluate and update dependent collections if an update to the incremental collection membership changes.</td>
</tr>
<tr>
<th>Staging</th>
<td>Since ConfigMgr 2012, all the collections should be dependent on All Systems or All Users and Groups directly or indirectly. Both of these collections perform a full collection evaluation at 4:00 AM every day. As per the full evaluation cycle, if a change occurs to either of these collections it will trigger updates of dependent collections based on a Full Collection Graph (explained later).</td>
</tr>
</tbody>
</table>
<b>Table 1 – Collection Evaluation Types</b>
<h2>Evaluation Process</h2>
As each individual collection is evaluated, the following steps are performed:
<ol>
 	<li>Execute each collection query</li>
 	<li>Add any systems which are direct members</li>
 	<li>Evaluate all Include collections.</li>
 	<li>A logical AND is performed between this list and the limiting collection.</li>
 	<li>The exclude collections are then evaluated.</li>
 	<li>The results of this step are then logically ORâ€™d against the result set above.</li>
 	<li>The changes are then either written to, updated or deleted from the database.</li>
 	<li>Trigger any dependant collections to update as well (collections that refer to this collection using an include rule, and exclude rule or collections that are limited to this collection)</li>
</ol>
<h2>Collection Evaluation Graph</h2>
The collection evaluation graph is a new concept since ConfigMgr 2012. Previously in ConfigMgr 2007 a collection evaluation was an isolated event resulting in updates only to the targeted collection. In ConfigMgr 2012 a collection evaluation involves the targeted collection and any related collections.

The collection evaluation graph is built differently based on the type of collection evaluation being performed. It is important to understand the different ways in which collections will be evaluated so that appropriate collection design decisions can be made. In general, there are 2 types of evaluation graphs that are built by ConfigMgr;
<ul>
 	<li>Incremental, or;</li>
 	<li>Full.</li>
</ul>
When collection evaluation starts ConfigMgr will build a graph which will include all collections which could possibly need evaluating as a result of changes to the relevant collection. The collection evaluator then builds all of these into the Collection Evaluation Graph starting from the highest level within this cycle.  It will then start to move through the graph in order evaluating each collection membership in turn.  When the collection has been evaluated then any collections below which would NOT be affected by this collection evaluation cycle are removed from the evaluation graph.

If one or more of the collections being evaluated has an Include or an Exclude rule then the collection being included or excluded will also have been added to the graph together with any collections limited by that collection.  During the evaluation of the include and exclude collections should there be any changes then the graph will continue on that branch before returning to the main branch.

During an incremental collection evaluation, the collection evaluation graph will only map referencing collections if they are enabled for incremental evaluation. If an incremental collection is limited to a collection that is not enabled for incremental evaluation, it will be evaluated based on the existing membership of the limiting collection. For example, in Figure 3 even though there are newly discovered resources applicable to all collections, only <strong>All Servers</strong> and <strong>All Servers with Windows Server 2008 R2</strong> are updated while the other collections are not evaluated because the <strong>All Servers with Windows Server 2012 R2</strong> collection is not enabled for incremental evaluation.

[caption id="attachment_366" align="aligncenter" width="580"]<img width="580" height="336" class="wp-image-366 " alt="Incremental Collection Evaluation Graph Example" src="https://msdnshared.blob.core.windows.net/media/2017/09/Incremental-Collection-Evaluation-Graph-Example.png" /> Figure 3 - Incremental Collection Evaluation Graph Example[/caption]

When a collection evaluation is triggered manually or based on a schedule, a full collection evaluation graph is built of all dependent collections. All collections that reference the collection that is updating or subsequent collections are included. ConfigMgr will continue to evaluate down the graph as long as updates to the collections being processed occur. Figure 4 demonstrates how the collection evaluation graph includes all applicable collections when a scheduled or manual collection update request is made for the <strong>All Servers</strong> collection. In the example, 2 new DNS servers running Windows Server 2008 R2 and Windows Server 2012 R2 have been discovered since the last collection evaluation. The two new resources are in scope of the membership queries of all collections shown resulting in all collections updating.

[caption id="attachment_367" align="aligncenter" width="580"]<img width="580" height="336" class="size-full wp-image-367" alt="Full Collection Evaluation Graph Example" src="https://msdnshared.blob.core.windows.net/media/2017/09/Full-Collection-Evaluation-Graph-Example.png" /> Figure 4 - Full Collection Evaluation Graph Example[/caption]

Conversely, Figure 5 demonstrates that not all collections are always evaluated during a full evaluation. The collection evaluation graph will only continue to evaluate dependent collections if an update occurs to the corresponding referenced collection. In the example, the installation of DNS on the Windows Server 2012 R2 server would make it a member of the<strong> All Windows Server 2012 R2 Servers with DNS Server</strong> collection, however because no update occurred to its limiting collection the collection is not evaluated during this evaluation. It would be evaluated during the next incremental evaluation cycle (because it is an incremental collection).

[caption id="attachment_376" align="aligncenter" width="580"]<img width="580" height="336" class="wp-image-376 size-full" alt="Full Collection Evaluation Graph Example 2" src="https://msdnshared.blob.core.windows.net/media/2017/09/Full-Collection-Evaluation-Graph-Example-2.png" /> Figure 5 - Full Collection Evaluation Graph Example 2[/caption]

For some more technical information about how collection evaluation works, see the recording of the <a href="https://channel9.msdn.com/Events/TechEd/Australia/2014/DCI411">ConfigMgrDogs Troubleshoot ConfigMgr 2012</a> session at TechEd Australia.

I'd also like to make a shout out to Jason Wallace who originally put some of this information together.]]></content:encoded>
    </item>
    <item>
      <title>BranchCache for BITS on Windows Professional</title>
      <link>https://docs.microsoft.com/archive/blogs/scott/branchcache-for-bits-on-windows-professional</link>
      <pubDate>Sun, 14 May 2017 19:58:16 GMT</pubDate>
      <dc:creator><![CDATA[Scott Breen MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scott/?p=316</guid>
      <description><![CDATA[For the longest time, I believed that BranchCache and all it's magic was only available to...]]></description>
      <content:encoded><![CDATA[For the longest time, I believed that BranchCache and all it's magic was only available to Enterprise version of Windows client. Turns out, I was wrong. BranchCache for BITS is supported on the following (in addition to Enterprise SKUs):
<ul>
	<li>Windows 10 Pro</li>
	<li>Windows 8.1 Pro</li>
	<li>Windows 8 Pro</li>
	<li>Windows® 7 Pro</li>
</ul>
It's even documented in Microsoft Docs - <a href="https://docs.microsoft.com/en-us/windows-server/networking/branchcache/branchcache#a-namebkmkosaoperating-system-versions-for-branchcache" rel="nofollow">BranchCache</a>.

Why is this exciting? Because it means that those of you running Professional versions of Windows clients are able to take advantage of Configuration Manager BranchCache functionality for BITS downloads!
<h2>More Information</h2>
<ul>
 	<li><a href="https://docs.microsoft.com/en-us/sccm/core/plan-design/configs/support-for-windows-features-and-networks#a-namebkmkbranchcachea-branchcache">Support for Windows Features</a></li>
 	<li><a href="https://docs.microsoft.com/en-us/windows-server/networking/branchcache/branchcache#bkmk_what">What is BranchCache?</a></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Upgrade Analytics Error HRESULT: -2147024891 Access Denied When Running RunConfig.bat</title>
      <link>https://docs.microsoft.com/archive/blogs/scott/upgrade-analytics-error-hresult-2147024891-access-denied-when-running-runconfig-bat</link>
      <pubDate>Wed, 07 Dec 2016 12:34:54 GMT</pubDate>
      <dc:creator><![CDATA[Scott Breen MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scott/?p=295</guid>
      <description><![CDATA[Are you trying to collect inventory data for Windows Upgrade Analytics by running RunConfig.bat and...]]></description>
      <content:encoded><![CDATA[Are you trying to collect inventory data for Windows Upgrade Analytics by running RunConfig.bat and receiving error -2147024891 (which translates to Access Denied)?
<code>03/12/2016 12:15:30 : Attempting to run inventory...This may take a few minutes to complete, please do not cancel the script.
03/12/2016 12:15:30 : Inventory scan Failed, Check error events. HRESULT:
-2147024891</code>

<img src="https://msdnshared.blob.core.windows.net/media/2016/12/Upgrade-Analystics-Error-Screenshot.png" alt="Upgrade Analystics Error Screenshot" width="672" height="338" class="alignnone size-full wp-image-315" />

RunConfig.bat requires special permissions on Windows and needs to be run as SYSTEM in some cases. The script may work successfully as an Administrator on some systems, but require SYSTEM on others.

If you are using Configuration Manager to run the script, you should be right as Configuration Manager runs as SYSTEM. If you are testing then you can use tools such as <a href="https://technet.microsoft.com/en-us/sysinternals/pxexec.aspx">PSEXEC</a> to start an interactive command line session as system.

Links:
<ul>
<li>
<a href="https://blogs.technet.microsoft.com/upgradeanalytics/">Upgrade Analytics Blog</a>
</li>
<li>
<a href="https://docs.microsoft.com/en-us/sccm/core/clients/manage/upgrade/upgrade-analytics">Upgrade Analytics in Configiuration Manager</a>
</li>
<li>
<a href="https://technet.microsoft.com/en-us/itpro/windows/deploy/upgrade-analytics-get-started">Getting Started with Upgrade Analytics</a>
</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Internal Server Error 500 When Downloading Content - Configuration Manager Client</title>
      <link>https://docs.microsoft.com/archive/blogs/scott/internal-server-error-500-when-downloading-content-configuration-manager-client</link>
      <pubDate>Tue, 06 Sep 2016 22:10:48 GMT</pubDate>
      <dc:creator><![CDATA[Scott Breen MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scott/?p=66</guid>
      <description><![CDATA[Have you got Configuration Manager clients returning Internal Server Error 500 when trying to...]]></description>
      <content:encoded><![CDATA[Have you got Configuration Manager clients returning Internal Server Error 500 when trying to download content? This is the post for you. When I first came across this error I spent a lot of time looking for a complicated solution, only to find out it was a really simple fix. I hope this article helps save you some time!
<ul>
 	<li><a href="#symptoms">Symptoms</a></li>
 	<li><a href="#solution">Solution</a></li>
 	<li><a href="#success">What does success look like?</a></li>
</ul>
<a name="symptoms"></a><h2>Symptoms</h2>
Below are some of the symptoms you might notice if this issue is occurring.
<h3>Software Center</h3>
In Software Center, the application installation state is stuck at Downloading (0% complete).
<img width="499" height="289" class="alignnone wp-image-105 size-full" alt="Software Center - Downloading" src="https://msdnshared.blob.core.windows.net/media/2016/09/downloading2-3.png" />
<h3>ContentTransferManager.log</h3>
ContentTransferManager.log just seems to be stuck attempting to download the manifest.
<blockquote>Persisted locations for CTM job {E5D716EA-7216-4E4A-A2D9-B25EF52BB692}:
(LOCAL) https://BLCM02.breenlab.scottbreen.tech/SMS_DP_SMSPKG$/Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd.1 ContentTransferManager 6/09/2016 2:58:11 PM 2264 (0x08D8)
CTM job {E5D716EA-7216-4E4A-A2D9-B25EF52BB692} (corresponding DTS job {8785F7F7-4545-4546-9143-7A796B9C4B4F}) started download from 'https://BLCM02.breenlab.scottbreen.tech/SMS_DP_SMSPKG$/Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd.1' for full content download. ContentTransferManager 6/09/2016 2:58:11 PM 2264 (0x08D8)
CTM job {E5D716EA-7216-4E4A-A2D9-B25EF52BB692} entered phase <span style="color:red">CCM_DOWNLOADSTATUS_DOWNLOADING_MANIFEST</span> ContentTransferManager 6/09/2016 2:58:11 PM 2932 (0x0B74)
CTM job {E5D716EA-7216-4E4A-A2D9-B25EF52BB692} entered phase <span style="color:red">CCM_DOWNLOADSTATUS_DOWNLOADING_MANIFEST</span> ContentTransferManager 6/09/2016 2:58:44 PM 3032 (0x0BD8)</blockquote>
<h3>DataTransferService.log</h3>
DataTransferService.log is where you will notice Internal Server Error with a HTTP code of 500.
<blockquote>[CCMHTTP] ERROR: URL=https://BLCM02.breenlab.scottbreen.tech:80/SMS_DP_SMSPKG$/Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd.1, Port=80, Options=224, Code=0, Text=CCM_E_BAD_HTTP_STATUS_CODE DataTransferService 6/09/2016 3:08:36 PM 4708 (0x1264)
<span style="color:red">[CCMHTTP] ERROR INFO: StatusCode=500 StatusText=Internal Server Error</span> DataTransferService 6/09/2016 3:08:36 PM 4708 (0x1264)
Raising event:
instance of CCM_CcmHttp_Status
{
ClientID = "GUID:ba70a6eb-cbad-4d5c-a827-322c53dca678";
DateTime = "20160906050836.637000+000";
HostName = "BLCM02.breenlab.scottbreen.tech";
HRESULT = "0x87d0027e";
ProcessID = 1664;
StatusCode = 500;
ThreadID = 4708;
};
DataTransferService 6/09/2016 3:08:36 PM 4708 (0x1264)
Successfully submitted event to the Status Agent. DataTransferService 6/09/2016 3:08:36 PM 4708 (0x1264)
Successfully queued event on HTTP/HTTPS failure for server 'BLCM02.breenlab.scottbreen.tech'. DataTransferService 6/09/2016 3:08:36 PM 4708 (0x1264)
<span style="color:red">Error sending DAV request. HTTP code 500, status 'Internal Server Error'</span> DataTransferService 6/09/2016 3:08:36 PM 4708 (0x1264)
GetDirectoryList_HTTP('<span style="color:purple">https://BLCM02.breenlab.scottbreen.tech:80/SMS_DP_SMSPKG$/Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd.1</span>') failed with code 0x87d0027e. DataTransferService 6/09/2016 3:08:36 PM 4708 (0x1264)
Job {8785F7F7-4545-4546-9143-7A796B9C4B4F} reverted impersonation. DataTransferService 6/09/2016 3:08:36 PM 4708 (0x1264)
Non-recoverable error retrieving manifest (0x87d0027e). DataTransferService 6/09/2016 3:08:36 PM 4708 (0x1264)</blockquote>
<h2>Internet Explorer Test</h2>
Whenever I have a problem with content, I like to try and access the URL directly from a browser to see if it's a problem with the client, access in general or the server. If you are using HTTPS this may not be as easy as you would need to provide a certificate to authenticate. But if you are using HTTP, you can copy the content path from DataTransferService.log (highlighted in purple above) and paste it into Internet Explorer to see the results. In this case, I also received Internal Server Error.
<img src="https://msdnshared.blob.core.windows.net/media/2016/09/ieerror.png" alt="Internal Server Error" width="462" height="231" class="alignnone size-full wp-image-165" />
<a name="solution"></a><h2>Solution</h2>
The fix.... "ISAPI Extensions" component was missing. ISAPI Extensions is listed as a required by the Distribution Point role according to TechNet. For a full list of requirements, see <a href="https://technet.microsoft.com/en-us/library/mt752493.aspx">https://technet.microsoft.com/en-us/library/mt752493.aspx</a>.

To check if the component is missing from your server you can use Server Manager or PowerShell.
<h3>Check with PowerShell</h3>
To check with PowerShell, run this command:
<code>Get-WindowsFeature Web-ISAPI-Ext</code>

If ISAPI Extensions is installed:
<img width="692" height="82" class="alignnone size-full wp-image-116" alt="PowerShell ISAPI not installed" src="https://msdnshared.blob.core.windows.net/media/2016/09/PowerShellAvailable.png" />

If ISAPI Extensions is not installed:<img width="700" height="84" class="alignnone size-full wp-image-125" alt="PowerShell - ISAPI Extensions Installed" src="https://msdnshared.blob.core.windows.net/media/2016/09/PowerShellInstalled.png" />
<h3>Check with Server Manager</h3>
To check with Server Manager:
<ul>
 	<li>Open <b>Server Manager</b></li>
 	<li>Select <b>Local Server</b></li>
 	<li>Scroll down to <b>Roles and Features</b></li>
 	<li>Look for <b>ISAPI Extensions</b> in the list (or search for it)</li>
</ul>
If ISAPI Extensions is missing, it's not installed.

If ISAPI Extensions is installed, you will see it listed.
<img width="806" height="165" class="alignnone size-full wp-image-135" alt="Server Manager - ISAPI Extensions Installed" src="https://msdnshared.blob.core.windows.net/media/2016/09/ServerManager-Installed.png" />
<h3>Install with PowerShell</h3>
To install with PowerShell, run this command:
<code>Install-WindowsFeature Web-ISAPI-Ext</code>

<img width="754" height="103" class="alignnone size-full wp-image-145" alt="PowerShell - Install ISAPI Extensions" src="https://msdnshared.blob.core.windows.net/media/2016/09/PowerShellInstall.png" />
<h3>Install with Server Manager</h3>
To install with Server Manager:
<ul>
 	<li>Open <b>Server Manager</b>, select <b>Manage</b> &gt; <b>Add Roles and Features</b>.</li>
 	<li>Click Next until you get to the Server Roles screen.</li>
 	<li>Expand <b>Web Server</b> &gt; <b>Web Server</b> &gt; <b>Application Development</b>.</li>
 	<li>Tick <b>ISAPI Extensions</b></li>
</ul>
<img width="300" height="212" class="alignnone wp-image-106 size-medium" alt="Tick IASPI Extensions" src="https://msdnshared.blob.core.windows.net/media/2016/09/MissingRole-300x212.png" />
<a name="success"></a><h2>What does success look like?</h2>
After the ISAPI Extensions role service is installed, you can test the client is resolved by restarting the <b>SMS Agent Host</b> and checking that the content is now downloaded. Otherwise, clients will eventually retry the installation if they haven't already "failed".
<h3>Software Center</h3>
The application is now installed!
<img width="753" height="54" class="alignnone size-full wp-image-155" alt="Software Center - Installed" src="https://msdnshared.blob.core.windows.net/media/2016/09/ProgramInstalled.png" />
<h3>ContentTransferManager.log</h3>
<blockquote>Attempting to send Location Request for PackageID='Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd' ContentTransferManager 6/09/2016 3:23:09 PM 4040 (0x0FC8)
Created and Sent Location Request '{77FFB2DB-3F27-4788-9762-471FD512EE4F}' for package Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd ContentTransferManager 6/09/2016 3:23:09 PM 4040 (0x0FC8)
CTM job {2B609C31-EE94-4FC6-BBE2-9D450E78A155} entered phase CCM_DOWNLOADSTATUS_WAITING_CONTENTLOCATIONS ContentTransferManager 6/09/2016 3:23:09 PM 4040 (0x0FC8)
Queued location request '{77FFB2DB-3F27-4788-9762-471FD512EE4F}' for CTM job '{2B609C31-EE94-4FC6-BBE2-9D450E78A155}'. ContentTransferManager 6/09/2016 3:23:09 PM 4040 (0x0FC8)
Persisted locations for CTM job {2B609C31-EE94-4FC6-BBE2-9D450E78A155}:
(LOCAL) https://BLCM02.breenlab.scottbreen.tech/SMS_DP_SMSPKG$/Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd.1 ContentTransferManager 6/09/2016 3:23:09 PM 5416 (0x1528)
CTM job {2B609C31-EE94-4FC6-BBE2-9D450E78A155} (corresponding DTS job {3A9324A4-74F8-4063-B2D7-74EFE9FA2510}) started download from 'https://BLCM02.breenlab.scottbreen.tech/SMS_DP_SMSPKG$/Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd.1' for full content download. ContentTransferManager 6/09/2016 3:23:09 PM 5416 (0x1528)
CTM job {2B609C31-EE94-4FC6-BBE2-9D450E78A155} entered phase CCM_DOWNLOADSTATUS_DOWNLOADING_MANIFEST ContentTransferManager 6/09/2016 3:23:09 PM 6004 (0x1774)
CTM job {2B609C31-EE94-4FC6-BBE2-9D450E78A155} entered phase CCM_DOWNLOADSTATUS_PROCESSING_MANIFEST ContentTransferManager 6/09/2016 3:23:10 PM 5920 (0x1720)
CTM job {2B609C31-EE94-4FC6-BBE2-9D450E78A155} entered phase CCM_DOWNLOADSTATUS_PREPARING_DOWNLOAD ContentTransferManager 6/09/2016 3:23:10 PM 5916 (0x171C)
CTM job {2B609C31-EE94-4FC6-BBE2-9D450E78A155} entered phase CCM_DOWNLOADSTATUS_DOWNLOADING_DATA ContentTransferManager 6/09/2016 3:23:10 PM 4844 (0x12EC)
CTM job {2B609C31-EE94-4FC6-BBE2-9D450E78A155} successfully processed download completion. ContentTransferManager 6/09/2016 3:23:10 PM 5924 (0x1724)</blockquote>
<h3>DataTransferManager.log</h3>
<blockquote>Restarted DTS job '{8785F7F7-4545-4546-9143-7A796B9C4B4F}' in state DownloadingManifest. DataTransferService 6/09/2016 3:22:30 PM 4908 (0x132C)
DTSJob {8785F7F7-4545-4546-9143-7A796B9C4B4F} in state 'DownloadingManifest'. DataTransferService 6/09/2016 3:22:30 PM 4908 (0x132C)
Job {8785F7F7-4545-4546-9143-7A796B9C4B4F} impersonating logged on user. DataTransferService 6/09/2016 3:22:30 PM 4844 (0x12EC)
Detecting if client is on the internet. DataTransferService 6/09/2016 3:22:30 PM 4844 (0x12EC)
Client is not set to use any webproxy. DataTransferService 6/09/2016 3:22:30 PM 4844 (0x12EC)
GET: Host=BLCM02.breenlab.scottbreen.tech, Path=/SMS_DP_SMSPKG$/Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd.1, Port=80, Protocol=http, Flags=645, Options=224 DataTransferService 6/09/2016 3:22:30 PM 4844 (0x12EC)
Resending the request by setting the credentials on getting an unauthorized response. DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
Setting autologon policy for integrated auth request. DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
Raising event:
instance of CCM_CcmHttp_Status
{
ClientID = "GUID:ba70a6eb-cbad-4d5c-a827-322c53dca678";
DateTime = "20160906052231.543000+000";
HostName = "BLCM02.breenlab.scottbreen.tech";
HRESULT = "0x00000000";
ProcessID = 5880;
StatusCode = 0;
ThreadID = 4844;
};
DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
Status Agent hasn't been initialized yet. Attempting to create pending event. DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
Raising pending event:
instance of CCM_CcmHttp_Status
{
ClientID = "GUID:ba70a6eb-cbad-4d5c-a827-322c53dca678";
DateTime = "20160906052231.543000+000";
HostName = "BLCM02.breenlab.scottbreen.tech";
HRESULT = "0x00000000";
ProcessID = 5880;
StatusCode = 0;
ThreadID = 4844;
};
DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
Successfully submitted pending event to WMI. DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
UpdateURLWithTransportSettings(): OLD URL - https://blcm02.breenlab.scottbreen.tech/SMS_DP_SMSPKG$/sccm?/Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd.1/ DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
UpdateURLWithTransportSettings(): NEW URL - https://blcm02.breenlab.scottbreen.tech:80/SMS_DP_SMSPKG$/sccm?/Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd.1/ DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
UpdateURLWithTransportSettings(): OLD URL - https://blcm02.breenlab.scottbreen.tech/SMS_DP_SMSPKG$/Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd.1/sccm?/NM34_x64.exe DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
UpdateURLWithTransportSettings(): NEW URL - https://blcm02.breenlab.scottbreen.tech:80/SMS_DP_SMSPKG$/Content_fe46ebd4-7c29-4f8c-b8b6-c166e0e84ebd.1/sccm?/NM34_x64.exe DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
Job {8785F7F7-4545-4546-9143-7A796B9C4B4F} reverted impersonation. DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
DTSJob {8785F7F7-4545-4546-9143-7A796B9C4B4F} in state 'RetrievedManifest'. DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
DTSJob {8785F7F7-4545-4546-9143-7A796B9C4B4F} in state 'PendingDownload'. DataTransferService 6/09/2016 3:22:31 PM 5916 (0x171C)
DTSFlag is 0x0040050e DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
Exclude file list: DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
Using branch cache option DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
DTSJob {8785F7F7-4545-4546-9143-7A796B9C4B4F} in state 'DownloadingData'. DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
DTSJob {8785F7F7-4545-4546-9143-7A796B9C4B4F} in state 'RetrievedData'. DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
DTSJob {8785F7F7-4545-4546-9143-7A796B9C4B4F} successfully completed download. DataTransferService 6/09/2016 3:22:31 PM 4844 (0x12EC)
DTSJob {8785F7F7-4545-4546-9143-7A796B9C4B4F} in state 'NotifiedComplete'. DataTransferService 6/09/2016 3:22:31 PM 5916 (0x171C)</blockquote>]]></content:encoded>
    </item>
    <item>
      <title>Scheduling Software Updates to Run on Patch Tuesday</title>
      <link>https://docs.microsoft.com/archive/blogs/scott/scheduling-software-updates-to-run-on-patch-tuesday</link>
      <pubDate>Wed, 10 Aug 2016 22:00:30 GMT</pubDate>
      <dc:creator><![CDATA[Scott Breen MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scott/?p=35</guid>
      <description><![CDATA[Software updates in Configuration Manager provides a set of tools and resources that can help manage...]]></description>
      <content:encoded><![CDATA[Software updates in Configuration Manager provides a set of tools and resources that can help manage the complex task of tracking and applying software updates to computers in the enterprise. An effective software update management process is necessary to maintain operational efficiency, overcome security issues, and maintain the stability of the network infrastructure. Effective Software Update Management requires constant attention.

Configuration Manager supports the configuration of automatic deployment rules (ADRs). When the rule runs, the software updates that meet specified criteria (for example, all security software updates released in the last week) are added to a software update group, the content files for the software updates are downloaded and copied to Distribution Points, and the software updates are deployed to client computers in the target collection. If necessary, the automatic deployment rules can be configured with the appropriate rules, but not executed on a schedule. Figure 1 demonstrates the high-level flow of an automated deployment rule.

<img src="https://msdnshared.blob.core.windows.net/media/2016/08/ADR.png" alt="ADR" width="601" height="226" class="alignnone wp-image-55 size-full" />
<b>Figure 1: Automated Deployment Rule</b>
<h2>ADR Configuration</h2>
Automated deployment rules can be configured to:
<ul>
 	<li>Not execute automatically;</li>
 	<li>Execute after Software Update Point synchronisation, or;</li>
 	<li>Execute on a schedule.</li>
</ul>
If configured to run on a schedule, the recurrence options are:
<ul>
 	<li>None;</li>
 	<li>Every 1 or more months on a specific day;</li>
 	<li>Every 1 or more months on the last day of the month</li>
 	<li>Every 1 or more months on the first, second, third or fourth or last specific day of a month;</li>
</ul>
<h2>The Problem</h2>
A number of organisations like to schedule their patching cycle to align with Microsoft Patch Tuesday so that updates are deployed as quickly as possible after release and on a predictable cycle. In addition, some organisations like to schedule updates in advance to provide the business with predictable maintenance windows and schedules.

“Patch Tuesday” is a well-known term in the industry that refers to the second Tuesday of every month (USA time) when Microsoft releases patches. Patches are usually released at 10am Los Angeles time. (PDT).

For organisations with a time zone that has week days that closely align with USA time, this is as simple as setting the recurrence pattern of the ADR to the second Tuesday of each month and creating deployments with deadlines based on the number of days since the rule was executed. However, for organisations in time zones with a week day ahead of the USA, this presents a challenge. On the face of it, it would seem that setting the recurrence pattern to the second Wednesday of each month would solve the problem, but the second Wednesday of each month does not always follow the second Tuesday of a month.

Given the release time, time zones with a time zone offset of +7 will find it impossible to use the recurrence pattern to schedule based on patch Tuesday and other time zones will struggle to find the most appropriate time in the day to schedule the update.

Based on daylight savings times in 2016, Table 1 demonstrates the variation in time across the year between time in Los Angeles, USA and Brisbane or Sydney in Australia.
<table width="100%">
<tbody>
<tr>
<th>Month</th>
<th>Los Angeles Time Zone</th>
<th>Brisbane Time AEST</th>
<th>Sydney Time AEST/ADEST</th>
</tr>
<tr>
<td>Jan</td>
<td>PST</td>
<td>4am</td>
<td>3am</td>
</tr>
<tr>
<td>Feb</td>
<td>PST</td>
<td>4am</td>
<td>3am</td>
</tr>
<tr>
<td>Mar</td>
<td>PST/PDT</td>
<td>3am/4am</td>
<td>2am/3am</td>
</tr>
<tr>
<td>Apr</td>
<td>PDT</td>
<td>3am</td>
<td>3am</td>
</tr>
<tr>
<td>May</td>
<td>PDT</td>
<td>3am</td>
<td>3am</td>
</tr>
<tr>
<td>Jun</td>
<td>PDT</td>
<td>3am</td>
<td>3am</td>
</tr>
<tr>
<td>Jul</td>
<td>PDT</td>
<td>3am</td>
<td>3am</td>
</tr>
<tr>
<td>Aug</td>
<td>PDT</td>
<td>3am</td>
<td>3am</td>
</tr>
<tr>
<td>Sep</td>
<td>PDT</td>
<td>3am</td>
<td>3am</td>
</tr>
<tr>
<td>Oct</td>
<td>PDT</td>
<td>3am</td>
<td>2am</td>
</tr>
<tr>
<td>Nov</td>
<td>PST</td>
<td>4am</td>
<td>3am</td>
</tr>
<tr>
<td>Dec</td>
<td>PST</td>
<td>4am</td>
<td>3am</td>
</tr>
</tbody>
</table>
<b>Table 1: Patch Tuesday Release Time by Time Zone in 2016</b>
<h2>The Solution</h2>
The potential solutions for this are:
<ul>
 	<li>Manually execute the ADR each month on the appropriate day;</li>
 	<li>Run the ADR on an arbitrary date that is always after the second Tuesday of each month based on USA time and use manually updated maintenance windows to control update installation over the year;</li>
 	<li>Schedule a script to detect patch Tuesday and execute the ADR.</li>
</ul>
Using a script is the only method that allows for complete automation and consistent deployment based on the patch cycle and patching based on particular days. The added benefit of using a script is the ability to add extra automation such as sending a summary email.

I've written a sample script that provides this functionality. The script is designed to run daily and checks the local time on the server against PDT and if the day is Patch Tuesday PDT time it will execute the following steps:
<ul>
 	<li>Check if WSUS sync has completed since patch Tuesday;
<ul>
 	<li>If not, execute and monitor a WSUS sync;</li>
</ul>
</li>
 	<li>Execute the defined Automated Deployment Rule and monitor its execution;</li>
 	<li>Modify the name of the ADR;</li>
 	<li>Modify and generate new deployments for each deployment group (based off the CSV);</li>
 	<li>Sends an email with the schedule and update details.</li>
</ul>
An example of the generated email message is displayed in Figure 2. The schedule section links to the “Software Updates Deployment – Deployment States” report for the collection listed and the relevant software update deployment.

<img src="https://msdnshared.blob.core.windows.net/media/2016/08/SoftwareUpdates-Email-300x237.png" alt="Software Updates Email" width="300" height="237" class="alignnone size-medium wp-image-45" />
<b>Figure 2: Software Updates Email</b>
<h2>Download</h2>
For more information about the script and how to set it up, head over to <a href="https://gallery.technet.microsoft.com/PowerShell-Script-to-d90742dc">TechNet Gallery</a>.]]></content:encoded>
    </item>
    <item>
      <title>Hello!</title>
      <link>https://docs.microsoft.com/archive/blogs/scott/hello</link>
      <pubDate>Wed, 27 Jul 2016 06:24:37 GMT</pubDate>
      <dc:creator><![CDATA[Scott Breen MSFT]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/scott/?p=1</guid>
      <description><![CDATA[My name is Scott Breen and this is my new blog, Microsoft TechNet Blogs style. I'm not one to talk...]]></description>
      <content:encoded><![CDATA[My name is Scott Breen and this is my new blog, Microsoft TechNet Blogs style. I'm not one to talk about myself, so this will be brief. Ok, that's it!
<ul>
 	<li>About me: <a href="https://about.me/scottbreen">https://about.me/scottbreen</a></li>
 	<li>Previous Blog: <a href="https://blog.scottbreen.tech">https://blog.scottbreen.tech</a></li>
</ul>]]></content:encoded>
    </item>
  </channel>
</rss>