<?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>Ryan Catlin’s Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/ryancatlin/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/ryancatlin/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:50:14 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Reporting Services server instance is blank</title>
      <link>https://docs.microsoft.com/archive/blogs/ryancatlin/reporting-services-server-instance-is-blank</link>
      <pubDate>Wed, 26 Jul 2017 14:08:04 GMT</pubDate>
      <dc:creator><![CDATA[Ryan.Catlin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/ryancatlin/?p=215</guid>
      <description><![CDATA[You might be trying to install the Reporting Services Point on a SCCM site role server, and find...]]></description>
      <content:encoded><![CDATA[You might be trying to install the Reporting Services Point on a SCCM site role server, and find that the Reporting Services server instance is blank.  It will not populate for you and there is nothing listed in the drop down list.

&nbsp;

The fix is to install the role on the SQL server.]]></content:encoded>
    </item>
    <item>
      <title>Remote Configuration failed on WSUS Server</title>
      <link>https://docs.microsoft.com/archive/blogs/ryancatlin/remote-configuration-failed-on-wsus-server</link>
      <pubDate>Wed, 05 Jul 2017 19:50:39 GMT</pubDate>
      <dc:creator><![CDATA[Ryan.Catlin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/ryancatlin/?p=195</guid>
      <description><![CDATA[I got these error messages in the WCM.log when I was trying to sync the Software Updates in...]]></description>
      <content:encoded><![CDATA[I got these error messages in the WCM.log when I was trying to sync the Software Updates in SCCM:

<strong><em>     Microsoft.UpdateServices.Administration. Error = 0x80131701</em></strong>
<strong><em>     Remote configuration failed on WSUS Server</em></strong>

I have the SUP role and WSUS installed on a remote site server, but the Primary server was unable to locate the WSUS database located on a remote SQL server.

<strong><em>     DB Server not detected for SUP ServerName from SCF File. skipping.</em></strong>

&nbsp;

The fix:

Run this PowerShell command elevated on the Primary server and then restart the SMS_Executive service.

<strong>     Install-WindowsFeature -Name UpdateServices-ui</strong>

It installs the necessary WSUS files on the Primary server without installing the full WSUS console.

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>Remote Software Update Point fails to install</title>
      <link>https://docs.microsoft.com/archive/blogs/ryancatlin/remote-software-update-point-fails-to-install</link>
      <pubDate>Wed, 05 Jul 2017 19:09:39 GMT</pubDate>
      <dc:creator><![CDATA[Ryan.Catlin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/ryancatlin/?p=175</guid>
      <description><![CDATA[I was trying to install the Software Update Point site role on a remote computer, but it failed to...]]></description>
      <content:encoded><![CDATA[I was trying to install the Software Update Point site role on a remote computer, but it failed to install.  After reviewing the logs I saw this error message:

&nbsp;

On the SUPSetup.log file located on the Software Update Point server E:\SMS\Logs:
<h5><em>     CTool::RegisterManagedBinary: Failed to register E:\SMS\bin\x64\wsusmsp.dll with .Net Fx 2.0</em></h5>
&nbsp;

The fix was to:
<ol>
 	<li>Remove the SUP role from the server</li>
 	<li>Add the DWORD (OnlyUseLatestCLR = 1) to the SUP server registry key located at HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\.NETFRAMEWORK</li>
 	<li>Install the SUP role again</li>
 	<li>Once the installation was successful, I removed the registry key.</li>
</ol>
&nbsp;

I hope that helps.]]></content:encoded>
    </item>
    <item>
      <title>PowerShell Script to list WSUS Content Path</title>
      <link>https://docs.microsoft.com/archive/blogs/ryancatlin/powershell-script-to-list-wsus-content-path</link>
      <pubDate>Tue, 25 Apr 2017 13:56:53 GMT</pubDate>
      <dc:creator><![CDATA[Ryan.Catlin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/ryancatlin/?p=165</guid>
      <description><![CDATA[Here is a script I used to get the physical path of the WSUS content folder for the SUP...]]></description>
      <content:encoded><![CDATA[Here is a script I used to get the physical path of the WSUS content folder for the SUP servers.

$ServerNames = @("ServerSUP01","ServerSUP02")
ForEach ($Server in $ServerNames){
Invoke-Command -ComputerName $Server -Scriptblock {
$ComputerName = $env:COMPUTERNAME
[VOID][Reflection.Assembly]::LoadWithPartialName("Microsoft.Web.Administration")
$ServerManager = New-Object Microsoft.Web.Administration.ServerManager
$Site = $ServerManager.Sites | Where-Object {$_.Name -eq 'WSUS Administration'}
$Path = $Site.Applications | Where-Object {$_.Path -like '*'}
$vPath = $Path.VirtualDirectories | Where-Object {$_.Path -like '/Content'}
$ComputerName + " = " + $vPath.RawAttributes.physicalPath
  }
} 

Note: Permissions will need to be set in order to run a Scriptblock on your servers in order for this to work.]]></content:encoded>
    </item>
    <item>
      <title>WSUS EULA IIS (Error 401.3)</title>
      <link>https://docs.microsoft.com/archive/blogs/ryancatlin/wsus-eula-iis-error-401-3</link>
      <pubDate>Tue, 25 Apr 2017 13:29:36 GMT</pubDate>
      <dc:creator><![CDATA[Ryan.Catlin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/ryancatlin/?p=155</guid>
      <description><![CDATA[My current customer has a few SCCM Primary servers with two SUP's each.  The two SUP's share a...]]></description>
      <content:encoded><![CDATA[My current customer has a few SCCM Primary servers with two SUP's each.  The two SUP's share a single SUSDB located on the SQL server, and also sharing a single WSUSContent folder located on SUP02.

The SCCM clients that are reporting to the SUP01 server are failing to install patches that require a EULA.  Remember, the EULA is located in the WSUSContent folder stored on the SUP02 server, so it must be a permissions issue.

I wrote up a quick PowerShell script to identify which servers are not able to access the EULA.

$ServerNames = @("ServerSUP01","ServerSUP02")
$EULA = "Content/23/14D19C27B28CC3990260D7191F6E0FF6C7483623.txt"
ForEach($Server in $ServerNames) {
Try{
$url = "https://"+$Server+":8530/"+$EULA
$Status = (Invoke-WebRequest $url).statuscode
If($Status = '200'){Write-Host $Server "= Success" -ForegroundColor "Green"}
}
Catch {
Write-Host $Server "= Failed to find EULA" -foregroundcolor "Red"}
}

I made sure that the SUP01 server had rights to the WSUSContent folder on SUP01 and that it was able to access the files, but the clients were still getting the 401 3 error in the IIS logs.  Digging into the issue more, I found that the Anonymous Authentication method on the SUP01 server did not have rights to access the SUP02 Content folder to read the EULA.  To resolve the issue, we needed to change the account from IUSER to Application Pool Identity aka: Network Service.
<ol>
 	<li>Open IIS and navigate to the WSUS Administration web server, select the Content folder and click on the <strong>Authentication</strong> icon.  Note: you can do this at the root of the WSUS web page if you want.</li>
 	<li>Right click on <strong>Anonymous Authentication</strong> and select <strong>Edit</strong></li>
 	<li>Select <strong>Application pool identity</strong> and then OK.</li>
 	<li>Restart the WSUS webpage</li>
</ol>
Now all the SCCM clients that are reporting to the SUP01 server should be now able to install the patches that require a EULA.

&nbsp;]]></content:encoded>
    </item>
    <item>
      <title>PowerShell: Search multiple files for text string</title>
      <link>https://docs.microsoft.com/archive/blogs/ryancatlin/powershell-search-multiple-files-for-text-string</link>
      <pubDate>Fri, 21 Nov 2014 08:28:00 GMT</pubDate>
      <dc:creator><![CDATA[Ryan.Catlin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/ryancatlin/2014/11/21/powershell-search-multiple-files-for-text-string/</guid>
      <description><![CDATA[My client had an issue where a script built years ago, deployed by SCCM, had changed the registry...]]></description>
      <content:encoded><![CDATA[My client had an issue where a script built years ago, deployed by SCCM, had changed the registry settings of IE on some computers.  However, the registry setting was causing new problems and the script needed to be removed from deployment.  The client didn't know which script was causing the issue, so I used this PowerShell script to scan the SMSPKGD$ folder in search of the registry key in the files.

$Extensions = @("bat","cmd","vbs","ps1")

$FoundText = @()

ForEach ($Ext in $Extensions) {

$Text = Select-String <a>\\ServerName\SMSPKGD$\*\*.$Ext</a> -Pattern "Text you are looking for"

$FoundText += $Text }

If ($FoundText) {$FoundText | Out-GridView}

Within a minute I had found the script that was changing the registry and disabled the advertisement.]]></content:encoded>
    </item>
    <item>
      <title>PowerShell to extract text from a string</title>
      <link>https://docs.microsoft.com/archive/blogs/ryancatlin/powershell-to-extract-text-from-a-string</link>
      <pubDate>Tue, 04 Nov 2014 10:34:00 GMT</pubDate>
      <dc:creator><![CDATA[Ryan.Catlin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/ryancatlin/2014/11/04/powershell-to-extract-text-from-a-string/</guid>
      <description><![CDATA[I needed a quick and easy way to extract the GUID number from an event log description for a System...]]></description>
      <content:encoded><![CDATA[<p>I needed a quick and easy way to extract the GUID number from an event log description for a System Center Orchestrator RunBook I was creating for a customer.&nbsp;</p>
<p>$EventID = &#39;The following &quot;GUID:1234-567-890&quot; is causing problems.&nbsp; Please fix&#39;</p>
<p>$Text = $EventID -split &#39; &#39;</p>
<p>$GUID = $Text -like &#39;&quot;GUID:*&quot;&#39; -replace &#39;&quot;&#39;,&#39;&#39;</p>
<p>It&#39;s a quick and easy way to extract the text I needed from a string and pass it along.</p>
<p>*note: Those are single quotes around double quotes.</p>
<p></p>
<p></p>]]></content:encoded>
    </item>
    <item>
      <title>WSUS Installation failed the update could not be found</title>
      <link>https://docs.microsoft.com/archive/blogs/ryancatlin/wsus-installation-failed-the-update-could-not-be-found</link>
      <pubDate>Mon, 15 Sep 2014 10:46:08 GMT</pubDate>
      <dc:creator><![CDATA[Ryan.Catlin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/ryancatlin/2014/09/15/wsus-installation-failed-the-update-could-not-be-found/</guid>
      <description><![CDATA[I&nbsp;recently tried to install WSUS on a Server 2008 R2 box which was to be used&nbsp;for...]]></description>
      <content:encoded><![CDATA[<p>I&nbsp;recently tried to install WSUS on a Server 2008 R2 box which was to be used&nbsp;for Configuration Manager 2012, but the installation failed with the message: The update could not be found.&nbsp;</p>
<p>The problem was that the server didn&#39;t have access to the Internet because it needed a proxy server configured in the Internet Options \ Connections \ LAN tab.&nbsp; Once I put in the proxy server, I tried the installation again.&nbsp; Failed!&nbsp;</p>
<p>The server&nbsp;now has Internet access, but continued to get the same error message.&nbsp;</p>
<p>Solution: I then deleted the Windows Update key in the registry HKLM\Software\Policies\Microsoft\Windows\Windows Update and restarted the Windows Update service.&nbsp;</p>
<p>Once I&nbsp;tried to install&nbsp;the WSUS role again, it was successful.</p>
<p></p>]]></content:encoded>
    </item>
    <item>
      <title>Sending with winhttp failed; 80072ee7</title>
      <link>https://docs.microsoft.com/archive/blogs/ryancatlin/sending-with-winhttp-failed-80072ee7</link>
      <pubDate>Thu, 04 Sep 2014 11:51:00 GMT</pubDate>
      <dc:creator><![CDATA[Ryan.Catlin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/ryancatlin/2014/09/04/sending-with-winhttp-failed-80072ee7/</guid>
      <description><![CDATA[I was trying to deploy a Windows 7 image to a&nbsp;VM in my clients lab and came across these errors...]]></description>
      <content:encoded><![CDATA[<p>I was trying to deploy a Windows 7 image to a&nbsp;VM in my clients lab and came across these errors in the SMSTS.log file.&nbsp;</p>
<p>Sending with winhttp failed; 80072ee7</p>
<p>Failed to get information for MP: https:// Server.FQDN. 80072ee7</p>
<p>After reviewing the log file and doing research on the errors,&nbsp;it was determined the error code 80072ee7 is DNS related.&nbsp;</p>
<p>It just so happends that my client&#39;s lab does not have DHCP enabled, so I have to manually enter the IP address, subnet mask, gateway,&nbsp;DNS server and&nbsp;DNS suffix of the network.&nbsp; After doing so and hitting OK, the process would immediately fail.&nbsp;&nbsp;</p>
<p>To resolve the problem, I had to hit F8 after putting in the network information, but before hitting &#39;OK&#39;.&nbsp; In the cmd box, I typed in <strong>IPCONFIG /REGISTERDNS</strong> at the prompt.&nbsp;</p>
<p>(*Note: You&nbsp;must have the &quot;Enable&nbsp;command support (Testing Only)&quot; option in the boot image properties under the customization tab for the F8 to work).&nbsp;</p>
<p>I waited a couple seconds for it to register with the DNS server, then closed the cmd box down and hit OK on the wizard to move forward.&nbsp;</p>
<p>Presto.&nbsp;The wizard continued on and loaded the OS.&nbsp;</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/telligent.evolution.components.attachments/01/10241/00/00/03/63/71/57/ErrorMessage.jpg" original-url="https://blogs.technet.com/cfs-filesystemfile.ashx/__key/telligent-evolution-components-attachments/01-10241-00-00-03-63-71-57/ErrorMessage.jpg">ErrorMessage.jpg</a></p>]]></content:encoded>
    </item>
    <item>
      <title>SCCM Report for Windows 7 Deployment</title>
      <link>https://docs.microsoft.com/archive/blogs/ryancatlin/sccm-report-for-windows-7-deployment</link>
      <pubDate>Mon, 16 Jun 2014 09:09:45 GMT</pubDate>
      <dc:creator><![CDATA[Ryan.Catlin]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/ryancatlin/2014/06/16/sccm-report-for-windows-7-deployment/</guid>
      <description><![CDATA[I built this SCCM&nbsp;2007 report&nbsp;for our daily Windows 7 deployment progress.&nbsp; It shows...]]></description>
      <content:encoded><![CDATA[<p>I built this SCCM&nbsp;2007 report&nbsp;for our daily Windows 7 deployment progress.&nbsp; It shows a simple count of both Windows XP and 7, Advertisement Name, Distribution State, Count of clients in each state.&nbsp; Further down in the report it shows computer name, model, OS, User Name, Last Boot Time, Last Status Message Name and time.&nbsp; It was very helpful monitoring each nights status.</p>
<p>Code:</p>
<p>DECLARE @ADVID<br />varchar(20) SET @ADVID = &#39;PRI0001&#39;<br />DECLARE @COLLID<br />varchar(20) SET @COLLID = &#39;PRI0001&#39;<br />DECLARE @Total INT<br />DECLARE @FailedPct FLOAT<br />DECLARE @StartTime DATETIME<br />DECLARE @EndTime DATETIME<br />SELECT <br />OS.Caption0 &#39;Operating System&#39;,<br />COUNT(OS.Caption0)<br />from v_GS_Operating_System OS<br />Join v_FullCollectionMembership FCM on OS.ResourceID = FCM.ResourceID<br />Join v_Collection COL on FCM.CollectionID = COL.CollectionID<br />WHERE COL.CollectionID = @COLLID<br />GROUP BY OS.Caption0<br />SELECT <br />AdvName.AdvertisementName, AdvState.LastStateName, AdvState.number AS &#39;Number of clients with this Status&#39;<br />FROM v_ClientAdvertisementStatus AdvTotal, v_Advertisement AdvName,<br />(SELECT a.AdvertisementID,a.LastStateName, count(*) as &#39;number&#39; <br />FROM v_ClientAdvertisementStatus a, v_AdvertisementStatusInformation b<br />WHERE a.LastStatusMessageID = b.MessageID <br />GROUP BY a.AdvertisementID, a.LastStateName<br />) AS AdvState<br />WHERE <br />AdvState.AdvertisementID = @ADVID<br />AND AdvState.AdvertisementID = AdvTotal.AdvertisementID<br />AND AdvState.AdvertisementID = AdvName.AdvertisementID<br />GROUP BY AdvState.AdvertisementID, AdvName.AdvertisementName, AdvState.LastStateName, AdvState.number<br />ORDER BY AdvName.AdvertisementName</p>
<p>SELECT @Total = COUNT(DISTINCT ResourceID) FROM v_ClientAdvertisementStatus <br />WHERE AdvertisementID = @ADVID<br />IF @Total &gt; 0<br />&nbsp;SELECT @FailedPct = 100.0 * COUNT(DISTINCT ResourceID)/@Total FROM v_ClientAdvertisementStatus <br />&nbsp;WHERE AdvertisementID = @ADVID AND LastState = 11<br />ELSE<br />&nbsp;SET @FailedPct = 0<br />SELECT @StartTime = MIN(ExecutionTime) FROM v_TaskExecutionStatus<br />WHERE LastStatusMessageID = 11140 AND Step = 0 AND AdvertisementID = @ADVID<br />SELECT @EndTime = MAX(ExecutionTime) FROM v_TaskExecutionStatus<br />WHERE AdvertisementID= @ADVID<br />SELECT<br />&nbsp;ts.Name AS TaskSequenceName,<br />&nbsp;ts.Description,<br />&nbsp;DATEADD(ss, @__timezoneoffset, @StartTime) AS StartTime,<br />&nbsp;DATEADD(ss, @__timezoneoffset, @EndTime) AS EndTime,<br />&nbsp;@Total AS TSRPT_C002,<br />&nbsp;ROUND(@FailedPct, 1) AS C011<br />FROM v_TaskSequencePackage ts<br />INNER JOIN v_Advertisement ad ON ad.PackageID = ts.PackageID<br />WHERE ad.AdvertisementID = @ADVID</p>
<p>Select SYS.Netbios_Name0 &#39;Computer Name&#39;<br />,CS.Model0 &#39;Model&#39;<br />,OS.Caption0 &#39;Operating System&#39;<br />,U.Full_User_Name0 &#39;User Name&#39;<br />,OS.LastBootUpTime0<br />,STAT.LastStatusMessageIDName<br />,STAT.LastStatusTime<br />,STAT.AdvertisementID<br />From v_R_System SYS<br />INNER Join v_GS_Operating_System OS on SYS.ResourceID = OS.ResourceID<br />INNER Join v_FullCollectionMembership FCM on OS.ResourceID = FCM.ResourceID<br />INNER Join v_Collection COL on FCM.CollectionID = COL.CollectionID<br />INNER Join v_R_User U on SYS.User_Name0 = U.User_Name0<br />INNER Join v_GS_COMPUTER_SYSTEM CS on SYS.ResourceID = CS.ResourceID<br />INNER Join v_ClientAdvertisementStatus STAT on SYS.ResourceID = STAT.ResourceID<br />WHERE COL.CollectionID = @COLLID<br />AND STAT.AdvertisementID = @ADVID<br />ORDER BY OS.Caption0 DESC</p>
<p></p>]]></content:encoded>
    </item>
  </channel>
</rss>