{"id":1105,"date":"2014-01-10T17:30:26","date_gmt":"2014-01-10T17:30:26","guid":{"rendered":"http:\/\/www.autoitconsulting.com\/site\/?p=1105"},"modified":"2025-07-26T12:51:46","modified_gmt":"2025-07-26T11:51:46","slug":"mass-redistribute-packages-configmgr-2012","status":"publish","type":"post","link":"https:\/\/www.autoitconsulting.com\/site\/deployment\/mass-redistribute-packages-configmgr-2012\/","title":{"rendered":"Mass Redistribute Packages in ConfigMgr 2012"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Overview<\/h2>\n\n\n\n<p>Recently I came across an issue with System Center Configuration Manager (ConfigMgr) 2012 where a large number of packages and applications had failed to be distributed to a new Distribution Point (DP). There were many thousands of packages in the environment and a few hundred were showing in the error state in the console. Unfortunately, once packages get into this state then they don\u2019t fix themselves as it appears that the ConfigMgr validation schedule only reports that there was a problem distributing &#8211; it doesn\u2019t actually trigger a redistribution.<\/p>\n\n\n\n<p>To fix the problem you have to identify each package that has a problem and go into its properties. Then you need to select the DPs you want to redistribute to and click Redistribute.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter\"><a href=\"\/site\/wp-content\/uploads\/2013\/12\/CM2012_Console_Redistribute.png\"><img loading=\"lazy\" decoding=\"async\" width=\"598\" height=\"380\" src=\"\/site\/wp-content\/uploads\/2013\/12\/CM2012_Console_Redistribute.png\" alt=\"CM2012 Console Redistribute\" class=\"wp-image-1157\" srcset=\"https:\/\/www.autoitconsulting.com\/site\/wp-content\/uploads\/2013\/12\/CM2012_Console_Redistribute.png 598w, https:\/\/www.autoitconsulting.com\/site\/wp-content\/uploads\/2013\/12\/CM2012_Console_Redistribute-300x191.png 300w\" sizes=\"auto, (max-width: 598px) 100vw, 598px\" \/><\/a><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>You have to to do this&nbsp;<strong>for each package<\/strong> that has a problem taking care to only redistribute to the DPs that have have failures. In an environment with a few hundred problem packages with thousands of DPs this is completely impractical. What we need is a script that can do the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Identify packages that were unsuccessfully distributed.<\/li>\n\n\n\n<li>Mass redistribute packages that are in the error state.<\/li>\n\n\n\n<li>Only redistribute packages to DPs that need it to avoid needless processing and network traffic.<\/li>\n\n\n\n<li>Optionally, limit the process to a specific DP. For example, a newly built DP was incorrectly configured, has subsequently been fixed but all the packages assigned to it have entered an error state.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Redistribute Script<\/h2>\n\n\n\n<p>The VBScript is listed below and can also be downloaded here:&nbsp;<a href=\"\/site\/wp-content\/uploads\/2013\/12\/CM2012_DP_Redist.zip\">CM2012_DP_Redist.zip<\/a><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">VB<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>' ****************************************************************************\n'\n' Copyright (c) 2013, Jonathan Bennett \/ AutoIt Consulting Ltd\n' All rights reserved.\n' http:\/\/www.autoitconsulting.com\n'\n' THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND\n' ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n' WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n' DISCLAIMED. IN NO EVENT SHALL AUTOIT CONSULTING LTD BE LIABLE FOR ANY\n' DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n' (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n' LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n' ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n' (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS\n' SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n'\n' ****************************************************************************\n'\n' Purpose:   Checks all packages assigned to a DP and redistributes any with errors.\n' \n' Usage:     cscript.exe CM2012_DP_Redist.vbs\n' \n' Version:   1.0.0\n' \n' History:\n' 1.0.0\t20-Nov-2013 - Jonathan Bennett \n'       First version.\n'\n' ****************************************************************************\n\n' ****************************************************************************\n' Global constant and variable declarations\n' ****************************************************************************\n\nOption Explicit\n\n' CHANGEABLE VARIABLES\n\n' The name of the CAS\/Primary site server\nPublic Const CASServerName = \"CASSERVERNAME\"\n\n' Which DP to refresh packages for - leave this blank to check ALL DPs\nPublic Const DPServerName = \"DPSERVERNAME\"\n\n' END OF CHANGABLE VARIABLES\n\n\nPublic Const wbemFlagReturnImmediately = 16\nPublic Const wbemFlagForwardOnly = 32\n\nDim oSWbemServices\n\n' ****************************************************************************\n' End declarations\n' ****************************************************************************\n\n' ****************************************************************************\n' Main routine\n' ****************************************************************************\n\n' Connect to CM 2012 (CAS)\nIf ConnectServer(CASServerName) = False Then\n\tWScript.Echo \"Unable to connect to server.\"\n\tWScript.Quit 1\nEnd If\n\n\n' Find all packages with a bad status\nDim queryString\nDim dpStatuses, dpStatus, serverName, packageID, packageDPs, packageDP, nalPath\n\nIf DPServerName = \"\" Then\n\tqueryString = \"SELECT Name,PackageID,MessageState FROM SMS_DistributionDPStatus WHERE MessageState > 2\"\nElse\n\tqueryString = \"SELECT Name,PackageID,MessageState FROM SMS_DistributionDPStatus WHERE Name LIKE '%\" &amp; DPServerName &amp; \"%' AND MessageState > 2\"\nEnd If\n\nSet dpStatuses = oSWbemServices.ExecQuery(queryString,, wbemFlagForwardOnly+wbemFlagReturnImmediately)\nFor Each dpStatus in dpStatuses\n\tserverName = UCase(dpStatus.Name)\n\tpackageID = dpStatus.PackageID\n\n\tqueryString = \"SELECT * FROM SMS_DistributionPoint WHERE PackageID = '\" &amp; packageID &amp; \"'\"\n\tSet packageDPs = oSWbemServices.ExecQuery(queryString,, wbemFlagForwardOnly+wbemFlagReturnImmediately)\n\tFor Each packageDP in packageDPs\n\t\tnalPath = UCase(packageDP.ServerNalPath)\n\n\t\tIf InStr(1, nalPath, serverName) > 0 Then\n\t\t\tWScript.Echo \"Redistributing \" &amp; packageID &amp; \" on \" &amp; serverName &amp; \"...\"\n\t\t\tpackageDP.RefreshNow = True\n\t\t\tOn Error Resume Next\n\t\t\tpackageDP.Put_\n\t\t\tOn Error Goto 0\n\t\tEnd If\n\n\tNext\nNext\n\n\nWScript.Quit 0\n\n\n' ****************************************************************************\n' Functions\n' ****************************************************************************\n\nFunction ConnectServer(ByVal serverName)\n\tIf serverName = \"\" Then serverName = \".\"\n\t\n\tDim oSWbemLocator : Set oSWbemLocator = CreateObject(\"WbemScripting.SWbemLocator\")\n\t\n\tOn Error Resume Next\n\tSet oSWbemServices = oSWbemLocator.ConnectServer(serverName, \"root\\sms\")\n\tIf Err.Number &lt;> 0 Then\n\t\tConnectServer = False\n\t\tExit Function\n\tEnd If\n\tOn Error Goto 0\n\t\n\tDim ProviderLoc : Set ProviderLoc = oSWbemServices.ExecQuery(\"Select * FROM SMS_ProviderLocation WHERE ProviderForLocalSite='True'\")\n\n\tDim Location\n\tFor Each Location In ProviderLoc\n\t\tSet oSWbemServices = oSWbemLocator.ConnectServer(Location.Machine, \"root\\sms\\site_\" + Location.SiteCode)\n\t\tExit For\n\tNext\n\tConnectServer = True\nEnd Function<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #6A9955\">&#39; ****************************************************************************<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; Copyright (c) 2013, Jonathan Bennett \/ AutoIt Consulting Ltd<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; All rights reserved.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; http:\/\/www.autoitconsulting.com<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; DISCLAIMED. IN NO EVENT SHALL AUTOIT CONSULTING LTD BE LIABLE FOR ANY<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; ****************************************************************************<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; Purpose:   Checks all packages assigned to a DP and redistributes any with errors.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; Usage:     cscript.exe CM2012_DP_Redist.vbs<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; Version:   1.0.0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; History:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; 1.0.0\t20-Nov-2013 - Jonathan Bennett <\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39;       First version.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; ****************************************************************************<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line cbp-see-more-line \"><span style=\"color: #6A9955\">&#39; ****************************************************************************<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; Global constant and variable declarations<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; ****************************************************************************<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Option Explicit<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; CHANGEABLE VARIABLES<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; The name of the CAS\/Primary site server<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Public Const <\/span><span style=\"color: #9CDCFE\">CASServerName<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;CASSERVERNAME&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; Which DP to refresh packages for - leave this blank to check ALL DPs<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Public Const <\/span><span style=\"color: #9CDCFE\">DPServerName<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;DPSERVERNAME&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; END OF CHANGABLE VARIABLES<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Public Const <\/span><span style=\"color: #9CDCFE\">wbemFlagReturnImmediately<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #B5CEA8\">16<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Public Const <\/span><span style=\"color: #9CDCFE\">wbemFlagForwardOnly<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #B5CEA8\">32<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Dim<\/span><span style=\"color: #9CDCFE\"> oSWbemServices<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; ****************************************************************************<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; End declarations<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; ****************************************************************************<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; ****************************************************************************<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; Main routine<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; ****************************************************************************<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; Connect to CM 2012 (CAS)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">If<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">ConnectServer<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">CASServerName<\/span><span style=\"color: #D4D4D4\">) =<\/span><span style=\"color: #569CD6\"> False<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">Then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\tWScript.Echo <\/span><span style=\"color: #CE9178\">&quot;Unable to connect to server.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\tWScript.Quit <\/span><span style=\"color: #B5CEA8\">1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">End If<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; Find all packages with a bad status<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Dim<\/span><span style=\"color: #9CDCFE\"> queryString<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Dim<\/span><span style=\"color: #9CDCFE\"> dpStatuses, dpStatus<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #9CDCFE\"> serverName<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #9CDCFE\"> packageID<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #9CDCFE\"> packageDPs<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #9CDCFE\"> packageDP<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #9CDCFE\"> nalPath<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">If<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">DPServerName<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;&quot;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">Then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #4EC9B0\">queryString<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;SELECT Name,PackageID,MessageState FROM SMS_DistributionDPStatus WHERE MessageState &gt; 2&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">Else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #4EC9B0\">queryString<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;SELECT Name,PackageID,MessageState FROM SMS_DistributionDPStatus WHERE Name LIKE &#39;%&quot;<\/span><span style=\"color: #D4D4D4\"> &amp;<\/span><span style=\"color: #9CDCFE\"> DPServerName<\/span><span style=\"color: #D4D4D4\"> &amp; <\/span><span style=\"color: #CE9178\">&quot;%&#39; AND MessageState &gt; 2&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">End If<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Set <\/span><span style=\"color: #9CDCFE\">dpStatuses<\/span><span style=\"color: #D4D4D4\"> = oSWbemServices.<\/span><span style=\"color: #DCDCAA\">ExecQuery<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #4EC9B0\">queryString<\/span><span style=\"color: #D4D4D4\">,,<\/span><span style=\"color: #9CDCFE\"> wbemFlagForwardOnly<\/span><span style=\"color: #D4D4D4\">+<\/span><span style=\"color: #9CDCFE\">wbemFlagReturnImmediately<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">For<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">Each<\/span><span style=\"color: #D4D4D4\"> dpStatus in dpStatuses<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #9CDCFE\">serverName<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">UCase<\/span><span style=\"color: #D4D4D4\">(dpStatus.<\/span><span style=\"color: #9CDCFE\">Name<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #9CDCFE\">packageID<\/span><span style=\"color: #D4D4D4\"> = dpStatus.PackageID<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #4EC9B0\">queryString<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;SELECT * FROM SMS_DistributionPoint WHERE PackageID = &#39;&quot;<\/span><span style=\"color: #D4D4D4\"> &amp;<\/span><span style=\"color: #9CDCFE\"> packageID<\/span><span style=\"color: #D4D4D4\"> &amp; <\/span><span style=\"color: #CE9178\">&quot;&#39;&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #569CD6\">Set <\/span><span style=\"color: #9CDCFE\">packageDPs<\/span><span style=\"color: #D4D4D4\"> = oSWbemServices.<\/span><span style=\"color: #DCDCAA\">ExecQuery<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #4EC9B0\">queryString<\/span><span style=\"color: #D4D4D4\">,,<\/span><span style=\"color: #9CDCFE\"> wbemFlagForwardOnly<\/span><span style=\"color: #D4D4D4\">+<\/span><span style=\"color: #9CDCFE\">wbemFlagReturnImmediately<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">For<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">Each<\/span><span style=\"color: #D4D4D4\"> packageDP in packageDPs<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #9CDCFE\">nalPath<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">UCase<\/span><span style=\"color: #D4D4D4\">(packageDP.<\/span><span style=\"color: #9CDCFE\">ServerNalPath<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">If<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">InStr<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #B5CEA8\">1<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #9CDCFE\"> nalPath<\/span><span style=\"color: #D4D4D4\">,<\/span><span style=\"color: #9CDCFE\"> serverName<\/span><span style=\"color: #D4D4D4\">) &gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">Then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\tWScript.Echo <\/span><span style=\"color: #CE9178\">&quot;Redistributing &quot;<\/span><span style=\"color: #D4D4D4\"> &amp;<\/span><span style=\"color: #9CDCFE\"> packageID<\/span><span style=\"color: #D4D4D4\"> &amp; <\/span><span style=\"color: #CE9178\">&quot; on &quot;<\/span><span style=\"color: #D4D4D4\"> &amp;<\/span><span style=\"color: #9CDCFE\"> serverName<\/span><span style=\"color: #D4D4D4\"> &amp; <\/span><span style=\"color: #CE9178\">&quot;...&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\tpackageDP.<\/span><span style=\"color: #9CDCFE\">RefreshNow<\/span><span style=\"color: #D4D4D4\"> =<\/span><span style=\"color: #569CD6\"> True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\t<\/span><span style=\"color: #569CD6\">On Error Resume Next<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\tpackageDP.Put_<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t\t<\/span><span style=\"color: #569CD6\">On Error Goto <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">End If<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">Next<\/span><\/span>\n<span class=\"line\"><span style=\"color: #C586C0\">Next<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">WScript.Quit <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; ****************************************************************************<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; Functions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6A9955\">&#39; ****************************************************************************<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Function<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #DCDCAA\">ConnectServer<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">ByVal serverName<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">If<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">serverName<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;&quot;<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">Then<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #9CDCFE\">serverName<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;.&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #569CD6\">Dim<\/span><span style=\"color: #9CDCFE\"> oSWbemLocator <\/span><span style=\"color: #D4D4D4\">:<\/span><span style=\"color: #569CD6\"> Set <\/span><span style=\"color: #9CDCFE\">oSWbemLocator<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #DCDCAA\">CreateObject<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;WbemScripting.SWbemLocator&quot;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #569CD6\">On Error Resume Next<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #569CD6\">Set <\/span><span style=\"color: #9CDCFE\">oSWbemServices<\/span><span style=\"color: #D4D4D4\"> = oSWbemLocator.<\/span><span style=\"color: #DCDCAA\">ConnectServer<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #9CDCFE\">serverName<\/span><span style=\"color: #D4D4D4\">, <\/span><span style=\"color: #CE9178\">&quot;root\\sms&quot;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">If<\/span><span style=\"color: #D4D4D4\"> Err.<\/span><span style=\"color: #9CDCFE\">Number<\/span><span style=\"color: #D4D4D4\"> &lt;&gt; <\/span><span style=\"color: #B5CEA8\">0<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">Then<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #9CDCFE\">ConnectServer<\/span><span style=\"color: #D4D4D4\"> =<\/span><span style=\"color: #569CD6\"> False<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">Exit Function<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">End If<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #569CD6\">On Error Goto <\/span><span style=\"color: #B5CEA8\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #569CD6\">Dim<\/span><span style=\"color: #9CDCFE\"> ProviderLoc <\/span><span style=\"color: #D4D4D4\">:<\/span><span style=\"color: #569CD6\"> Set <\/span><span style=\"color: #9CDCFE\">ProviderLoc<\/span><span style=\"color: #D4D4D4\"> = oSWbemServices.<\/span><span style=\"color: #DCDCAA\">ExecQuery<\/span><span style=\"color: #D4D4D4\">(<\/span><span style=\"color: #CE9178\">&quot;Select * FROM SMS_ProviderLocation WHERE ProviderForLocalSite=&#39;True&#39;&quot;<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #569CD6\">Dim<\/span><span style=\"color: #9CDCFE\"> Location<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">For<\/span><span style=\"color: #D4D4D4\"> <\/span><span style=\"color: #C586C0\">Each<\/span><span style=\"color: #D4D4D4\"> Location In ProviderLoc<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #569CD6\">Set <\/span><span style=\"color: #9CDCFE\">oSWbemServices<\/span><span style=\"color: #D4D4D4\"> = oSWbemLocator.<\/span><span style=\"color: #DCDCAA\">ConnectServer<\/span><span style=\"color: #D4D4D4\">(Location.Machine, <\/span><span style=\"color: #CE9178\">&quot;root\\sms\\site_&quot;<\/span><span style=\"color: #D4D4D4\"> + Location.<\/span><span style=\"color: #9CDCFE\">SiteCode<\/span><span style=\"color: #D4D4D4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t\t<\/span><span style=\"color: #C586C0\">Exit For<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #C586C0\">Next<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D4D4D4\">\t<\/span><span style=\"color: #9CDCFE\">ConnectServer<\/span><span style=\"color: #D4D4D4\"> =<\/span><span style=\"color: #569CD6\"> True<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">End Function<\/span><\/span><\/code><\/pre><div class=\"cbp-see-more-container\" data-see-more-collapse-string=\"Collapse\" data-see-more-string=\"Expand\" style=\"display:flex;flex-direction:column;align-items:center;width:100%;font-size:12px;line-height:1;position:relative;padding-top:4px;margin-bottom:-16px;height:32px\"><div style=\"background-color:#1e1e1e;height:50%;position:absolute;top:0;left:0;right:0\" aria-hidden=\"true\"><\/div><span role=\"button\" tabindex=\"0\" class=\"cbp-see-more-simple-btn cbp-see-more-simple-btn-hover\" style=\"color:#fafafa;background-color:#373737;padding:6px 14px;cursor:default;position:relative;border-radius:6px\">Expand<\/span><\/div><\/div>\n\n\n\n<p>At the top of the script you will want to change the CASServerName and DPServerName values to match your environment. If DPServerName is left blank then all DPs will be in scope, if a server is specified then redistributions are limited to just that DP. For example, my CAS is called server04 and I want to trigger packages on all DPs so I would use:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#1E1E1E;font-style:italic;color:#D4D4D4\"><span style=\"border-bottom:1px solid rgba(234, 191, 191, 0.2)\">VB<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#D4D4D4;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>Public Const CASServerName = \"server04\"\nPublic Const DPServerName = \"\"<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki dark-plus\" style=\"background-color: #1E1E1E\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #569CD6\">Public Const <\/span><span style=\"color: #9CDCFE\">CASServerName<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;server04&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #569CD6\">Public Const <\/span><span style=\"color: #9CDCFE\">DPServerName<\/span><span style=\"color: #D4D4D4\"> = <\/span><span style=\"color: #CE9178\">&quot;&quot;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">How does the script work?<\/h2>\n\n\n\n<p>Well you need to understand that there are two main WMI classes that we need to work with:<\/p>\n\n\n\n<p><a title=\"SMS_DistributionDPStatus\" href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/hh948366.aspx\" target=\"_blank\" rel=\"noopener\">SMS_DistributionDPStatus<\/a><\/p>\n\n\n\n<p>This class details the status of a package on a DP. The main properties we are interested in are <strong>Name<\/strong> (the DP server name),&nbsp;<strong>PackageID<\/strong> and <strong>MessageState<\/strong>. The MSDN article for this class defines a MessageState of 3 to indicate an error. While testing the results where that this is not correct and the correct value is 4. Just in case, our script will assume anything greater than 2 to indicate an error.<\/p>\n\n\n\n<p><a title=\"SMS_DistributionPoint\" href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/hh949735.aspx\" target=\"_blank\" rel=\"noopener\">SMS_DistributionPoint&nbsp;<\/a><\/p>\n\n\n\n<p>This class represents an instance of a package assigned to a DP. It provides the <strong>RefreshNow<\/strong> method which triggers the redistribution of the specific package on the specific DP.<\/p>\n\n\n\n<p>It might be surprising to learn that there is an instance of each of these classes <strong>for each package for each DP<\/strong>. So if you have 100 packages and 50 DPs then there are 5000 SMS_DistributionDPStatus and 5000 SMS_DistributionPoint objects. This is useful to understand if you are using a WMI browser when troubleshooting.<\/p>\n\n\n\n<p>The script follows this process:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Gets a collection of all SMS_DistributionDPStatus objects where the MessageState is greater than 2.<\/li>\n\n\n\n<li>Extracts the PackageID and DP server name for each of these objects.<\/li>\n\n\n\n<li>Gets a collection of all SMS_DistributionPoint objects where the PackageID and DP match from our SMS_DistributionDPStatus collection.<\/li>\n\n\n\n<li>Triggers the SMS_DistributionPoint.RefreshNow method for each member of the collection.<\/li>\n<\/ol>\n\n\n\n<p>After running the script any packages that have failed will be redistributed and the progress can be seen in the normal way in the ConfigMgr console.<\/p>\n\n\n\n<p>As the script only redistributes failed packages it is safe to rerun as often as required.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Overview Recently I came across an issue with System Center Configuration Manager (ConfigMgr) 2012 where a large number of packages and applications had failed to be distributed to a new Distribution Point (DP). There were many thousands of packages in the environment and a few hundred were showing in the error state in the console. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":100234,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,12,11],"tags":[59,62,91,68,65],"class_list":["post-1105","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deployment","category-development","category-scripting","tag-configmgr","tag-deployment","tag-mecm","tag-sccm","tag-scripting"],"_links":{"self":[{"href":"https:\/\/www.autoitconsulting.com\/site\/wp-json\/wp\/v2\/posts\/1105","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.autoitconsulting.com\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.autoitconsulting.com\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.autoitconsulting.com\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.autoitconsulting.com\/site\/wp-json\/wp\/v2\/comments?post=1105"}],"version-history":[{"count":12,"href":"https:\/\/www.autoitconsulting.com\/site\/wp-json\/wp\/v2\/posts\/1105\/revisions"}],"predecessor-version":[{"id":100112,"href":"https:\/\/www.autoitconsulting.com\/site\/wp-json\/wp\/v2\/posts\/1105\/revisions\/100112"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.autoitconsulting.com\/site\/wp-json\/wp\/v2\/media\/100234"}],"wp:attachment":[{"href":"https:\/\/www.autoitconsulting.com\/site\/wp-json\/wp\/v2\/media?parent=1105"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.autoitconsulting.com\/site\/wp-json\/wp\/v2\/categories?post=1105"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.autoitconsulting.com\/site\/wp-json\/wp\/v2\/tags?post=1105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}