This posting presents a case study on how to develop the methods for removing Microsoft Project-related missing dependencies that may be found when upgrading a SharePoint 2010 site collection to SharePoint 2013. The site collection in this study is in a dedicated content database that in turn is mounted to a dedicated web application. The need for resolving these Project-related missing dependencies is due to the fact that an instance of Microsoft Project Server 2010 was originally deployed and integrated with the SharePoint 2010 farm, and Project-related features were activated in the site collection, but then all Project-related portfolios were migrated to SharePoint Online and the various Project-related features and artifacts were left in the site collection but no longer used. Three types of Project-related missing dependencies were found:

  • MissingSiteDefinition
  • MissingFeature
  • MissingAssembly

Methods for developing resolutions for each of these will be presented here. This case study presumes that:

  • All SQL queries are engaged against a full backup copy of the production content database that has been restored to a development 2013 farm
  • The full backup used here for developing the resolutions will not be used for the actual production upgrade but only for testing purposes.
  • All SQL queries are performed on the test instance of the content database, and no SQL queries are performed against that copy of the content database that will be used for the actual upgrade

This posting begins at the point where:

  1. A copy of the full backup has been restored to the development SharePoint 2013 farm but not yet mounted to that farm;
  2. Test-SPContentDatabase has been executed against this test instance of the content database and the resultant report saved to a CSV file.

The effort then is to use the development copy of the database as the source for the data needed to develop many of the PowerShell scripts that will later be implemented on the actual production upgrade to resolve missing dependency problems.

Results of Test-SPContentDatabase

This work begins by reviewing the missing Project-related dependencies found in the report generated by Test-SPContentDatabase.

# Category Error UpgradeBlocking Message
01 MissingSiteDefinition TRUE FALSE 13 Sites in database [SP2010_Content_ORG] have reference(s) to a missing site definition, Id = [6215], Lcid = [1033], compatibility level = [14].
02 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Server Approval Content Type], Id = [ad739f9e-1525-4dec-a25e-10821ca70c95]
03 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Proposal Workflow], Id = [7a8b11f4-38b2-402b-ad94-1213e25150ca]
04 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Site Risks], Id = [448e1394-5e76-44b4-9e1c-169b7a389a1b]
05 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Site Document Libraries], Id = [525dc00c-0745-47c0-8073-221c2ec22f0f]
06 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Site Commitments], Id = [d8d8df90-7b1f-49c1-b170-6f46a94f8c3c]
07 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Site Issues], Id = [60d1e34f-0eb3-4e56-9049-85daabfec68c]
08 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Web App Ribbon], Id = [1d253548-c70d-40fd-9930-9d313bedc359]
09 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Sample Proposal], Id = [6abbc685-51bd-4999-946b-b2946fb80981], Description = [Sample workflow for Project Server], Install Location = [PSWDefault].
10 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Sites Collaboration Lists], Id = [90014905-433f-4a06-8a61-fd153a27a2b5]
11 MissingAssembly TRUE FALSE Assembly [Microsoft.Office.Project.Server.PWA,Version=, Culture=neutral,PublicKeyToken=71e9bce111e9429c] is referenced in the database [SP2010_Content_ORG], but is not installed on the current farm. Please install any feature/solution which contains this assembly.

Each of these missing Project-related dependencies must be resolved.

NOTE: spaces were introduced into the Assembly name shown in the listing above to enable the table to render completely in the space available. Use the one presented in your own report.

Problem categories will be engaged in the order in which they appeared in the report.

