<?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>Damian Wiese</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/dawiese/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/dawiese/feed.xml</link>
    <description>SharePoint PFE</description>
    <lastBuildDate>Fri, 28 Sep 2018 15:43:43 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Removing Orphaned Sites: PowerShell Replacement for stsadm -o deletesite</title>
      <link>https://docs.microsoft.com/archive/blogs/dawiese/powershell-replacement-for-stsadm-o-deletesite</link>
      <pubDate>Fri, 28 Sep 2018 08:37:59 GMT</pubDate>
      <dc:creator><![CDATA[Damian Wiese]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/dawiese/?p=1635</guid>
      <description><![CDATA[When running Test-SPContentDatabase as part of a SharePoint upgrade you may receive the following...]]></description>
      <content:encoded><![CDATA[When running Test-SPContentDatabase as part of a SharePoint upgrade you may receive the following message:

<a href="https://msdnshared.blob.core.windows.net/media/2018/09/SiteOrphan.png"><img src="https://msdnshared.blob.core.windows.net/media/2018/09/SiteOrphan.png" alt="" width="1955" height="379" class="alignnone size-full wp-image-1645" /></a>

<em>Database contains a site (Id = [GUID], Uri [/]) whose url is already used by a different site, in database (Id = [GUID], name = [WSS_Content]), in the same web application. consider deleting one of the sites which have conflicting urls.</em>

With site orphans you typically have a few options, including:
<ol>
 	<li>Test and mount the content database to a different web application. This is often the case if you have multiple web applications in the source farm, each with a root site collection.</li>
 	<li>Rename the site collection in the source farm so that the URL doesn't conflict, and both can coexist in the new SharePoint farm.</li>
 	<li>Delete one of the site collections from the source farm before attempting a database attach upgrade to the new SharePoint farm.  This can often be accomplished using Remove-SPSite. However, what do you do if the site to be deleted is also orphaned in the source farm and Remove-SPSite fails?</li>
</ol>
<h2>Deleting Orphaned Site Collections</h2>
In the past we would use STSADM -o deletesite to force remove the orphaned site from the content database. While STSADM is still an option, even in SharePoint 2016, I prefer to use PowerShell, it fits better into my other processes and is easier to log and document. The PowerShell solution is to use the <a href="https://docs.microsoft.com/en-us/dotnet/api/microsoft.sharepoint.administration.spcontentdatabase.forcedeletesite?view=sharepoint-server#Microsoft_SharePoint_Administration_SPContentDatabase_ForceDeleteSite_System_Guid_System_Boolean_System_Boolean_">SPContentDatabase.ForceDeleteSite() method</a>,  shown here:

[code language="powershell"]

# Note: The ForceDeleteSite method, with the parameters shown here, 
# bypasses the site collection recycle bin. 

# After running this, the only way to restore the site collection is to
# restore the content database from a previous backup

Add-PSSnapin Microsoft.SharePoint.Powershell

$contentDatabaseContainingOrphan = &quot;WSS_Content_DB01&quot;
$oprhanedSiteID = &quot;75173058-dbb0-49b2-aaf9-f3f3bad1cd8c&quot;

$contentDatabase = Get-SPContentDatabase -Identity $contentDatabaseContainingOrphan
$contentDatabase.ForceDeleteSite($oprhanedSiteID, $false, $false)

[/code]

As noted in the comments this will permanently remove the site collection from the content database without asking for confirmation. Ensure that you have a recent database backup before attempting to run this.
<h2>For more information on resolving other Test-SPContentDatabase findings please see:</h2>
<strong>Post Upgrade Cleanup – Missing Server Side Dependencies</strong>
<a href="https://blogs.technet.microsoft.com/dawiese/2017/05/09/post-upgrade-cleanup-missing-server-side-dependencies/">https://blogs.technet.microsoft.com/dawiese/2017/05/09/post-upgrade-cleanup-missing-server-side-dependencies/</a>

<strong>Test-SPContentDatabase False Positive for Classic Mode Database when using AD Groups as Site Collection Administrators</strong>
<a href="https://blogs.technet.microsoft.com/dawiese/2018/09/27/test-spcontentdatabase-false-positive-for-classic-mode-database/">https://blogs.technet.microsoft.com/dawiese/2018/09/27/test-spcontentdatabase-false-positive-for-classic-mode-database/</a>]]></content:encoded>
    </item>
    <item>
      <title>Test-SPContentDatabase False Positive for Classic Mode Database when using AD Groups as Site Collection Administrators</title>
      <link>https://docs.microsoft.com/archive/blogs/dawiese/test-spcontentdatabase-false-positive-for-classic-mode-database</link>
      <pubDate>Thu, 27 Sep 2018 21:04:30 GMT</pubDate>
      <dc:creator><![CDATA[Damian Wiese]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/dawiese/?p=1615</guid>
      <description><![CDATA[When running Test-SPContentDatabase in SharePoint 2013 or SharePoint 2016 you may receive the...]]></description>
      <content:encoded><![CDATA[When running Test-SPContentDatabase in SharePoint 2013 or SharePoint 2016 you may receive the following message as one of the results, even if the database is from a claims authentication web application:

<a href="https://msdnshared.blob.core.windows.net/media/2018/09/ClassicModeError.png"><img src="https://msdnshared.blob.core.windows.net/media/2018/09/ClassicModeError.png" alt="" width="1956" height="384" class="alignnone size-full wp-image-1625" /></a>

<em>Message: The &lt;WebApplicationName&gt; web application is configured with claims authentication mode however the content database you are trying to attach is intended to be used against a windows classic authentication mode . </em>

During a SharePoint 2010 to SharePoint 2013 upgrade this was pretty normal and indicated that you would need to convert the users from classic to claims authentication during the migration process. However, when upgrading from SharePoint 2013 to SharePoint 2016, this is less expected as most SharePoint 2013 web applications are already in claims mode for authentication. Looking at the details of the test will clarify why you may receive this message even when the source database is from a claims enabled SharePoint 2013 web application.
<h2>The Test</h2>
This test runs a SQL query that returns the first site collection administrator for the first site collection in a content database and checks to see if the site collection administrator login name starts with an identity claims prefix for a user's identity (i:). If it sees a string starting with anything other than "i:" it will report that that the database is intended to be used with a classic mode web application.

To understand why you may see a false positive when using an AD group as site collection administrator it's necessary to understand how claims encoding in SharePoint works. For a primer, please see Victor Wilen's <a href="https://www.wictorwilen.se/Post/How-Claims-encoding-works-in-SharePoint-2010.aspx">excellent explanation</a>. In summary:
<ul>
 	<li>Individual Users are in the format: <em>i:0#.w|&lt;Domain\UserName&gt;</em></li>
 	<li>Groups are in the format <em>c:0+.w|&lt;GROUP SID&gt;</em></li>
</ul>
Therefore, because this test uses "i:" as the comparison, using an AD group as a site collection administrator may cause a false positive.

If you want to replicate the test and see the specific reason the test triggered, you can run this SQL query against a non-production copy of the content database in question. Before doing so please review the Read Operations Addendum in the article <a href="https://support.microsoft.com/en-us/help/841057/support-for-changes-to-the-databases-that-are-used-by-office-server-pr">Support for changes to the databases that are used by Office server products and by Windows SharePoint Services.</a>

[code language="sql"]
 SELECT TOP 1 [tp_SiteID],[tp_Login] FROM [UserInfo] WITH (NOLOCK) WHERE tp_IsActive = 1 AND tp_SiteAdmin = 1 AND tp_Deleted = 0 and tp_Login not LIKE 'i:%'
[/code]

<h2>Resolution</h2>
First, determine if you are using AD groups as site collection administrators. You can use this <a href="https://github.com/DamianWiese/PowerShell/blob/master/SharePointServer/DataCollection/Get-xADGroupSiteOwners.ps1">PowerShell sample</a> to scan a content database, web application, or the whole farm for site collections that are using AD groups as either the primary or secondary owner. Please note that this script will only return valid results for claims enabled web applications.

If you find any groups that are site collection administrators, consider changing them to individual users and re-running Test-SPContentDatabase. Alternatively, if you are confident that the database is from a claims authentication web application in the source farm you may consider ignoring the result and continuing with the upgrade progress.
<h2>For more information on resolving other Test-SPContentDatabase findings please see:</h2>
<strong>Post Upgrade Cleanup – Missing Server Side Dependencies</strong>
<a href="https://For more information on resolving other Test-SPContentDatabase findings please see:  Post Upgrade Cleanup – Missing Server Side Dependencies https://blogs.technet.microsoft.com/dawiese/2017/05/09/post-upgrade-cleanup-missing-server-side-dependencies/  Removing Orphaned Sites: PowerShell Replacement for stsadm -o deletesite https://blogs.technet.microsoft.com/dawiese/2018/09/28/powershell-replacement-for-stsadm-o-deletesite/">https://blogs.technet.microsoft.com/dawiese/2017/05/09/post-upgrade-cleanup-missing-server-side-dependencies/</a>

<strong>Removing Orphaned Sites: PowerShell Replacement for stsadm -o deletesite</strong>
<a href="https://blogs.technet.microsoft.com/dawiese/2018/09/28/powershell-replacement-for-stsadm-o-deletesite/">https://blogs.technet.microsoft.com/dawiese/2018/09/28/powershell-replacement-for-stsadm-o-deletesite/</a>
<h2>Resources</h2>
<strong>Test-SPContentDatabase</strong>
<a href="https://docs.microsoft.com/en-us/powershell/module/sharepoint-server/test-spcontentdatabase?view=sharepoint-ps">https://docs.microsoft.com/en-us/powershell/module/sharepoint-server/test-spcontentdatabase?view=sharepoint-ps</a>

<strong>Test-SPContentDatabase Classic to Claims Conversion</strong>
<a href="https://thesharepointfarm.com/2014/11/test-spcontentdatabase-classic-to-claims-conversion/">https://thesharepointfarm.com/2014/11/test-spcontentdatabase-classic-to-claims-conversion/</a>

<strong>List all site collections AD groups as Owner or SecondaryContact is an AD group</strong>
<a href="https://github.com/DamianWiese/PowerShell/blob/master/SharePointServer/DataCollection/Get-xADGroupSiteOwners.ps1">https://github.com/DamianWiese/PowerShell/blob/master/SharePointServer/DataCollection/Get-xADGroupSiteOwners.ps1</a>

<strong>How Claims encoding works in SharePoint 2010</strong>
<a href="https://www.wictorwilen.se/Post/How-Claims-encoding-works-in-SharePoint-2010.aspx">https://www.wictorwilen.se/Post/How-Claims-encoding-works-in-SharePoint-2010.aspx</a>]]></content:encoded>
    </item>
    <item>
      <title>Workflow Manager Supportability with SharePoint Server</title>
      <link>https://docs.microsoft.com/archive/blogs/dawiese/workflow-manager-supportability-with-sharepoint-server</link>
      <pubDate>Wed, 15 Nov 2017 13:25:36 GMT</pubDate>
      <dc:creator><![CDATA[Damian Wiese]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/dawiese/?p=1585</guid>
      <description><![CDATA[Update: Workflow Manager CU5 was released on January 16th, 2018 and adds support for TLS protocol...]]></description>
      <content:encoded><![CDATA[Update: <a href="https://support.microsoft.com/en-us/help/4055730/description-of-the-cumulative-update-5-for-workflow-manager-1-0">Workflow Manager CU5</a> was released on January 16th, 2018 and a<span>dds support for TLS protocol versions 1.1 and 1.2. See <a href="https://support.microsoft.com/en-us/help/4077554/add-support-for-tls-1-1-and-tls-1-2-on-service-bus-for-windows-server">KB4077554</a> for more information.</span>

This post is intended to aggregate supportability information for Workflow Manager when used with a SharePoint Server farm and should not be viewed as an authoritative source. Please see the resources below for links to the official documentation.

&nbsp;
<table style="border-collapse: collapse" border="0">
<tbody valign="top">
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: none;width:400px"></td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: none;width:200px"><strong>WFM CU3</strong></td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: none;width:200px"><strong>WFM CU4</strong></td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: none;width:200px"><strong>WFM CU5</strong></td>
</tr>
<tr style="background: #d9d9d9">
<td colspan="4" valign="middle" style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt"><strong>SQL Server Version</strong></td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt"><span style="width: 0px;overflow: hidden;line-height: 0" class="mce_SELRES_start">﻿</span>SQL Server 2008R2</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #f7caac;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">SQL Server 2012</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">SQL Server 2014</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #f7caac;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">SQL Server 2016</td>
<td style="background: #f7caac;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr style="background: #d9d9d9">
<td colspan="4" style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt"><strong>SQL Server High Availability</strong></td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">SQL AlwaysOn Availability Groups (synchronous-commit)</td>
<td style="background: #f7caac;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">SQL AlwaysOn Failover Cluster Instances</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">SQL Mirroring (synchronous-commit)<sup>1</sup></td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr style="background: #d9d9d9">
<td colspan="4" style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt"><strong>SQL Server Disaster Recovery</strong></td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">SQL AlwaysOn Availability Groups (asynchronous-commit)</td>
<td style="background: #f7caac;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No</td>
<td style="background: #f7caac;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No</td>
<td style="background: #f7caac;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">SQL Log Shipping</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">SQL Backup/Restore</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">SQL Mirroring (asynchronous-commit)<sup>1</sup></td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr style="background: #d9d9d9">
<td colspan="4" style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt"><strong>Windows Version</strong></td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Windows Server 2008R2 Service Pack 1</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #f7caac;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Windows Server 2012</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Windows Server 2012R2</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Windows Server 2016</td>
<td style="background: #f7caac;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr style="background: #d9d9d9">
<td colspan="4" style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt"><strong>.NET Version</strong></td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">.NET 4 Platform Update 3</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">.NET4.5</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">.NET 4.6</td>
<td style="background: #f7caac;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">No</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
<td style="background: #c5e0b3;padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Yes</td>
</tr>
<tr style="background: #d9d9d9">
<td colspan="4" style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt"><strong>Workflow Manager Farm</strong></td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">Maximum number of nodes</td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">3</td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">5</td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">5</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">End of extended support when used with a SharePoint 2013 farm<sup>2</sup></td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">4/11/2023</td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">4/11/2023</td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">4/11/2023</td>
</tr>
<tr>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: solid 0.5pt;border-bottom: solid 0.5pt;border-right: solid 0.5pt">End of extended support when used with a SharePoint 2016 farm<sup>2</sup></td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">10/10/2023<sup>3</sup></td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">7/14/2026</td>
<td style="padding-left: 14px;padding-right: 14px;border-top: none;border-left: none;border-bottom: solid 0.5pt;border-right: solid 0.5pt">7/14/2026</td>
</tr>
</tbody>
</table>
<ol>
 	<li><em>SQL Mirroring is <a href="https://msdn.microsoft.com/en-us/library/dn236451(v=sql.120).aspx">deprecated</a> and not recommended.</em></li>
 	<li><em>When Workflow Manager is a component of SharePoint Server 2016 or SharePoint Server 2013, it will be supported according to the end of support dates of the respective SharePoint Server version.</em></li>
 	<li><em>Extended support for Workflow Manager ends on 7/14/2026 when used with a SharePoint 2016 farm. However, extended support for Windows Server 2012R2, the maximum Windows version for Workflow Manager CU3, ends on 10/10/2013</em></li>
</ol>
<h2>Resources</h2>
<strong>Microsoft Product Support Lifecycle</strong>
<a href="https://support.microsoft.com/en-us/lifecycle/search">https://support.microsoft.com/en-us/lifecycle/search</a>

<strong>Workflow Manager 1.0 Cumulative Update 4 (WFM CU4) is now available on the Microsoft Download Center
<a href="https://blogs.msdn.microsoft.com/workflowteam/2017/07/25/wfm-cu4-is-now-available-on-microsoft-download-center/"></a></strong><a href="https://blogs.msdn.microsoft.com/workflowteam/2017/07/25/wfm-cu4-is-now-available-on-microsoft-download-center/">https://blogs.msdn.microsoft.com/workflowteam/2017/07/25/wfm-cu4-is-now-available-on-microsoft-download-center/</a>

<strong>Workflow Manager 1.0 Now Supported on Windows Server 2016 with CU4</strong>
<a href="https://blogs.msdn.microsoft.com/workflowteam/2017/07/25/workflow-manager-1-0-now-supported-on-windows-server-2016-with-cu4/">https://blogs.msdn.microsoft.com/workflowteam/2017/07/25/workflow-manager-1-0-now-supported-on-windows-server-2016-with-cu4/</a>

<strong>Description of the Cumulative Update 4 for Workflow Manager 1.0</strong>
<a href="https://support.microsoft.com/en-us/help/4019220/description-of-the-cumulative-update-4-for-workflow-manager-1-0">https://support.microsoft.com/en-us/help/4019220/description-of-the-cumulative-update-4-for-workflow-manager-1-0</a>

<strong>Workflow Manager 1.0 Cumulative Update 3 (WFM CU3) is now available on Microsoft Download Center</strong>
<a href="https://blogs.msdn.microsoft.com/workflowteam/2016/01/25/workflow-manager-1-0-cumulative-update-3-wfm-cu3-is-now-available-on-microsoft-download-center/">https://blogs.msdn.microsoft.com/workflowteam/2016/01/25/workflow-manager-1-0-cumulative-update-3-wfm-cu3-is-now-available-on-microsoft-download-center/</a>

<strong>Description of the Cumulative Update 3 for Workflow Manager 1.0</strong>
<a href="https://support.microsoft.com/en-us/help/3104066/description-of-the-cumulative-update-3-for-workflow-manager-1-0">https://support.microsoft.com/en-us/help/3104066/description-of-the-cumulative-update-3-for-workflow-manager-1-0</a>

<strong>An update is available for Service Bus for Windows Server 1.1 for the .NET Framework 4.6 (KB3086798)</strong>
<a href="https://support.microsoft.com/en-us/kb/3086798">https://support.microsoft.com/en-us/kb/3086798</a>

<strong>Supported Platforms (Workflow Manager 1.0)</strong>
<a href="https://msdn.microsoft.com/en-us/library/jj193487(v=azure.10).aspx">https://msdn.microsoft.com/en-us/library/jj193487(v=azure.10).aspx</a>

<strong>Disaster Recovery and Scope Restore in Workflow Manager 1.0</strong>
<a href="https://technet.microsoft.com/en-us/library/jj730570.aspx">https://technet.microsoft.com/en-us/library/jj730570.aspx</a>

<strong>Hardware and software requirements for SharePoint Server 2016</strong>
<a href="https://technet.microsoft.com/en-us/library/cc262485(v=office.16).aspx">https://technet.microsoft.com/en-us/library/cc262485(v=office.16).aspx</a>&lt;]]></content:encoded>
    </item>
    <item>
      <title>Post Upgrade Cleanup - Missing Server Side Dependencies</title>
      <link>https://docs.microsoft.com/archive/blogs/dawiese/post-upgrade-cleanup-missing-server-side-dependencies</link>
      <pubDate>Tue, 09 May 2017 20:22:34 GMT</pubDate>
      <dc:creator><![CDATA[Damian Wiese]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/dawiese/?p=1495</guid>
      <description><![CDATA[One common issue when performing a database attach migration for SharePoint is orphaned references...]]></description>
      <content:encoded><![CDATA[One common issue when performing a database attach migration for SharePoint is orphaned references to customizations that were deployed in the source farm, but have been deemed unnecessary or unsupported in the target farm and as such were not deployed. These missing server side dependencies will show up as errors in a variety of places, could cause the upgrade to report failed, and in some cases detract from the user experience. Where possible, these customizations should be uninstalled from the source farm before the migration, but when that is not an option it is a good practice to clean these in the target farm.

<em>Note: The scripts in this post are samples and should be tested in a non-production environment before use.</em>
<h1>What is a Server Side Dependency?</h1>
A Server Side Dependency is a reference in a content database that points to a resource installed on SharePoint Server. These are often deployed through WSP solution packages but could also be deployed directly to the file system of the server. These resources include a variety of file types including, but not limited to: assemblies, JS/CSS, aspx pages, webpart files, and feature definition files.
<h1>Identifying Server Side Dependencies</h1>
SharePoint has a few different tools that can be used to identify these missing server side dependencies
<h2>SharePoint Health Analyzer</h2>
The SharePoint HA rule will run weekly or on demand and generate an issue when an orphaned reference is discovered. This is useful, but if you have a large number of dependencies, the output from this report can be difficult to consume
<h2>Test-SPContentDatabase</h2>
Instead of the SharePoint Health Analyzer, I prefer to use Test-SPContentDatabse. This will assess a given content database and looks for the following issues:
<ol>
 	<li>Missing Setup Files - Resource files</li>
 	<li>Missing Assembly - Missing event receivers</li>
 	<li>Missing Features - Feature definitions</li>
 	<li>Missing Web Parts - .webpart files</li>
 	<li>Database Authentication Mode (Classic or Claims)</li>
</ol>
With the output from PowerShell you have a lot of options in how you can view the results. Out-GridView or Export-CSV are common, and in this case we are going to use a basic text file. You can see the results in the table below.

<strong>PowerShell sample for running Test-SPContentDatabase:</strong>

[powershell]
$wa = Get-SPWebApplication https://sharepoint.contoso.com&quot; 
$outputPath = &quot;\\tools\files\Output\Test_Wss_Content_MissingAssembly_{0}.txt&quot; -f (Get-Date -Format hhmmss 
$dbName = &quot;WSS_Content_MissingAssembly&quot; 
$slqServer = &quot;SPSQL&quot; 
Test-SPContentDatabase -Name $dbName -WebApplication $wa -ServerInstance $slqServer -ShowLocation:$true -ExtendedCheck:$false | Out-File $outputPath Write-Host &quot;Test results written to $outputPath&quot; 
[/powershell]

<div style="padding-left: 50px">
<table cellspacing="0" cellpadding="2" width="100%" border="2">
<tbody>
<tr>
<td valign="top" width="10%">Category:</td>
<td valign="top" width="90%">MissingFeature</td>
</tr>
<tr>
<td valign="top" width="10%">Error:</td>
<td valign="top" width="90%">True</td>
</tr>
<tr>
<td valign="top" width="10%">UpgradeBlocking:</td>
<td valign="top" width="90%">False</td>
</tr>
<tr>
<td valign="top" width="10%">Message:</td>
<td valign="top" width="90%">[WSS_Content_MissingAssembly] has reference(s) to a missing feature: Name = [DocAvenueLIb Feature1], Id = [ed37484a-c496-455b-b083-3fc157b1603c], Description = [], Install Location = [DocAvenueLIb_Feature1].</td>
</tr>
<tr>
<td valign="top" width="10%">Remedy:</td>
<td valign="top" width="90%">Feature (Name = [DocAvenueLIb Feature1], Id = [ed37484a-c496-455b-b083-3fc157b1603c], Description = [], Install Location = [DocAvenueLIb_Feature1]) is referenced in database [WSS_Content_MissingAssembly], but isn't installed on the current farm. The missing feature might cause upgrade to fail. If necessary, please install any solution that contains the feature and restart upgrade.</td>
</tr>
<tr>
<td valign="top" width="10%">Location:</td>
<td valign="top" width="90%">{108d28e9-dac1-4eea-9566-6591394e6d40}</td>
</tr>
</tbody>
</table>
<table cellspacing="0" cellpadding="2" width="100%" border="2">
<tbody>
<tr>
<td valign="top" width="10%">Category:</td>
<td valign="top" width="90%">MissingSetupFile</td>
</tr>
<tr>
<td valign="top" width="10%">Error:</td>
<td valign="top" width="90%">True</td>
</tr>
<tr>
<td valign="top" width="10%">UpgradeBlocking:</td>
<td valign="top" width="90%">False</td>
</tr>
<tr>
<td valign="top" width="10%">Message:</td>
<td valign="top" width="90%">File [Features\DocAvenueLIb_Feature1\DocLib_WP\DocLib_WP.webpart] is referenced [1] times in the database [WSS_Content_MissingAssembly], but is not installed on the current farm. Please install any feature/solution which contains this file.</td>
</tr>
<tr>
<td valign="top" width="10%">Remedy:</td>
<td valign="top" width="90%">One or more setup files are referenced in the database [WSS_Content_MissingAssembly], but are not installed on the current farm. Please install any feature or solution which contains these files.</td>
</tr>
<tr>
<td valign="top" width="10%">Location:</td>
<td valign="top" width="90%"></td>
</tr>
</tbody>
</table>
<table cellspacing="0" cellpadding="2" width="100%" border="2">
<tbody>
<tr>
<td valign="top" width="10%">Category:</td>
<td valign="top" width="90%">MissingWebPart</td>
</tr>
<tr>
<td valign="top" width="10%">Error:</td>
<td valign="top" width="90%">True</td>
</tr>
<tr>
<td valign="top" width="10%">UpgradeBlocking:</td>
<td valign="top" width="90%">False</td>
</tr>
<tr>
<td valign="top" width="10%">Message:</td>
<td valign="top" width="90%">WebPart class [817a5bd9-0698-4c62-7c51-5c9966468f0d] (class [DocAvenueLIb.DocLib_WP.DocLib_WP] from assembly [DocAvenueLIb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1b7baa1677de7aa0]) is referenced [2] times in the database [WSS_Content_MissingAssembly], but is not installed on the current farm. Please install any feature/solution which contains this web part.</td>
</tr>
<tr>
<td valign="top" width="10%">Remedy:</td>
<td valign="top" width="90%">One or more web parts are referenced in the database [WSS_Content_MissingAssembly], but are not installed on the current farm. Please install any feature or solution which contains these web parts.</td>
</tr>
<tr>
<td valign="top" width="10%">Location:</td>
<td valign="top" width="90%"></td>
</tr>
</tbody>
</table>
<table cellspacing="0" cellpadding="2" width="100%" border="2">
<tbody>
<tr>
<td valign="top" width="10%">Category:</td>
<td valign="top" width="90%">MissingAssembly</td>
</tr>
<tr>
<td valign="top" width="10%">Error:</td>
<td valign="top" width="90%">True</td>
</tr>
<tr>
<td valign="top" width="10%">UpgradeBlocking:</td>
<td valign="top" width="90%">False</td>
</tr>
<tr>
<td valign="top" width="10%">Message:</td>
<td valign="top" width="90%">Assembly [DocAvenueLIb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1b7baa1677de7aa0] is referenced in the database [WSS_Content_MissingAssembly], but is not installed on the current farm. Please install any feature/solution which contains this assembly.</td>
</tr>
<tr>
<td valign="top" width="10%">Remedy:</td>
<td valign="top" width="90%">One or more assemblies are referenced in the database [WSS_Content_MissingAssembly], but are not installed on the current farm. Please install any feature or solution which contains these assemblies.</td>
</tr>
<tr>
<td valign="top" width="10%">Location:</td>
<td valign="top" width="90%"></td>
</tr>
</tbody>
</table>
</div>
<h1>Removing Missing Server Side Dependency References</h1>
Once an orphan has been identified and you have determined that is not a necessary component in the farm you can remove the reference, using the methods outlined below. Some of the scripts below will permanently delete content from the database so it is a good idea to take a backup before performing any cleanup activities.
<h2>Features</h2>
Because we used the ShowLocation switch with Test-SPContentDatabase we can remove this using Windows PowerShell without any further discovery. With this sample, we provide the SiteID and FeatureID and then check the site and all subwebs for this feature, removing it wherever it is found.

<strong>PowerShell sample for removing features by ID:</strong>

[powershell]
$featureID = &quot;ed37484a-c496-455b-b083-3fc157b1603c&quot;
$siteID = &quot;108d28e9-dac1-4eea-9566-6591394e6d40&quot;    

#Display site information
$site = Get-SPSite $siteID   
Write-Host &quot;Checking Site:&quot; $site.Url

#Remove the feature from all subsites
ForEach ($web in $Site.AllWebs)
	{
		If($web.Features[$featureID])
			{
				Write-Host &quot;`nFound Feature $featureID in web:&quot;$Web.Url&quot;`nRemoving feature&quot;
				$web.Features.Remove($featureID, $true)
			}
			else
			{
				Write-Host &quot;`nDid not find feature $featureID in web:&quot; $Web.Url
			}   
	}

#Remove the feature from the site collection
If ($Site.Features[$featureID])
	{
		Write-Host &quot;`nFound feature $featureID in site:&quot;$site.Url&quot;`nRemoving Feature&quot;
		$site.Features.Remove($featureID, $true)
	}
	else
	{
		Write-Host &quot;Did not find feature $featureID in site:&quot; $site.Url
	}
[/powershell]

<h2>Setup File</h2>
The output from Test-SPContentDatabase does not give us enough information to identify the location of this setup file reference. To resolve this, we will need to use a SQL query to find the location and then a Window PowerShell script to remove the file reference from SharePoint Sever 2016 using the SharePoint object model.

<strong>Note on performing direct SQL reads against SharePoint Databases</strong>
<em>Reading from the SharePoint databases programmatically, or manually, can cause unexpected locking within Microsoft SQL Server which can adversely affect performance. Any read operations against the SharePoint databases that originate from queries, scripts, .dll files (and so on) that are not provided by the Microsoft SharePoint Development Team or by Microsoft SharePoint Support will be considered unsupported if they are identified as a barrier to the resolution of a Microsoft support engagement.</em>

<em>If unsupported read operations are identified as a barrier to the resolution of support engagement, the database will be considered to be in an unsupported state. To return the database to a supported state, all unsupported read activities must stop.</em>
<em>from: <a href="https://support.microsoft.com/en-us/help/841057/support-for-changes-to-the-databases-that-are-used-by-office-server-products-and-by-windows-sharepoint-services">https://support.microsoft.com/en-us/help/841057/support-for-changes-to-the-databases-that-are-used-by-office-server-products-and-by-windows-sharepoint-services</a></em>

To reduce the risk of locking or other performance issues it is preferrable to to run these queries should be against  backup copy or snapshot of the database.

<strong>SQL sample for listing setup file information:</strong>

[sql]
USE WSS_Content_MissingAssembly_Snapshot
 
SELECT id, SiteID, DirName, LeafName, WebId, ListId
FROM AllDocs (NOLOCK) where SetupPath = 'Features\ContosoLIb_Feature1\DocLib_WP\DocLib_WP.webpart'
[/sql]

<p style="padding-left: 30px"><a href="https://msdnshared.blob.core.windows.net/media/2017/05/image155.png"><img title="image" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/05/image_thumb146.png" width="809" height="53" class="" /></a></p>
With the output of the above script we now have enough information to remove the missing setup file from the database using the PowerShell sample below

<strong>PowerShell sample for removing setup files by ID:</strong>

[powershell]
#File Information
$setupFileID = &quot;07462F03-A4C6-455C-B383-947DDE85DF36&quot; 
$siteID = &quot;108D28E9-DAC1-4EEA-9566-6591394E6D40&quot;
$WebID = &quot;4E068646-2C87-4868-924E-850C31F607DF&quot;

#Get file
$site = Get-SPSite -Identity $siteID
$web = Get-SPWeb -Identity $WebID -Site $siteID
$file = $web.GetFile([GUID]$setupFileID)

#Report on location
$filelocation = &quot;{0}{1}&quot; -f ($site.WebApplication.Url).TrimEnd(&quot;/&quot;), $file.ServerRelativeUrl
Write-Host &quot;Found file location:&quot; $filelocation

#Delete the file, the Delete() method bypasses the recycle bin
$file.Delete()

$web.dispose()
$site.dispose()
[/powershell]

&nbsp;
<h2>Web Part</h2>
Similar to the setup file the test-SPContentDatabse output does not provide enough information to locate this file reference, so we are going to use a SQL query to identify the location, and Windows PowerShell to remove it using supported SharePoint APIs.

<strong>SQL sample for listing web part information:</strong>

[sql]
USE WSS_Content_MissingAssembly_Snapshot
 
SELECT WebID, SiteID, DirName, LeafName, tp_WebPartTypeId, tp_WebPartIDProperty
FROM AllDocs WITH (NOLOCK) inner join AllWebParts on AllDocs.Id = AllWebParts.tp_PageUrlID
WHERE AllWebParts.tp_WebPartTypeID = '817a5bd9-0698-4c62-7c51-5c9966468f0d'
[/sql]

<p style="padding-left: 30px"><a href="https://msdnshared.blob.core.windows.net/media/2017/05/image156.png"><img title="image" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/05/image_thumb147.png" width="803" height="60" class="" /></a>
With this information you have two options for remove this webpart from the page</p>

<ol>
 	<li>Navigate directly to the web part maintenance page by appending ?contents=1 to the URL. In this case you would navigate to: <a href="https://sharepoint.contoso.com/sites/lab5-4/SitePages/Home.aspx?contents=1">https://sharepoint.contoso.com/sites/lab5-4/SitePages/Home.aspx?contents=1</a></li>
 	<li>Remove the webpart using PowerShell</li>
</ol>
<strong>PowerShell sample for removing webpart by ID:</strong>

[powershell]
$siteID = &quot;108D28E9-DAC1-4EEA-9566-6591394E6D40&quot;
$webID = &quot;4E068646-2C87-4868-924E-850C31F607DF&quot;
$dirName = &quot;sites/lab5-4/SitePages&quot;
$leafName = &quot;Home.aspx&quot;
$webPartID = &quot;g_bb56b03e_b830_4e37_ba16_62250601ac26&quot;

#Get Web
$web = Get-SPweb -Identity $webID -Site $siteID

#Build page url
$pageURL = &quot;{0}{1}/{2}&quot; -f ($site.WebApplication).url, $dirName, $leafName

#Get SPFile
$page = $web.GetFile($pageURL)

#Delete the web part on the current published page
$webPartManager = $page.GetLimitedWebPartManager([System.Web.UI.WebControls.WebParts.PersonalizationScope]::Shared)

#Delete web part by ID
$webPart = $webPartManager.WebParts[$webPartID]
$webPartManager.DeleteWebPart($webPart)
$web.Dispose()
[/powershell]

<h2>Event Receiver</h2>
Missing assembies refer to event receivers and can be identified by using a combination of SQL Server queries and Windows PowerShell.

<strong><span>SQL sample for listing event receiver information:</span></strong>

[sql]
USE WSS_Content_MissingAssembly_Snapshot
 
Select Id, SiteID, WebID, HostType, hostId 
FROM EventReceivers (NOLOCK) where Assembly = 'ContosoLIb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1b7baa1677de7aa0'
[/sql]

<p style="padding-left: 30px"><a href="https://msdnshared.blob.core.windows.net/media/2017/05/image157.png"><img title="image" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/2017/05/image_thumb148.png" width="809" height="71" class="" /></a></p>
The above query will return one of three hosttypes for the event receiver. This is important to note because it slightly changes the script you will run to remove the orphan.
<table cellspacing="0" cellpadding="2" width="200" border="2">
<tbody>
<tr>
<td valign="top" width="100">HostTypeValue</td>
<td valign="top" width="125">Scope</td>
</tr>
<tr>
<td valign="top" width="100">0</td>
<td valign="top" width="125">SPSite</td>
</tr>
<tr>
<td valign="top" width="100">1</td>
<td valign="top" width="125">SPWeb</td>
</tr>
<tr>
<td valign="top" width="100">2</td>
<td valign="top" width="125">SPList</td>
</tr>
</tbody>
</table>
&nbsp;

With the above information we can now remove the reference from the content database

<strong>PowerShell sample for removing event receiver:</strong>

[powershell]
#Variables
$hostType = &quot;0&quot;
$siteID = &quot;108D28E9-DAC1-4EEA-9566-6591394E6D40&quot;
$webID = &quot;00000000-0000-0000-0000-000000000000&quot;
$hostID = &quot;108D28E9-DAC1-4EEA-9566-6591394E6D40&quot;
$assemblyID = &quot;80A9D912-768A-4289-91AB-9BF368922F8F&quot;


#Perform cleanup

if ($hostType -eq &quot;0&quot;)
	{
		$site = GEt-SPSite -limit all -Identity $siteID
		($site.EventReceivers | ?{$_.id -eq $assemblyID}).delete()
		$site.dispose()
	}
	elseif ($hostype -eq &quot;1&quot;)
	{
		$web = Get-SPWeb -Identity $webID -Site $siteID
		($web.EventReceivers | ?{$_.id -eq $assemblyID}).delete()
		$web.dispose()
	}
	elseif ($hostype -eq &quot;2&quot;)
	{
		$web = Get-SPWeb -Identity $webID -Site $siteID
		$list = $web.lists | ?{$_.id -eq $hostID}
		($list.EventReceivers | ?{$_.id -eq $assemblyID}).delete()
		$web.dispose()
	}
[/powershell]

With the above tools you should be able to resolve the four most common types of database orphans that are encountered during SharePoint migration and upgrade projects.

<strong>Video: Cleanup of databases after upgrade procedure</strong>
<a href="https://technet.microsoft.com/en-us/library/mt809168(v=office.16).aspx">https://technet.microsoft.com/en-us/library/mt809168(v=office.16).aspx</a>
<h2>For more information on resolving other Test-SPContentDatabase findings please see:</h2>
<strong>Test-SPContentDatabase False Positive for Classic Mode Database when using AD Groups as Site Collection Administrators</strong>
<a href="https://blogs.technet.microsoft.com/dawiese/2018/09/27/test-spcontentdatabase-false-positive-for-classic-mode-databa">https://blogs.technet.microsoft.com/dawiese/2018/09/27/test-spcontentdatabase-false-positive-for-classic-mode-databa</a>se/

<strong>Removing Orphaned Sites: PowerShell Replacement for stsadm -o deletesite</strong>
<a href="https://blogs.technet.microsoft.com/dawiese/2018/09/28/powershell-replacement-for-stsadm-o-deletesite/">https://blogs.technet.microsoft.com/dawiese/2018/09/28/powershell-replacement-for-stsadm-o-deletesite/</a>]]></content:encoded>
    </item>
    <item>
      <title>Get Office365 usage reports from the Microsoft Graph using Windows PowerShell</title>
      <link>https://docs.microsoft.com/archive/blogs/dawiese/get-office365-usage-reports-from-the-microsoft-graph-using-windows-powershell</link>
      <pubDate>Sat, 15 Apr 2017 21:20:41 GMT</pubDate>
      <dc:creator><![CDATA[Damian Wiese]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/dawiese/?p=1485</guid>
      <description><![CDATA[If you just want the script, please visit TechNet Gallery, for more information on how to use it,...]]></description>
      <content:encoded><![CDATA[If you just want the script, please visit<a href="https://gallery.technet.microsoft.com/Get-Office365-usage-f955ade4"> TechNet Gallery</a>, for more information on how to use it, read on!

The Microsoft Graph is a single endpoint that provides access to multiple APIs for Office 365 and other Microsoft cloud services. A preview <a href="https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/resources/report">Reporting API</a> was <a href="https://blogs.office.com/2017/03/31/whats-new-in-office-365-administration-public-preview-of-microsoft-graph-reporting-apis/">recently released</a> that brings Office 365 usage and analytics reporting into the Microsoft Graph.

Along with this release, the deprecation of the several reporting APIs and PowerShell cmdlets in the Reporting Web Service was <a href="https://blogs.office.com/2017/03/31/whats-new-in-office-365-administration-public-preview-of-microsoft-graph-reporting-apis/">announced</a> and these will be disabled on 10/1/2017. This post and sample script demonstrates how to consume Office 365 usage information from the Microsoft Graph using Windows PowerShell. A basic understanding of OAuth is helpful but not required.
<h2>Understanding the Usage Reports</h2>
The Office 365 Usage reports provide two main types of reporting

Activity - The amount of interaction with the service such as number of files viewed

<a href="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image0019.png"><img title="clip_image001" style="padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-width: 0px" border="0" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image001_thumb6.png" width="244" height="89" /></a>

Usage - The amount of content created or generated in the service, such as total storage used

<a href="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image0024.png"><img title="clip_image002" style="padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-width: 0px" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image002_thumb4.png" width="244" height="81" /></a>

A full list of the available reports and details on each report type can be found in <a href="https://support.office.com/en-us/article/Activity-Reports-in-the-Office-365-Admin-Center-0d6dfb17-8582-4172-a9a9-aed798150263">Activity Reports in the Office 355 Admin Center. </a>

Details on the corresponding Reporting API can be found in the <a href="https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/resources/report">Microsoft Graph Documentation</a>
<h2>Accessing the Office365 Usage and Activity reports using Windows PowerShell</h2>
Accessing the Microsoft Graph requires that you register an App in Azure Active Directory and grant that app permission to view the usage reports. In this case we will use this App and the administrators credentials when authenticating to the Microsoft Graph. You could also use an app with an app secret to provide access without requiring the administrators credentials. This post will walk through the steps to configure the app permissions to use with the script, but if you want more information on authentication and authorization please see <a href="https://developer.microsoft.com/en-us/graph/docs/authorization/auth_overview">App authentication with Microsoft Graph</a>.
<h3>Step 1: Register an App in AzureAD to access the Usage Reports</h3>
Login to <a href="https://portal.azure.com">https://portal.azure.com</a> and navigate to "Azure Active Directory" &gt; "App Registrations" and click "New Application Registration"

<a href="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image0032.png"><img title="clip_image003" style="padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-width: 0px" border="0" alt="clip_image003" src="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image003_thumb2.png" width="244" height="70" /></a>

Give your application a friendly name, Select application type "native", and enter a redirect URL in the format urn:foo and click create. Note: For this script we do not have a specific requirement for the Redirect URI, the exact values doesn't matter as long as it's in the format URN:&lt;Value&gt;

<a href="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image0042.png"><img title="clip_image004" style="padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-width: 0px" border="0" alt="clip_image004" src="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image004_thumb2.png" width="208" height="244" /></a>

Click on the App, navigate to required permissions, click add and select the Microsoft Graph API

<a href="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image0051.png"><img title="clip_image005" style="padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-width: 0px" border="0" alt="clip_image005" src="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image005_thumb1.png" width="244" height="63" /></a>

Choose Select Permissions and grant the App the "Read All Usage Reports" permission

<a href="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image0063.png"><img title="clip_image006" style="padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-width: 0px" border="0" alt="clip_image006" src="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image006_thumb3.png" width="244" height="128" /></a>

Copy the Application ID and Redirect URI and save them for use in the script

<a href="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image0071.png"><img title="clip_image007" style="padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border-width: 0px" border="0" alt="clip_image007" src="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image007_thumb1.png" width="244" height="80" /></a>
<h3>Step 2: Use <a href="https://gallery.technet.microsoft.com/Get-Office365-usage-f955ade4">Get-Office365Report.ps1</a> to access the Graph API and download your report</h3>
A sample script for using PowerShell with the Microsoft Grapth API is available in the <a href="https://gallery.technet.microsoft.com/Get-Office365-usage-f955ade4">TechNet Gallery</a>. This script will return the chosen report as a system.array object. You can then manipulate that further in Windows PowerShell using standard cmdlets. In this example we are going to export the output to a CSV file using Export-CSV

[powershell]#Get the credentials for the user with access to usage reports
$cred = Get-Credential
#Run the report
$report = .\Get-Office365Report.ps1 `
-TenantName &quot;contoso.onmicrosoft.com&quot; `
-ClientID &quot;b5dc219e-58b4-458a-a415-c203b10380f5&quot; `
-Report SharePointSiteUsage `
-Period D180 `
-View Sites `
-Credential $cred `
-RedirectURI &quot;urn:contoso&quot;

#Export report to CSV file
$report | Export-CSV -path C:\temp\SharePointSiteUsage.csv -NoTypeInformation[/powershell]

<a href="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image0083.png"><img title="clip_image008" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" border="0" alt="clip_image008" src="https://msdnshared.blob.core.windows.net/media/2017/04/clip_image008_thumb3.png" width="244" height="107" /></a>

Once you have the CSV file you can open it your BI tool of choice and build your visuals. In a future post I will show how to analyze this data in PowerBI and use this script to automatically refresh the data on demand.
<h3>Resources</h3>
<strong>Get Office365 usage reports from the Microsoft Graph using Windows PowerShell</strong>
<cite><a href="https://gallery.technet.microsoft.com/Get-Office365-usage-f955ade4">https://gallery.technet.microsoft.com/Get-Office365-usage-f955ade4</a></cite>

<strong>Overview of Microsoft Graph</strong>
<cite><a href="https://developer.microsoft.com/en-us/graph/docs">https://developer.microsoft.com/en-us/graph/docs</a></cite>

<strong>App authentication with Microsoft Graph</strong>
<cite><a href="https://developer.microsoft.com/en-us/graph/docs/authorization/auth_overview">https://developer.microsoft.com/en-us/graph/docs/authorization/auth_overview</a></cite>

<strong>What’s new in Office 365 administration—public preview of Microsoft Graph reporting APIs</strong>
<cite><a href="https://blogs.office.com/2017/03/31/whats-new-in-office-365-administration-public-preview-of-microsoft-graph-reporting-apis/">https://blogs.office.com/2017/03/31/whats-new-in-office-365-administration-public-preview-of-microsoft-graph-reporting-apis/</a></cite>

<strong>Microsoft Graph: Office 365 Usage Reports</strong>
<cite><a href="https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/resources/report">https://developer.microsoft.com/en-us/graph/docs/api-reference/beta/resources/report</a></cite>]]></content:encoded>
    </item>
    <item>
      <title>PowerShell Modules for Managing SharePoint Online</title>
      <link>https://docs.microsoft.com/archive/blogs/dawiese/powershell-modules-for-managing-sharepoint-online</link>
      <pubDate>Wed, 15 Feb 2017 20:20:53 GMT</pubDate>
      <dc:creator><![CDATA[Damian Wiese]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/dawiese/?p=1305</guid>
      <description><![CDATA[As a SharePoint Online administrator you have several tools available to you for automating tenant...]]></description>
      <content:encoded><![CDATA[As a SharePoint Online administrator you have several tools available to you for automating tenant administration. When you are setting up a new  workstation it can be challenging to figure out what to install and where to get it. This post summarizes the various PowerShell tools available for managing your SharePoint Online tenant.
<h2>Microsoft Online Services Sign-in Assistant</h2>
The Microsoft Online Services Sign-In Assistant provides end user sign-in capabilities to Microsoft Online Services, such as Office 365. This is required for using most of the other modules in this post and is likely installed if you are using Office applications on your workstation.

<em>Microsoft Online Services Sign-In Assistant for IT Professionals RTW</em>
<a href="https://www.microsoft.com/en-us/download/details.aspx?id=41950">https://www.microsoft.com/en-us/download/details.aspx?id=41950</a>
<h2>SharePoint Online Management Shell</h2>
This is used for performing core SharePoint Online service administration.

<strong>Option #1 Download and install the SharePoint Online Management Shell</strong>
<ol>
 	<li>Download <a href="https://www.microsoft.com/en-us/download/details.aspx?id=35588">sharepointonlinemanagementshell_6112-1200_x64_en-us.msi</a></li>
 	<li>Run the installer</li>
 	<li>Once installed you can load this module into your scripts using:</li>
</ol>

[powershell]Import-Module Microsoft.Online.SharePoint.PowerShell -DisableNameChecking[/powershell]


<em>SharePoint Online Management Shell</em>
<a href="https://www.microsoft.com/en-us/download/details.aspx?id=35588">https://www.microsoft.com/en-us/download/details.aspx?id=35588</a>

<strong>Option #2 Install the SharePoint Online Management Shell from the PowerShell Gallery</strong>
If your operating system is using PowerShell 5.0 or newer, you can install the 
SharePoint Online Management Shell by using the following command:


[powershell]Install-Module -Name Microsoft.Online.SharePoint.PowerShell[/powershell]

<em>Announcing availability of SharePoint Online Management Shell from PowerShell Gallery</em>
<a href="https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Announcing-availability-of-SharePoint-Online-Management-Shell/ba-p/241370">https://techcommunity.microsoft.com/t5/Microsoft-SharePoint-Blog/Announcing-availability-of-SharePoint-Online-Management-Shell/ba-p/241370</a>
<h2>Office Dev PnP PowerShell Module</h2>
This solution contains a library of PowerShell commands that allows you to perform complex provisioning and artifact management actions towards SharePoint. The commands use CSOM and many can work against both SharePoint Online and SharePoint Server.

Install Module:

[powershell]Install-Module SharePointPnPPowerShellOnline -AllowClobber[/powershell]

<em>Module Information</em>
<a href="https://github.com/SharePoint/PnP-PowerShell">https://github.com/SharePoint/PnP-PowerShell</a>
<h2>SharePoint Online Client Side Object Model (CSOM)</h2>
For scenarios that are not covered by the SharePoint Online Management Shell or the Office Dev PnP PowerShell module you will need access to the client side object module.

Installing Package without Visual Studio installed
<ol>
 	<li>Download the <a href="https://dist.nuget.org/index.html">NuGet Commandline</a>:</li>
 	<li>From the directory where you saved nuget.exe:</li>
</ol>

[plain]Nuget install Microsoft.SharePointOnline.CSOM -OutputDirectory C:\&lt;TargetDIR&gt;\SPO_CSOM[/plain]

<em>Package Information</em>
<a href="https://www.nuget.org/packages/Microsoft.SharePointOnline.CSOM">https://www.nuget.org/packages/Microsoft.SharePointOnline.CSOM</a>
<h2>Azure Azure AD Management Shell</h2>
This is used for managing top tenant level settings and for managing user provisioning and licensing. This requires global administrator rights and will not be necessary for many SharePoint operations.

<strong>Azure ActiveDirectory V1</strong>
Please note that cmdlets in this module will be deprecated when the functionality of this module is migrated to the newer Azure Active Directory PowerShell V2 Module. We advise customers who are creating new PowerShell scripts to use the newer module instead of this module.
<a href="https://github.com/Azure/azure-docs-powershell-azuread/blob/master/Azure%20AD%20Cmdlets/MSOnline/index.md">https://github.com/Azure/azure-docs-powershell-azuread/blob/master/Azure%20AD%20Cmdlets/MSOnline/index.md</a>

Install AzureAD Management Shell V1
<ol>
 	<li>Download <a href="https://connect.microsoft.com/site1164/Downloads/DownloadDetails.aspx?DownloadID=59185">AdministrationConfig-V1.1.166.0-GA.msi</a></li>
 	<li>Run the installer file</li>
 	<li>Import the module in your script by running:</li>
</ol>

[powershell]Import-Module MSOnline[/powershell]

<strong>Azure Azure AD Management Shell (V2)</strong>
This is the newer module for managing AzureAD but does not yet contain equivalents for all V1 cmdlets. This GA release also does not include V2 cmdlets that are in preview.
<a href="https://www.powershellgallery.com/packages/AzureAD/">https://www.powershellgallery.com/packages/AzureAD/</a>

Installing Azure AD Management Shell V2

[powershell]Install-Module -Name AzureAD[/powershell]

<h2>Security and Compliance Center</h2>
In your role as a SharePoint Online Administrator you may also be asked to manage some or all of the Security and Compliance center in Office 365. Managing this requires the use of Remote Powershell.

Connecting to Security and Compliance Center:

[powershell]#Enter credentials and establish connection
$UserCredential = Get-Credential
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri https://ps.compliance.protection.outlook.com/powershell-liveid/&quot; -Credential $UserCredential -Authentication Basic -AllowRedirection

#Import cmdlets
Import-PSSession $Session

#Once you are done with your session be sure you disconnect
Remove-PSSession $Session
[/powershell]

<em>Connect to the Office 365 Security &amp; Compliance Center using remote PowerShell</em>
<a href="https://technet.microsoft.com/en-us/library/mt587092(v=exchg.160).aspx">https://technet.microsoft.com/en-us/library/mt587092(v=exchg.160).aspx</a>]]></content:encoded>
    </item>
    <item>
      <title>Speaking Event - Seattle IT Pro User Group - Publishing SharePoint 2016 and Office Online Server with Azure AD Application Proxy</title>
      <link>https://docs.microsoft.com/archive/blogs/dawiese/speaking-event-seattle-it-pro-user-group-publishing-sharepoint-2016-and-office-online-server-with-azure-ad-application-proxy</link>
      <pubDate>Sat, 28 Jan 2017 13:35:40 GMT</pubDate>
      <dc:creator><![CDATA[Damian Wiese]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/dawiese/?p=1285</guid>
      <description><![CDATA[A common customer request is publishing an on-premises SharePoint site over the internet so that...]]></description>
      <content:encoded><![CDATA[A common customer request is publishing an on-premises SharePoint site over the internet so that users can access it without being on the corporate network. In the past, this involved deploying reverse proxies and lengthy conversations with the networking and security teams. One excellent option now available is the Azure AD Application Proxy.

This session will discuss traditional approaches for publishing SharePoint externally and how this can be secured and simplified by the use of the Azure AD Application Proxy. This session will also include a demonstration of how combining SharePoint 2016, SharePoint Online, and Azure Active Directory enables a highly secure hybrid experience that is available for your users regardless of their location.

If you're interested, please join me <a href="https://www.sitpug.com/_layouts/15/listform.aspx?PageType=4&amp;ListId=%7BEE68C3FD%2D0187%2D40FB%2DB8DD%2D61D7C2656A5F%7D&amp;ID=79&amp;ContentTypeID=0x010400BA942C8609F11E45BFCA9E67778CE2E7">Wednesday February 1st @ 6:00pm</a> at Microsoft Lincoln Square office in Bellevue. Please<a href="https://www.sitpug.com/Lists/RSVP/NewForm.aspx?Source=https://www.sitpug.com/SitePages/ThankYouRSVP.aspx?PageView%3DShared?Source=https://www.sitpug.com/SitePages/ThankYouRSVP.aspx?PageView%3DShared"> RSVP</a> with <a href="https://www.sitpug.com/Pages/default.aspx">SITPUG</a> and see their site for <a href="https://www.sitpug.com/SitePages/Directions.aspx">directions</a>.]]></content:encoded>
    </item>
    <item>
      <title>Workflow Manager Support for SQL 2014 with a SharePoint Farm</title>
      <link>https://docs.microsoft.com/archive/blogs/dawiese/workflow-manager-support-for-sql-2014-with-a-sharepoint-farm</link>
      <pubDate>Thu, 12 Jan 2017 12:11:34 GMT</pubDate>
      <dc:creator><![CDATA[Damian Wiese]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/dawiese/?p=1256</guid>
      <description><![CDATA[This post contains information for Workflow Manager CU3. Please see KB4019220 for information...]]></description>
      <content:encoded><![CDATA[<span style="color: #ff0000">This post contains information for Workflow Manager CU3. Please see KB4019220 for information workflow manager CU4. </span>

<a href="https://support.microsoft.com/en-us/help/4019220/description-of-the-cumulative-update-4-for-workflow-manager-1-0">https://support.microsoft.com/en-us/help/4019220/description-of-the-cumulative-update-4-for-workflow-manager-1-0</a>

With SharePoint 2016 supporting a minimum of SQL Server 2014 Service Pack 1, many customers have asked if they need a separate SQL Server 2012 instance for the Workflow Manager farm that supports their SharePoint installation. This post is to clarify the support for SQL versions and high availability features when Workflow Manager is used with a SharePoint farm.

&nbsp;
<h2>SQL Version Support</h2>
When Workflow Manager is deployed for use with only a SharePoint 2016 or 2013 farm, SQL 2014, SQL 2012 and SQL 2008 R2 SP1 are supported for the database engine hosting the Workflow Manager and Service Bus databases. SQL 2014 support requires requires Workflow Manager 1.0 with CU3, Service Bus 1.1, and <a href="https://www.microsoft.com/en-us/download/details.aspx?id=49496">KB3086798</a>. Information on supported service packs for SQL Server 2014 can be found on the <a href="https://support.microsoft.com/en-us/lifecycle/search?alpha=SQL%20Server%202014">Microsoft Product Support Lifecycle page</a>.

If Workflow Manager is being used for any other purpose, only SQL 2012 and SQL 2008 R2 SP1 are supported as per <a href="https://msdn.microsoft.com/en-us/library/jj193487(v=azure.10).aspx">Supported Platforms (Workflow Manager 1.0)</a>.

&nbsp;
<h2>SQL High Availability Feature Support</h2>
For high availability in a single farm Workflow Manager supports either SQL Failover Clustering or Synchronous Mirroring. AlwaysOn Availability Groups are not supported.

&nbsp;
<h2>Resources</h2>
Workflow Manager 1.0 Cumulative Update 3 (WFM CU3) is now available on Microsoft Download Center
<a href="https://blogs.msdn.microsoft.com/workflowteam/2016/01/25/workflow-manager-1-0-cumulative-update-3-wfm-cu3-is-now-available-on-microsoft-download-center/">https://blogs.msdn.microsoft.com/workflowteam/2016/01/25/workflow-manager-1-0-cumulative-update-3-wfm-cu3-is-now-available-on-microsoft-download-center/</a>

An update is available for Service Bus for Windows Server 1.1 for the .NET Framework 4.6 (KB3086798)
<a href="https://support.microsoft.com/en-us/kb/3086798">https://support.microsoft.com/en-us/kb/3086798</a>

Supported Platforms (Workflow Manager 1.0)
<a href="https://msdn.microsoft.com/en-us/library/jj193487(v=azure.10).aspx">https://msdn.microsoft.com/en-us/library/jj193487(v=azure.10).aspx</a>

Disaster Recovery and Scope Restore in Workflow Manager 1.0
<a href="https://technet.microsoft.com/en-us/library/jj730570.aspx">https://technet.microsoft.com/en-us/library/jj730570.aspx</a>

Hardware and software requirements for SharePoint Server 2016
<a href="https://technet.microsoft.com/en-us/library/cc262485(v=office.16).aspx">https://technet.microsoft.com/en-us/library/cc262485(v=office.16).aspx</a>]]></content:encoded>
    </item>
    <item>
      <title>Publishing SharePoint 2016 and Office Online Server with Azure AD Application Proxy</title>
      <link>https://docs.microsoft.com/archive/blogs/dawiese/publishing-sharepoint-2016-and-office-online-server-with-azure-ad-application-proxy</link>
      <pubDate>Thu, 09 Jun 2016 12:24:31 GMT</pubDate>
      <dc:creator><![CDATA[Damian Wiese]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/dawiese/?p=865</guid>
      <description><![CDATA[September 16, 2016: Updated information on authentication for OOS. Pre-authentication is not...]]></description>
      <content:encoded><![CDATA[<strong>September 16, 2016: Updated information on authentication for OOS. Pre-authentication is not supported and passthrough must be used</strong>

A common customer request is publishing an on-premises SharePoint site over the internet so that users can access it without being on the corporate network. In the past this involved deploying reverse proxies and lengthy conversations with the networking team. One excellent option  now available is the Azure AD Application Proxy. That team has an <a href="https://blogs.technet.microsoft.com/applicationproxyblog/2016/04/06/enable-remote-access-to-sharepoint-2013-with-azure-ad-app-proxy/">excellent walkthrough</a> on configuring SharePoint 2013 and Azure AD App Proxy to work together, these same steps also work for SharePoint 2016. You can visit their <a href="https://blogs.technet.microsoft.com/applicationproxyblog/2016/04/06/enable-remote-access-to-sharepoint-2013-with-azure-ad-app-proxy/">blog</a> for details but the basic steps are:
<ol>
 	<li>Ensure SharePoint web application pools are running under a service account (any production SharePoint farm should already be configured this way)</li>
 	<li>Configure SharePoint for Kerberos authentication</li>
 	<li>Create SPNs and configure Kerberos Constrained Delegation (KCD)</li>
 	<li>Publish SharePoint through Azure AD App Proxy</li>
 	<li>Configure AAMs in SharePoint for the external URL</li>
 	<li>Assign users to the Azure AD App Proxy</li>
</ol>
With the above guidance I was able to publish Sharepoint externally in &lt;30 minutes. However, there are a few scenarios that the above blog above does not cover, three of these will be the focus for this post:
<ol>
 	<li>A SharePoint 2016 farm using host header site collections</li>
 	<li>Office Online Server</li>
 	<li>Using the same URL internally and externally for SharePoint</li>
</ol>
This post will not cover the core configuration for Azure AD Application Proxy for SharePoint as that is already covered <a href="https://blogs.technet.microsoft.com/applicationproxyblog/2016/04/06/enable-remote-access-to-sharepoint-2013-with-azure-ad-app-proxy/">here</a>.
<h3>Host Named Site Collections</h3>
<strong>First let's see how site collections in my farm are addressed:</strong>

<!-- HTML generated using hilite.me -->
<div style="overflow: auto;width: auto;background: #ffffff;padding: 0.2em 0.6em 0.2em 0.6em">
<pre style="margin: 0px;line-height: 125%"><span style="color: #007020">Get-SPSite</span> | FT URL, HostHeaderIsSiteName -AutoSize
</pre>
</div>
<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image00113.png"><img width="359" height="116" title="clip_image001" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image001_thumb9.png" border="0" /></a>

Each site where HostHeaderIsSiteName = True is configured as a HHSC

For this demo, I am going to publish sites which have the host name sharepoint.xxxxxxxxxxxxxx.co. In a traditional path based environment we would use alternate access mappings, but these will not work for HHSC. Fortunately we have similar functionality available to use by using <a href="https://technet.microsoft.com/en-us/library/jj219633.aspx">Set-SPSiteurl</a>

The documentation for Set-SPSiteUrl has an important note:
<em>The Set-SPSiteUrl cmdlet only applies to the root site collection for a host name that is, </em><a href="https://www.contoso.com"><em>https://www.contoso.com</em></a><em>. This cmdlet cannot be directly run against a managed path site collection underneath the root that is, </em><a href="https://www.contoso.com/sites/test"><em>https://www.contoso.com/sites/test</em></a><em>.</em>

What does this mean? In my example where I want to publish three sites, I only have to run Set-SPSiteUrl against one site collection.

<strong>Set alternate URLs for SharePoint host header site collections</strong>

PS: Get-SPSite <a href="https://sharepoint.xxxxxxxxxxxxxxx.co">https://sharepoint.xxxxxxxxxxxxxxx.co</a> | Set-SPSiteURL -Zone Extranet -url <a href="https://sharepoint2016-xxxxxxxxxxxxxxxxx.msappproxy.net/">https://sharepoint2016-xxxxxxxxxxxxxxxxx.msappproxy.net/</a>

This will set the alternate URL for all site collection that share the hostname sharepoint.xxxxxxxxxxxxxxx.co

<!-- HTML generated using hilite.me -->
<div style="overflow: auto;width: auto;background: #ffffff;padding: 0.2em 0.6em 0.2em 0.6em">
<pre style="margin: 0px;line-height: 125%"><span style="color: #007020">Get-SPSite</span> | ?{<span style="color: #996633">$_</span>.url <span style="color: #333333">-like </span>"https://sharepoint.xxxxxxxxxxxxxxx.co*"} | <span style="color: #007020">Get-SPSiteURL</span> | FT -AutoSize
</pre>
</div>
<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0026.png"><img width="338" height="71" title="clip_image002" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image002_thumb4.png" border="0" /></a>

<strong>Test access</strong>

I can now access the site over the internet using the default App Proxy URL:

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0032.png"><img width="338" height="165" title="clip_image003" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image003" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image003_thumb2.png" border="0" /></a>
<h3></h3>
<h3>Office Online Server (OOS)</h3>
<em>Note: OOS is the new version of Office Web Apps (WAC)</em>

What if I want to edit a document in the browser using Office Online Server? Unfortunately when I attempt to open a word document in the browser, I get an error:

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0043.png"><img width="344" height="156" title="clip_image004" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image004" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image004_thumb3.png" border="0" /></a>

Taking a look at the page source we can see why. Office Online server renders in an iframe which is pointing back to a URL that I have not published:

<!-- HTML generated using hilite.me -->
<div style="overflow: auto;width: auto;background: #ffffff;padding: 0.2em 0.6em 0.2em 0.6em">
<pre style="margin: 0px;line-height: 125%">&lt;form target=<span style="color: #a31515">"WebApplicationFrame"</span> action=<span style="color: #a31515">"<span style="background-color: #ffff00">https://officeonline.xxxxxxxxxxxxxxx.co/wv/wordviewerframe.aspx</span>?ui=en%2DUS&amp;rs=en%2DUS&amp;WOPISrc=https%3A%2F%2Fsharepoint%2Exxxxxxxxxxxxxxx%2Eco%2Fsites%2FTeamSite1%2F%5Fvti%5Fbin%2Fwopi%2Eashx%2Ffiles%2Fb40646494c8c48d9a31d4156918f2a07&amp;wdEnableRoaming=1"</span> id=<span style="color: #a31515">"canvas_form"</span> method=<span style="color: #a31515">"post"</span>&gt;
</pre>
</div>
<strong>A couple notes about Office Online Server</strong>
<ol>
 	<li>OOS can be configured with both an internal and external URL</li>
 	<li>SharePoint can only be bound to one URL for OOS. I cannot set a different OOS URL for default and extranet zones.</li>
 	<li>SharePoint users do not authenticate to OOS using Windows integrated authentication. Instead an authorization token is included in the request to the OOS server. This means that we do not need to configure Kerberos Constrained Delegation (KCD) when publishing OOS</li>
</ol>
Give the above conditions I must publish OOS using the same URL that I do internally. Because we use an authorization token, some of the publishing settings will be different than for SharePoint using Windows authentication.

<strong>First, I can check which URL is being used for OOS by running Get-SPWOPIBinding from my SharePoint farm:</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0051.png"><img width="336" height="91" title="clip_image005" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image005" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image005_thumb1.png" border="0" /></a>

<strong>Second, Offline Online Server does not support pre-authentication, so it must be configured for passthrough authentication.</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2016/09/image482.png"><img width="327" height="237" title="image" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border: 0px" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/09/image_thumb399.png" border="0" /></a>
<blockquote>Note: Since passthrough authentication is being used, it is important to lock down host domains for which Office Online Server will allow file operations.This will prevent a SharePoint farm, or other servers, from unauthorized domains from binding to this farm.

<a href="https://msdnshared.blob.core.windows.net/media/2016/09/image483.png"><img width="244" height="23" title="image" style="padding-top: 0px;padding-left: 0px;margin: 0px;padding-right: 0px;border: 0px" alt="image" src="https://msdnshared.blob.core.windows.net/media/2016/09/image_thumb400.png" border="0" /></a></blockquote>
<strong>Third, set the external URL to be the same as the internal URL for the application (and make sure your external DNS has a CNAME set as instructed in the portal):</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0071.png"><img width="336" height="23" title="clip_image007" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image007" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image007_thumb1.png" border="0" /></a>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0082.png"><img width="335" height="47" title="clip_image008" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image008" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image008_thumb1.png" border="0" /></a>

<strong>Fourth, upload a SSL certificate for the URL specified. This certificate must be trusted by any machine that will be accessing SharePoint. OOS does not play well with untrusted certificates.</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0091.png"><img width="335" height="76" title="clip_image009" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image009" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image009_thumb1.png" border="0" /></a>

<strong>For this example I'm using a wildcard certificate but this is not a requirement.</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0102.png"><img width="335" height="234" title="clip_image010" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image010" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image010_thumb1.png" border="0" /></a>

<strong>Fifth, configure the internal authentication for OOS to "none." Remember, this is handled by an authorization token passed as part of the request.</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0111.png"><img width="334" height="37" title="clip_image011" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image011" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image011_thumb1.png" border="0" /></a>

<strong>Test Office Online Server</strong>

Now that this is configured I can access my SharePoint site over the internet and also use OOS

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0121.png"><img width="334" height="188" title="clip_image012" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image012" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image012_thumb1.png" border="0" /></a>
<h3></h3>
<h3>Publish a Friendly URL for SharePoint</h3>
The third change to cover is publishing SharePoint using the same URL that is used internally. This is very similar to configuring OOS.

<strong>First configure the Azure AD App Proxy to use the same URL that is used internally</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0132.png"><img width="330" height="88" title="clip_image013" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image013" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image013_thumb1.png" border="0" /></a>

<strong>Second, create a public facing CNAME record</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0141.png"><img width="327" height="19" title="clip_image014" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image014" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image014_thumb1.png" border="0" /></a>

<strong>Third, upload a certificate. Since I have wildcard certificate, I’m using the same one as I did for OOS</strong>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image01011.png"><img width="330" height="231" title="clip_image010[1]" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image010[1]" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0101_thumb1.png" border="0" /></a>

<strong>Test access</strong>

Now I can access my Sharepoint 2016 on-prem site over the internet using the same URL that I do internally

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0151.png"><img width="329" height="259" title="clip_image015" style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" alt="clip_image015" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image015_thumb1.png" border="0" /></a>

&nbsp;
<h3>Next Steps</h3>
With the above information and the original Azure AD App Proxy blog for publishing SharePoint 2013 we can now access our SharePoint 2016 farm over the internet and all get full functionality of Office Online Server. Since this is being handled by Azure AD we can also add functionality such as multifactor authentication or allow users to self-assign access to this service through Azure AD.

&nbsp;
<h3>Additional Resources</h3>
Azure AD Premium (AADP is also included with EMS)
<a href="https://azure.microsoft.com/en-us/documentation/articles/active-directory-editions/#application-proxy">https://azure.microsoft.com/en-us/documentation/articles/active-directory-editions/#application-proxy</a>

How to provide secure remote access to on-premises applications
<a href="https://azure.microsoft.com/en-us/documentation/articles/active-directory-application-proxy-get-started/">https://azure.microsoft.com/en-us/documentation/articles/active-directory-application-proxy-get-started/</a>

Enable Application Proxy in the Azure portal
<a href="https://azure.microsoft.com/en-us/documentation/articles/active-directory-application-proxy-enable/">https://azure.microsoft.com/en-us/documentation/articles/active-directory-application-proxy-enable/</a>

Publish applications using Azure AD Application Proxy
<a href="https://azure.microsoft.com/en-us/documentation/articles/active-directory-application-proxy-publish/">https://azure.microsoft.com/en-us/documentation/articles/active-directory-application-proxy-publish/</a>

Working with custom domains in Azure AD Application Proxy
<a href="https://azure.microsoft.com/en-us/documentation/articles/active-directory-application-proxy-custom-domains/">https://azure.microsoft.com/en-us/documentation/articles/active-directory-application-proxy-custom-domains/</a>

New-OfficeWebAppsHost
<a href="https://technet.microsoft.com/en-us/library/jj219459.aspx" title="https://technet.microsoft.com/en-us/library/jj219459.aspx">https://technet.microsoft.com/en-us/library/jj219459.aspx</a>]]></content:encoded>
    </item>
    <item>
      <title>Redirect from HTTP to HTTPS using the IIS URL Rewrite module</title>
      <link>https://docs.microsoft.com/archive/blogs/dawiese/redirect-from-http-to-https-using-the-iis-url-rewrite-module</link>
      <pubDate>Tue, 07 Jun 2016 11:22:40 GMT</pubDate>
      <dc:creator><![CDATA[Damian Wiese]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/dawiese/?p=565</guid>
      <description><![CDATA[A production deployment of SharePoint 2013 or 2016 should ensure that all HTTP traffic is encrypted...]]></description>
      <content:encoded><![CDATA[A production deployment of SharePoint 2013 or 2016 should ensure that all HTTP traffic is encrypted in transit, however many users will still type https:// in their browser or have links that point to https:// instead of  https://. In these cases it can beneficial to automatically redirect users to the proper URL. One way of accomplishing this is the URL Rewrite module for IIS.
<h2>Key Terms</h2>
<strong>Rewrite</strong> - Modifies the incoming URL, the outgoing URL, or both.

<strong>Redirection </strong>- Uses HTTP status codes such as 301 or 302 to redirect the client to a different location. This involves an additional client round trip.
<h2></h2>
<h2>Supportability for SharePoint</h2>
The support for redirects and rewrites with SharePoint is documented in <a href="https://support.microsoft.com/en-us/kb/2818415">KB2818415</a>. Since a HTTP 301/302 redirect to inform the browser of the updated URL is the preferred option for SharePoint, that will be the focus of this post. Please note that 301/302 redirects may not work with Office client applications.
<h2></h2>
<h2>Uses for redirect</h2>
In most cases a redirect is used for one of two reasons:
<ol>
	<li>Redirecting the user from http to https to enforce SSL communication. When a SharePoint farm is load balanced this is typically done using the load balancer but it some cases can be done on the SharePoint server or another server running IIS by using the IIS URL Rewrite module</li>
	<li>Redirecting a user who has a stale URL, typically when the name is changed during a farm migration or upgrade. This can also be done using a load balancer or any IIS server by implementing the URL Rewrite module.</li>
</ol>
<h2></h2>
<h2>Step by Step Instructions for HTTP to HTTPS redirect</h2>
<h4>#1 Download the URL Rewrite tool by following the instructions <a href="https://www.iis.net/learn/extensions/url-rewrite-module/using-the-url-rewrite-module">here </a></h4>
<h4></h4>
<h4>#2 Ensure that the IIS site you are using is configured for the proper port 80 binding. In this case we are listening for all traffic on port 80. But you could restrict this based on host header as needed</h4>
<a href="https://msdnshared.blob.core.windows.net/media/2016/06/image260.png"><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" title="image" src="https://msdnshared.blob.core.windows.net/media/2016/06/image_thumb174.png" alt="image" width="386" height="233" border="0" /></a>
<h4></h4>
<h4>#3 Create a new URL rewrite rule</h4>
<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image00110.png"><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" title="clip_image001" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image001_thumb7.png" alt="clip_image001" width="387" height="128" border="0" /></a>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0022.png"><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" title="clip_image002" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image002_thumb2.png" alt="clip_image002" width="390" height="92" border="0" /></a>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image003.png"><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" title="clip_image003" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image003_thumb.png" alt="clip_image003" width="394" height="264" border="0" /></a>
<h4></h4>
<h4>#4 Configure Rule Settings Exactly as follows</h4>
<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image00151.png"><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" title="clip_image001[5]" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0015_thumb.png" alt="clip_image001[5]" width="397" height="137" border="0" /></a>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0025.png"><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" title="clip_image002[5]" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0025_thumb.png" alt="clip_image002[5]" width="397" height="196" border="0" /></a>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0035.png"><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" title="clip_image003[5]" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0035_thumb.png" alt="clip_image003[5]" width="397" height="153" border="0" /></a>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0041.png"><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" title="clip_image004" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image004_thumb1.png" alt="clip_image004" width="397" height="186" border="0" /></a>

Note: In this example {HTTPS}, {HTTP_HOST}, and {REQUEST_URI} are all URL parts that can be accessed using the URL Rewrite module. More information on URL parts can be found <a href="https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Accessing_URL_Parts_from_a_Rewrite_Rule">here</a>.

&nbsp;
<h4>#5 Apply the rule</h4>
<a href="https://msdnshared.blob.core.windows.net/media/2016/06/image261.png"><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" title="image" src="https://msdnshared.blob.core.windows.net/media/2016/06/image_thumb175.png" alt="image" width="401" height="100" border="0" /></a>
<h4></h4>
<h4>#6 From the top node disable and enable the rule (alternatively perform IISReset)</h4>
<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image00191.png"><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" title="clip_image001[9]" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0019_thumb.png" alt="clip_image001[9]" width="399" height="142" border="0" /></a>

<a href="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0029.png"><img style="padding-top: 0px;padding-left: 0px;padding-right: 0px;border-width: 0px" title="clip_image002[9]" src="https://msdnshared.blob.core.windows.net/media/2016/06/clip_image0029_thumb.png" alt="clip_image002[9]" width="400" height="144" border="0" /></a>

&nbsp;
<h4>Note: web.config file modifications</h4>
The URL rewrite rules get written to the web.config file for the site you are working in. For example, the above configuration should result in this addition to the web.config file:

<!-- HTML generated using hilite.me -->
<div style="overflow: auto;width: auto;background: #ffffff;padding: 0.2em 0.6em 0.2em 0.6em">
<table>
<tbody>
<tr>
<td>
<pre style="margin: 0px;line-height: 125%"> 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11</pre>
</td>
<td>
<pre style="margin: 0px;line-height: 125%"><span style="color: #007700">&lt;rewrite&gt;</span>
	<span style="color: #007700">&lt;rules&gt;</span>
		<span style="color: #007700">&lt;rule</span> <span style="color: #0000cc">name=</span><span style="background-color: #fff0f0">"Redirect to http"</span> <span style="color: #0000cc">enabled=</span><span style="background-color: #fff0f0">"true"</span> <span style="color: #0000cc">patternSyntax=</span><span style="background-color: #fff0f0">"Wildcard"</span> <span style="color: #0000cc">stopProcessing=</span><span style="background-color: #fff0f0">"true"</span><span style="color: #007700">&gt;</span>
			<span style="color: #007700">&lt;match</span> <span style="color: #0000cc">url=</span><span style="background-color: #fff0f0">"*"</span> <span style="color: #0000cc">negate=</span><span style="background-color: #fff0f0">"false"</span> <span style="color: #007700">/&gt;</span>
			<span style="color: #007700">&lt;conditions</span> <span style="color: #0000cc">logicalGrouping=</span><span style="background-color: #fff0f0">"MatchAny"</span><span style="color: #007700">&gt;</span>
				<span style="color: #007700">&lt;add</span> <span style="color: #0000cc">input=</span><span style="background-color: #fff0f0">"{HTTPS}"</span> <span style="color: #0000cc">pattern=</span><span style="background-color: #fff0f0">"off"</span> <span style="color: #007700">/&gt;</span>
			<span style="color: #007700">&lt;/conditions&gt;</span>
			<span style="color: #007700">&lt;action</span> <span style="color: #0000cc">type=</span><span style="background-color: #fff0f0">"Redirect"</span> <span style="color: #0000cc">url=</span><span style="background-color: #fff0f0">"https://{HTTP_HOST}{REQUEST_URI}"</span> <span style="color: #0000cc">redirectType=</span><span style="background-color: #fff0f0">"Found"</span> <span style="color: #007700">/&gt;</span>
		<span style="color: #007700">&lt;/rule&gt;</span>
	<span style="color: #007700">&lt;/rules&gt;</span>
<span style="color: #007700">&lt;/rewrite&gt;</span>
</pre>
</td>
</tr>
</tbody>
</table>
</div>
<h3>Additional Resources</h3>
<strong>Creating Rewrite Rules for the URL Rewrite Module
</strong><a href="https://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module">https://www.iis.net/learn/extensions/url-rewrite-module/creating-rewrite-rules-for-the-url-rewrite-module</a>

<strong>Supportability of Rewrite and Redirects with SharePoint 2007/2010/2013
</strong><a href="https://support.microsoft.com/kb/2818415">https://support.microsoft.com/kb/2818415</a>

<strong>Mixed Http and Https Content with SharePoint 2010
</strong><a href="https://blogs.visigo.com/chriscoulson/mixed-http-and-https-content-with-sharepoint-2010/">https://blogs.visigo.com/chriscoulson/mixed-http-and-https-content-with-sharepoint-2010/</a>

<strong>URL Rewrite for IIS7 http to https redirection
</strong><a href="https://tech.mikeal.com/blog1.php/url-rewrite-for-iis7-http-to-https-redirection">https://tech.mikeal.com/blog1.php/url-rewrite-for-iis7-http-to-https-redirection</a>

<strong>URL Component Reference
</strong><a href="https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Accessing_URL_Parts_from_a_Rewrite_Rule">https://www.iis.net/learn/extensions/url-rewrite-module/url-rewrite-module-configuration-reference#Accessing_URL_Parts_from_a_Rewrite_Rule</a>]]></content:encoded>
    </item>
  </channel>
</rss>