Resolving Missing Site Definition

  1. Review the report generated by Test-SPContentDatabase.
  2. Document relevant information for the missing site definition.For example:
    # Site Definition ID Site Definition LCID Site Definition Sites
    01 6215 1033 13
  3. Generate the Enumerate All Webs report for the site collection on the existing production 2010 farm.
  4. In this report, search for entries containing the site definition ID, 6215. For example:
    EnumAllWebs Entry
    <Web Id="c882041d-4cdd-48c8-b1a8-e80bd74a56a7" Url="/Web1/Web11/Web111" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    <Web Id="81b14644-2d05-4554-a14f-1e8cd0b5f863" Url="/Web2" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    <Web Id="83717ae3-3baf-475f-95e0-20dbf3a0e08d" Url="/Web3/Web3a" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    <Web Id="8833d95f-33a0-4974-94c0-dea00be03496" Url="/Web3/Web3b" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    <Web Id="9b55c3d1-5723-4b40-950f-642899083d9a" Url="/Web3/Web3c" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    <Web Id="3c92fc86-6f46-416e-83cf-3d33a46d57fa" Url="/Web3/Web3d" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    <Web Id="2bbf9263-79b5-416c-a605-0dcb3743252a" Url="/Web3/Web3e" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    <Web Id="71822890-f65a-44c4-a257-38587a29a0d1" Url="/Web3/Web3f" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    <Web Id="78e70085-dbb2-4f48-83bd-393ea8a83b04" Url="/Web3/Web3g" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    <Web Id="797fbb8b-717e-4843-b91e-9478d40b3ab0" Url="/Web3/Web3h" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    Web Id="260d0bcd-c3ee-4a04-b98a-63182ee58292" Url="/Web3/Web3i" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    <Web Id="33d11eb5-c21c-4487-ba53-fa730fa2dcca" Url="/Web3/Web3j" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">
    <Web Id="651f695d-1413-4f19-8819-caa0ee8160dd" Url="/Web3/Web3k" LanguageId="1033" TemplateName="PWS#0" TemplateId="6215">

    Document the TemplateName value that is found, PWS#0, and the LCID, 1033.

  5. View the source of a page in one of these sites and search for these variables:
    • g_wsaLCID
    • g_wsaSiteTemplateId

    For example:

    Page Variable Value
    g_wsaLCID 1033
    g_wsaSiteTemplateId 6215

    Verified that these values match what was found in the Enumerate All Webs report.

  6. On the production 2010 farm, in the 14 hive, navigate to this subdirectory and verify that it contains the PWS folder:
    [system drive]\Program Files\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\SiteTemplates\
  7. On the production 2010 farm, in the 14 hive, navigate to this subdirectory and verify that it contains a webtemppwa.xml file:
    [system drive]\Program Files\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\1033\XML\
  8. On the development 2013 farm, in the 14 and 15 hives, navigate to these subdirectories and and verify that they do not contain a PWS folder:
    [system drive]\Program Files\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\SiteTemplates\

    [system drive]\Program Files\Common Files\Microsoft Shared\web server extensions\15\TEMPLATE\SiteTemplates\

  9. On the development 2013 farm, in the 14 and 15 hives, navigate to these subdirectories and verify that they do not contain a webtemppwa.xml web template file:
    [system drive]\Program Files\Common Files\Microsoft Shared\web server extensions\14\TEMPLATE\1033\XML

    [system drive]\Program Files\Common Files\Microsoft Shared\web server extensions\15\TEMPLATE\1033\XML

  10. Copy the PWS folder on the production 2010 farm, to the \TEMPLATES\SiteTemplates\ folder in both the 14 and 15 hives on the development 2013 farm.
  11. Copy the ONET.XML file on the production 2010 farm to the \TEMPLATE\1033\XML\ folder in both the 14 and 15 hives on the development 2013 farm.
  12. To verify that these steps resolve the missing site definition, dismount the content database and then re-execute Test-SPContentDatabase.

Resolving Missing Features

  1. Review the report generated by Test-SPContentDatabase.
  2. Document relevant information for each of the missing features listed in this report. For example:
    # Feature Name Feature ID
    02 Project Server Approval Content Type ad739f9e-1525-4dec-a25e-10821ca70c95
    03 Project Proposal Workflow 7a8b11f4-38b2-402b-ad94-1213e25150ca
    04 Project Site Risks 448e1394-5e76-44b4-9e1c-169b7a389a1b
    05 Project Site Document Libraries 525dc00c-0745-47c0-8073-221c2ec22f0f
    06 Project Site Commitments d8d8df90-7b1f-49c1-b170-6f46a94f8c3c
    07 Project Site Issues 60d1e34f-0eb3-4e56-9049-85daabfec68c
    08 Project Web App Ribbon 1d253548-c70d-40fd-9930-9d313bedc359
    09 Sample Proposal 6abbc685-51bd-4999-946b-b2946fb80981
    10 Project Sites Collaboration Lists 90014905-433f-4a06-8a61-fd153a27a2b5
  3. On the development 2013 farm's SQL Server, in SQL Server Management Studio, open a new query window and execute the following script:
    USE SP2010_Content_ORG
    SELECT SiteID, WebID, FeatureID
    FROM Features WITH (NoLOCK)
    WHERE FeatureID IN ('ad739f9e-1525-4dec-a25e-10821ca70c95',

    This SQL script interrogates the Features table, which tracks those features in the Site and Web feature collections.  This script will return something like the following:

    SiteID WebID FeatureID
    41161F28-172E-4A77-8CA9-A9D97B392BEB 00000000-0000-0000-0000-000000000000 1D253548-C70D-40FD-9930-9D313BEDC359
    41161F28-172E-4A77-8CA9-A9D97B392BEB 00000000-0000-0000-0000-000000000000 6ABBC685-51BD-4999-946B-B2946FB80981
    41161F28-172E-4A77-8CA9-A9D97B392BEB 00000000-0000-0000-0000-000000000000 AD739F9E-1525-4DEC-A25E-10821CA70C95
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 2BBF9263-79B5-416C-A605-0DCB3743252A 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 2BBF9263-79B5-416C-A605-0DCB3743252A 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 2BBF9263-79B5-416C-A605-0DCB3743252A 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 2BBF9263-79B5-416C-A605-0DCB3743252A 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 2BBF9263-79B5-416C-A605-0DCB3743252A D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 33D11EB5-C21C-4487-BA53-FA730FA2DCCA 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 33D11EB5-C21C-4487-BA53-FA730FA2DCCA 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 33D11EB5-C21C-4487-BA53-FA730FA2DCCA 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 33D11EB5-C21C-4487-BA53-FA730FA2DCCA 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 33D11EB5-C21C-4487-BA53-FA730FA2DCCA D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 3C92FC86-6F46-416E-83CF-3D33A46D57FA 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 3C92FC86-6F46-416E-83CF-3D33A46D57FA 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 3C92FC86-6F46-416E-83CF-3D33A46D57FA 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 3C92FC86-6F46-416E-83CF-3D33A46D57FA 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 3C92FC86-6F46-416E-83CF-3D33A46D57FA D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 4C39BCD0-6AE1-423D-99A1-78EB4FE3B5FF 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 4C39BCD0-6AE1-423D-99A1-78EB4FE3B5FF 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 4C39BCD0-6AE1-423D-99A1-78EB4FE3B5FF 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 4C39BCD0-6AE1-423D-99A1-78EB4FE3B5FF 7A8B11F4-38B2-402B-AD94-1213E25150CA
    41161F28-172E-4A77-8CA9-A9D97B392BEB 4C39BCD0-6AE1-423D-99A1-78EB4FE3B5FF 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 4C39BCD0-6AE1-423D-99A1-78EB4FE3B5FF D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 651F695D-1413-4F19-8819-CAA0EE8160DD 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 651F695D-1413-4F19-8819-CAA0EE8160DD 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 651F695D-1413-4F19-8819-CAA0EE8160DD 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 651F695D-1413-4F19-8819-CAA0EE8160DD 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 651F695D-1413-4F19-8819-CAA0EE8160DD D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 6E1556DC-0895-438D-89B5-2BBB1062E02A 7A8B11F4-38B2-402B-AD94-1213E25150CA
    41161F28-172E-4A77-8CA9-A9D97B392BEB 71822890-F65A-44C4-A257-38587A29A0D1 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 71822890-F65A-44C4-A257-38587A29A0D1 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 71822890-F65A-44C4-A257-38587A29A0D1 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 71822890-F65A-44C4-A257-38587A29A0D1 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 71822890-F65A-44C4-A257-38587A29A0D1 D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 78E70085-DBB2-4F48-83BD-393EA8A83B04 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 78E70085-DBB2-4F48-83BD-393EA8A83B04 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 78E70085-DBB2-4F48-83BD-393EA8A83B04 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 78E70085-DBB2-4F48-83BD-393EA8A83B04 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 78E70085-DBB2-4F48-83BD-393EA8A83B04 D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 797FBB8B-717E-4843-B91E-9478D40B3AB0 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 797FBB8B-717E-4843-B91E-9478D40B3AB0 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 797FBB8B-717E-4843-B91E-9478D40B3AB0 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 797FBB8B-717E-4843-B91E-9478D40B3AB0 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 797FBB8B-717E-4843-B91E-9478D40B3AB0 D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 81B14644-2D05-4554-A14F-1E8CD0B5F863 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 81B14644-2D05-4554-A14F-1E8CD0B5F863 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 81B14644-2D05-4554-A14F-1E8CD0B5F863 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 81B14644-2D05-4554-A14F-1E8CD0B5F863 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 81B14644-2D05-4554-A14F-1E8CD0B5F863 D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 83717AE3-3BAF-475F-95E0-20DBF3A0E08D 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 83717AE3-3BAF-475F-95E0-20DBF3A0E08D 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 83717AE3-3BAF-475F-95E0-20DBF3A0E08D 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 83717AE3-3BAF-475F-95E0-20DBF3A0E08D 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 83717AE3-3BAF-475F-95E0-20DBF3A0E08D D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 8833D95F-33A0-4974-94C0-DEA00BE03496 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 8833D95F-33A0-4974-94C0-DEA00BE03496 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 8833D95F-33A0-4974-94C0-DEA00BE03496 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 8833D95F-33A0-4974-94C0-DEA00BE03496 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 8833D95F-33A0-4974-94C0-DEA00BE03496 D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 90329D87-1140-49BA-B659-B6344F73E525 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 90329D87-1140-49BA-B659-B6344F73E525 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 90329D87-1140-49BA-B659-B6344F73E525 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 90329D87-1140-49BA-B659-B6344F73E525 7A8B11F4-38B2-402B-AD94-1213E25150CA
    41161F28-172E-4A77-8CA9-A9D97B392BEB 90329D87-1140-49BA-B659-B6344F73E525 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 90329D87-1140-49BA-B659-B6344F73E525 D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 9B55C3D1-5723-4B40-950F-642899083D9A 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 9B55C3D1-5723-4B40-950F-642899083D9A 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB 9B55C3D1-5723-4B40-950F-642899083D9A 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 9B55C3D1-5723-4B40-950F-642899083D9A 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 9B55C3D1-5723-4B40-950F-642899083D9A D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB C882041D-4CDD-48C8-B1A8-E80BD74A56A7 448E1394-5E76-44B4-9E1C-169B7A389A1B
    41161F28-172E-4A77-8CA9-A9D97B392BEB C882041D-4CDD-48C8-B1A8-E80BD74A56A7 525DC00C-0745-47C0-8073-221C2EC22F0F
    41161F28-172E-4A77-8CA9-A9D97B392BEB C882041D-4CDD-48C8-B1A8-E80BD74A56A7 60D1E34F-0EB3-4E56-9049-85DAABFEC68C
    41161F28-172E-4A77-8CA9-A9D97B392BEB C882041D-4CDD-48C8-B1A8-E80BD74A56A7 90014905-433F-4A06-8A61-FD153A27A2B5
    41161F28-172E-4A77-8CA9-A9D97B392BEB C882041D-4CDD-48C8-B1A8-E80BD74A56A7 D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C
    41161F28-172E-4A77-8CA9-A9D97B392BEB FB68983E-3B9B-446C-ABB8-4EFC8D308A19 7A8B11F4-38B2-402B-AD94-1213E25150CA

    A WebID of 00000000-0000-0000-0000-000000000000 indicates that the feature has site collection scope and not web scope. This SQL query helps find missing feature references within the Features table. To get the names and URLs of the webs with the WebIDs listed above, modify the SQL script with a LEFT JOIN on the AllWebs table ON the web IDs.

  4. Mount the target content database to the development 2013 farm.
  5. Copy the table from step 3 above into a spreadsheet. having the same column headers, SiteID, WebID and FeatureID. Use the spreadsheet to quickly create a function for each table row dataset.
  6. For site features, use this statement:
    =CONCAT("$Site=Get-SPSite -Identity """,A2,""";$Site.Features.Remove(""",C2,""", $True)")
  7. For web features, use this statement;
    =CONCAT("(Get-SPWeb -Identity """,B5,""" -Site """,A5,""").Features.Remove(""",C5,""", $True)")
  8. Drag to create the set of statements needed to remove all of the missing features.
  9. On the 2013 development farm server, in an elevated SharePoint Management Shell, execute the statements generated by selecting and copying them from the spreadsheet and then pasting them into the shell. They'll execute immediately.
  10. If the SSMS query window is still open, re-execute the query to verify that the feature references have been removed from the Features table.
  11. On a development 2013 SharePoint server, in an elevated SharePoint Management Shell, dismount the content database by executing this command:
    Dismount-SPContentDatabase -Identity "2c5a03b6-a875-4994-9c50-59860c507904" -Confirm:$False
  12. In the same shell, perform a test up grade by executing this command:
    Test-SPContentDatabase -name "[database name]" -webapplication "[web application url]" | Export-CSV -Path "report.CSV"

    Filtering for Project-related problems only, this returned something like the following:

    # Category Error UpgradeBlocking Message
    03 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Proposal Workflow], Id = [7a8b11f4-38b2-402b-ad94-1213e25150ca]
    04 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Site Risks], Id = [448e1394-5e76-44b4-9e1c-169b7a389a1b]
    05 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Site Document Libraries], Id = [525dc00c-0745-47c0-8073-221c2ec22f0f]
    06 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Site Commitments], Id = [d8d8df90-7b1f-49c1-b170-6f46a94f8c3c]
    07 MissingFeature TRUE FALSE Database [SP2010_Content_ORG] has reference(s) to a missing feature: Name = [Project Site Issues], Id = [60d1e34f-0eb3-4e56-9049-85daabfec68c]
    11 MissingAssembly TRUE FALSE Assembly [Microsoft.Office.Project.Server.PWA,Version=, Culture=neutral,PublicKeyToken=71e9bce111e9429c] is referenced in the database [SP2010_Content_ORG], but is not installed on the current farm. Please install any feature/solution which contains this assembly.

    Though missing feature references, ad739f9e-1525-4dec-a25e-10821ca70c95,1d253548-c70d-40fd-9930-9d313bedc359,6abbc685-51bd-4999-946b-b2946fb80981 and90014905-433f-4a06-8a61-fd153a27a2b5, have been removed, five of them remain.

  13. Open a new SQL query window and execute the following:
    USE SP2010_Content_ORG
    USE SP2010_Content_ORG
    SELECT tp_SiteID, tp_FeatureID, tp_WebID, tp_Title, tp_BaseType, AllWebs.FullUrl
    FROM AllLists WITH (NoLOCK)
        LEFT JOIN AllWebs ON AllWebs.ID = AllLists.tp_WebID
    WHERE tp_FeatureID IN ('ad739f9e-1525-4dec-a25e-10821ca70c95', 

    The previous SQL script identified all of the Project-related features that were then stored in the Site and Web Features collections; and these were then removed using the respective collection's Remove methods.  While the previous script removed the active instances of those Project-related features, it did not remove the artifacts associated with those features, such as lists and document libraries that those features create.  That's what the current SQL script does.

    The current SQL script will return something like the listing below. Color coding is implemented to more clearly see the relationships between a missing feature listed in the Test-SPContentDatabase report and the listing returned from the AllLists table.

    tp_SiteID tp_FeatureID tp_WebID tp_Title tp_BaseType AllWebs.FullUrl
    41161F28-172E-4A77-8CA9-A9D97B392BEB 448E1394-5E76-44B4-9E1C-169B7A389A1B 33512FA1-4300-491C-A40A-843DF49194B2 Risks 0 web1/web11
    41161F28-172E-4A77-8CA9-A9D97B392BEB D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C 33512FA1-4300-491C-A40A-843DF49194B2 Deliverables 0 web1/web11
    41161F28-172E-4A77-8CA9-A9D97B392BEB 448E1394-5E76-44B4-9E1C-169B7A389A1B C882041D-4CDD-48C8-B1A8-E80BD74A56A7 Risks 0 web2/web21/web211
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F C882041D-4CDD-48C8-B1A8-E80BD74A56A7 Project Documents 1 web2/web21/web211
    41161F28-172E-4A77-8CA9-A9D97B392BEB 60D1E34F-0EB3-4E56-9049-85DAABFEC68C C882041D-4CDD-48C8-B1A8-E80BD74A56A7 Issues 0 web2/web21/web211
    41161F28-172E-4A77-8CA9-A9D97B392BEB D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C C882041D-4CDD-48C8-B1A8-E80BD74A56A7 Deliverables 0 web2/web21/web211
    41161F28-172E-4A77-8CA9-A9D97B392BEB 448E1394-5E76-44B4-9E1C-169B7A389A1B F674C2C8-B055-449E-A957-BD5DD9B785E8 Risks 0 web3/web31/web311
    41161F28-172E-4A77-8CA9-A9D97B392BEB D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C F674C2C8-B055-449E-A957-BD5DD9B785E8 Deliverables 0 web3/web31/web311
    41161F28-172E-4A77-8CA9-A9D97B392BEB 448E1394-5E76-44B4-9E1C-169B7A389A1B 9583813F-4E19-4ED6-9EFD-D72F496A24AC Risks 0 web3web31/web312
    41161F28-172E-4A77-8CA9-A9D97B392BEB D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C 9583813F-4E19-4ED6-9EFD-D72F496A24AC Deliverables 0 web3/web31/web312
    41161F28-172E-4A77-8CA9-A9D97B392BEB 7A8B11F4-38B2-402B-AD94-1213E25150CA 6E1556DC-0895-438D-89B5-2BBB1062E02A Proposal proxy list 0 web4
    41161F28-172E-4A77-8CA9-A9D97B392BEB 7A8B11F4-38B2-402B-AD94-1213E25150CA FB68983E-3B9B-446C-ABB8-4EFC8D308A19 Proposal proxy list 0 web4/web41
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 81B14644-2D05-4554-A14F-1E8CD0B5F863 Shared Documents 1 web5
    41161F28-172E-4A77-8CA9-A9D97B392BEB 448E1394-5E76-44B4-9E1C-169B7A389A1B 90329D87-1140-49BA-B659-B6344F73E525 Risks 0 web6
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 90329D87-1140-49BA-B659-B6344F73E525 Project Documents 1 web6
    41161F28-172E-4A77-8CA9-A9D97B392BEB 60D1E34F-0EB3-4E56-9049-85DAABFEC68C 90329D87-1140-49BA-B659-B6344F73E525 Issues 0 web6
    41161F28-172E-4A77-8CA9-A9D97B392BEB 7A8B11F4-38B2-402B-AD94-1213E25150CA 90329D87-1140-49BA-B659-B6344F73E525 Proposal proxy list 0 web6
    41161F28-172E-4A77-8CA9-A9D97B392BEB D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C 90329D87-1140-49BA-B659-B6344F73E525 Deliverables 0 web6
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 83717AE3-3BAF-475F-95E0-20DBF3A0E08D Shared Documents 1 web6/web61
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 8833D95F-33A0-4974-94C0-DEA00BE03496 Shared Documents 1 web6/web62
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 9B55C3D1-5723-4B40-950F-642899083D9A Shared Documents 1 web6/web63
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 3C92FC86-6F46-416E-83CF-3D33A46D57FA Shared Documents 1 web6/web64
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 2BBF9263-79B5-416C-A605-0DCB3743252A Shared Documents 1 web6/web65
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 71822890-F65A-44C4-A257-38587A29A0D1 Shared Documents 1 web6/web66
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 78E70085-DBB2-4F48-83BD-393EA8A83B04 Shared Documents 1 web6/web67
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 797FBB8B-717E-4843-B91E-9478D40B3AB0 Shared Documents 1 web6/web68
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 260D0BCD-C3EE-4A04-B98A-63182EE58292 Shared Documents 1 web6/web69
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 33D11EB5-C21C-4487-BA53-FA730FA2DCCA Shared Documents 1 web6/web6A
    41161F28-172E-4A77-8CA9-A9D97B392BEB 525DC00C-0745-47C0-8073-221C2EC22F0F 651F695D-1413-4F19-8819-CAA0EE8160DD Shared Documents 1 web6/web6B
    41161F28-172E-4A77-8CA9-A9D97B392BEB 448E1394-5E76-44B4-9E1C-169B7A389A1B 4C39BCD0-6AE1-423D-99A1-78EB4FE3B5FF Risks 0  
    41161F28-172E-4A77-8CA9-A9D97B392BEB 60D1E34F-0EB3-4E56-9049-85DAABFEC68C 4C39BCD0-6AE1-423D-99A1-78EB4FE3B5FF Issues 0  
    41161F28-172E-4A77-8CA9-A9D97B392BEB 7A8B11F4-38B2-402B-AD94-1213E25150CA 4C39BCD0-6AE1-423D-99A1-78EB4FE3B5FF Proposal proxy list 0  
    41161F28-172E-4A77-8CA9-A9D97B392BEB D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C 4C39BCD0-6AE1-423D-99A1-78EB4FE3B5FF Deliverables 0  

    A basetype of "1" indicates a document library, and "0" indicates a standard list. Each of these lists and tables need to be permanently removed.

  14. Open a new spreadsheet in the workbook and copy these results onto the spreadsheet.
  15. Use the new spreadsheet to quickly generate PowerShell statements for removing each of these SPList references.  For example:
    =CONCAT("(Get-SPSite -Identity """,A2,""").openweb(""/",F2,""").lists[""",D2,"""].Delete()")
  16. Drag to create the set of statements needed to remove all of the missing features.
  17. On the 2013 development farm server, in an elevated SharePoint Management Shell, execute the statements generated by selecting and copying them from the spreadsheet and then pasting them into the shell. They'll execute immediately.
  18. If the SSMS query window is still open, re-execute the query to verify that the feature references have been removed from the AllLists table.
  19. Dismount the content database and then repeat executing the Test-SPContentDatabase commandlet. The resulting report no longer lists any Microsoft Project related missing feature dependencies.

Resolving Missing Assemblies

  1. Review the report generated by Test-SPContentDatabase.
  2. Document relevant information for each missing assembly listed in the report. For example:
    # MissingAssembly Name
    11 Microsoft.Office.Project.Server.PWA,Version=, Culture=neutral,PublicKeyToken=71e9bce111e9429
  3. On the development 2013 farm's SQL Server, in SQL Server Management Studio, open a new query window and execute the following SQL script:
    USE SP2010_Content_ORG
    Select SiteID, WebID, HostType, hostId, ID
    FROM EventReceivers (NOLOCK)
    WHERE Assembly = 'Microsoft.Office.Project.Server.PWA,Version=,Culture=neutral,PublicKeyToken=71e9bce111e9429c'

    This returns something like the following:

    SiteID WebID HostType HostID ID
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 2 2C410FC7-96E4-4D12-A04B-13A3897E7C9A 0D6CF7E0-8620-4519-87AE-FCB646CF6262
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 2 2C410FC7-96E4-4D12-A04B-13A3897E7C9A 89F7B630-5902-4A8D-9F2A-C91BA4DA5075
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 2 2C410FC7-96E4-4D12-A04B-13A3897E7C9A A8968EDC-00DA-47B1-AFC7-BD757EEE781C
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 2 30A97B64-6045-43E2-B149-2665CC860403 56476D54-63F4-4D08-9228-5C5FF550E506
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 2 30A97B64-6045-43E2-B149-2665CC860403 72D3074D-58A7-42B3-8519-088F9023FC87
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 2 30A97B64-6045-43E2-B149-2665CC860403 78D70082-A6F3-4E63-8339-3EEE6DF83E5A
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 2 367298CD-5190-4100-9E7E-8B4121BD45F2 3BB2F05A-0643-4FE7-8A2D-6228E5E62F30
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 2 367298CD-5190-4100-9E7E-8B4121BD45F2 4FF9D137-065A-47E7-BD91-98478811BC2D
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 2 367298CD-5190-4100-9E7E-8B4121BD45F2 EDE1E4C6-14D1-461A-9842-A4D627F5BA1A
    41161F28-172E-4A77-8CA9-A9D97B392BEB 260D0BCD-C3EE-4A04-B98A-63182EE58292 2 E9823E3A-0AAC-4911-B753-7416DB51C339 CBEE04B6-FF89-4784-A70C-6E63C4DAD595
    etc ... ... ... ...

    Host Type values can be obtained from the following table:

    HostTypeValue Scope
    0 SPSite
    1 SPWeb
    2 SPList

    294 results were returned in our instance. Only the first ten are listed. All of these are of type SPLIST, which means standard list or document library.

  4. Mount the target content database to the development 2013 farm.
  5. Copy the results returned from the SQL script into a spreadsheet.
  6. Use the spreadsheet to quickly create a line item to remove each of the event receivers.  For example:
    =CONCAT("$Web=Get-SPWeb -Site """,A3,""" -Identity """,B3,""";$list=$Web.lists | ?{$ -eq """, D3, """};($list.EventReceivers | ?{$ -eq """, E3,"""}).delete()")
  7. Drag to create a set of statements needed to remove each missing event receiver reference to the missing assembly. In our case, 294 statements were created and executed. 
  8. Select a batch of these statements, then past into the shell.
  9. If the execution of one or more of these statements returns the following error:
    $Web=Get-SPWeb -Site "41161F28-172E-4A77-8CA9-A9D97B392BEB" -Identity "90329D87-1140-49BA-B659-B6344F73E525";$ist=$Web.lists | ?{$ -eq "86D5D9F3-052F-4A77-9BBB-4861C0AD43BA"};($list.EventReceivers | ?{$ -eq "3BC8BB9A-97E6-434B-86932BEEC9DB21DE"}).delete() You cannot call a method on a null-valued expression. At line:1 char:181 + $Web=Get-SPWeb -Site "41161F28-172E-4A77-8CA9-A9D97B392BEB" -Identity "90329D87- ... + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (:) [], RuntimeException + FullyQualifiedErrorId : InvokeMethodOnNull
    1. First identify the site, web and list associated with the statement or statements that failed.
    2. Then re-execute SQL script to verify that the ID of the event receiver references that couldn't be removed still appear in the SQL script results. All the others should be gone at this point.
    3. Back on the SP server, In the same shell, execute the portion of the statement that returns just the list, and then use $list.title and $list.defaultview url get get navigation information. Also execute $list.EventReceivers | ft -ID to review the list of event receivers that are currently attached to the existing list just to verify that the problematic event receivers are not appearing in this list. The fact that it does not show up for $list.EventReceivers but does show up in the SQL script results indicates that it is not directly attached to the functional list but to something associated with the list at a deeper level.
    4. Finally, open a browser and navigate to the site and search the first and second stage recycle bins for the parent site collection for items deleted from this list and then permanently delete them. Re-execute the SQL script to see if they still appear. It may be that the reference is attached to an item deleted from the list or library and that's what is still showing up. If you cannot find the specific deleted items, just flush everything and re-execute the SQL script. if the IDs still appear, permanently delete the entire list.
  10. If the SSMS query window is still open, re-execute the query to verify that nothing is returned. If nothing is returned from this SQL query, this is a pretty good indication that these orphaned features have been resolved. For the definitive verification, perform another Test-SPContentDatabase to verify that the two missing features no longer appear in the report..


The process presented in this case study was successfully used to remove Microsoft Project related missing dependencies from upgrades of production content databases from SharePoint 2010 to SharePoint 2013. This same approach is used to resolve missing dependencies associated with other farm solutions.


  1. Microsoft Project Server 2010
  2. Microsoft Project Online
  3. Microsoft Project Server 2013
  4. enumallwebs
    1. Stsadm command-line tool (Office SharePoint Server)
    2. enumallwebs (Technet Forum question)
    3. STSADM (Part 3)
    4. Complete reference of all STSADM operations (with parameters) in MOSS 2007 SP1
    5. Stsadm to Microsoft PowerShell mapping in SharePoint Server
    6. Stsadm to Windows PowerShell mapping (SharePoint Foundation 2010)
  5. Get-SPSiteInventory
    1. Get a Web, List and Library Inventory using PowerShell
  6. Features
    1. Find Name of Feature using ID
    2. Activating and Deactivating Features with PowerShell in SharePoint 2010
    3. Feature definition files for features installed in a SharePoint Farm cannot be found
    4. List of feature ID, listTemplate
    5. PowerShell Commands To List SharePoint Features
    6. PowerShell to List Activated Features for a Site and Web
    7. SharePoint: Don’t Forget to Uninstall the Feature
    8. Activating and Deactivating Features with PowerShell
    9. SharePoint 20XX: Solution Deploy, Retract or Upgrade – What causes your SharePoint farm to goes down
    10. Explain it to me: SharePoint deployment scope, solution and features
    11. How to remove orphaned features
    12. SharePoint 2013: Cleanup or remove missing site and web features from farm
  7. Data Types
    1. List Base Type
    2. Event Host Type
  8. Web Templates and Site Definitions
    1. Determine Site Template
    2. Site Definitions and Configurations
    3. Deploy templates (SharePoint Foundation 2010)
    4. Deploy templates (SharePoint Server 2010)
    5. Site Definition and Site Template
    6. SharePoint 2010 and web templates
    7. SharePoint project and project item templates
    8. Understanding WebTemp*.xml Files
    9. Understanding Onet.xml Files
    10. Configuration Element (Site)
    11. WebFeatures Element (Site)
  9. Missing Dependencies
    1. SharePoint 2010: Case Study on How to Resolve Missing PDF Forms Dependencies when Upgrading to SharePoint 2013
  10. SharePoint Database
    1. Database Tables
    2. SharePoint 2013 - The content databases, tables, and SQL queries
  11. Miscellaneous
    1. Support for changes to the databases that are used by Office server products and by Windows SharePoint Services
    2. SharePoint Upgrade: Simple OOTB Inventory Methods Useful for Resolving Missing Dependencies
    3. Inconvenient SPWeb.GetFile(string)
    4. [MS-WSSFO3]: Windows SharePoint Services (WSS): File Operations Database Communications Version 3 Protocol


  • The value found for the SiteTemplate property is composed of the site definition name, PWS, and the ID of the specific configuration in the site definition. Discovering the name of the site definition identifies the folder in the SiteTemplates subdirectory that contains the site definition's ONET.XML file, as this folder must have the same name as the Name attribute of the Template element in the PWS web template file. Discovering the value for the Language Culture ID (LCID) identifies the \14\TEMPLATE subdirectory containing the PWS web template file, WebTemp*.XML.
  • Initially, given that only the PWS site definition was presented in the farm, a web template file having a name like webtemppws.xml was expected. When this was not found, all of the web template files were examined to find one having some form of "PW*". Only one was found, webtemppwa.xml. Inspecting the contents of this file revealed templates for both "PWA" and "PWS", indicating that it was the correct web template file.
  • The missing site definition problem that surfaced in the 2013 upgrade report was not upgrade-blocking to 2013 but it was upgrade-blocking to 2016.
  • The lists and libraries associated with the Microsoft Project PWS feature are created automatically when creating a new site based upon the Project Workspace template. This can be seen by inspecting the contents of the PWS site template file (ONET.XML), which contains a reference to the PWS feature (90014905-433F-4a06-8A61-FD153A27A2B5), indicating that creation of the site automatically activates this feature. Inspecting the PWS feature.xml file located here:
    • C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\FEATURES\PWS\

    we found that it has four activation dependencies (bolded):

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- _lcid="1033" _version="14.0.6015" _dal="1" -->
    <!-- _LocalBinding -->
    -<Feature xmlns="" DefaultResourceFile="core" Scope="Web" ImageUrl="PwsCollab.gif" Description="$Resources:pws,PWSFeatureDesc;" Title="$Resources:pws,PWSFeatureTitle;" Id="90014905-433F-4a06-8A61-FD153A27A2B5">
    <ActivationDependency FeatureId="60D1E34F-0EB3-4E56-9049-85DAABFEC68C"/>
    <ActivationDependency FeatureId="448E1394-5E76-44B4-9E1C-169B7A389A1B"/>
    <ActivationDependency FeatureId="D8D8DF90-7B1F-49C1-B170-6F46A94F8C3C"/>
    <ActivationDependency FeatureId="525DC00C-0745-47C0-8073-221C2EC22F0F"/>
  • Test upgrades and their reports were executing using this syntax:
    Test-SPContentDatabase -name "[database name]" -webapplication "[web application url]" | Export-CSV -Path "report.CSV"
  • According to some sources, the FeatureTracking table lists all features that are available at the site collection and web scope levels, while the Features table lists just those features in FeatureTracking that have been activated. (See Van Janek and Neal Mukundan)
  • The SharePoint Online Team (GROUP#0) and Communication (SITEPAGEPUBLISHING#0) site pages do not employ the g_wsaSiteTemplateID variable.
  • To understand the structure of SharePoint content databases and the data types stored in them, I recommend reviewing [MS-WSSFO3]: Windows SharePoint Services (WSS): File Operations Database Communications Version 3 Protocol.  
  • HELP: I deleted the item, but the missing dependency still shows in the Test-SPContentDatabase report! Check the site collection's first and second stage recycle bins and ensure that you have also deleted the item from these too.