<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:series="https://publishpress.com/"
	>

<channel>
	<title>Marc D Anderson&#039;s Blog</title>
	<atom:link href="https://sympmarc.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://sympmarc.com</link>
	<description>A Knowledge Management Zealot Speaks Out</description>
	<lastBuildDate>Mon, 16 Feb 2026 20:49:06 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/cropped-Marc2024a-scaled-1.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Marc D Anderson&#039;s Blog</title>
	<link>https://sympmarc.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<atom:link rel='hub' href='https://sympmarc.com/?pushpress=hub'/>
<site xmlns="com-wordpress:feed-additions:1">25414286</site>	<item>
		<title>Power Automate: Retrieving More than 256 Rows from an Excel Table</title>
		<link>https://sympmarc.com/2026/02/16/power-automate-retrieving-more-than-256-rows-from-an-excel-table/</link>
					<comments>https://sympmarc.com/2026/02/16/power-automate-retrieving-more-than-256-rows-from-an-excel-table/#respond</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 16 Feb 2026 20:49:00 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Power Automate]]></category>
		<category><![CDATA[Excel]]></category>
		<category><![CDATA[thresholds]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=57737</guid>

					<description><![CDATA[Pulling data out of tables in Excel is a great capability in Power Automate flows. We often use it to load SharePoint lists as part of ongoing processes (monthly, quarterly, annually, etc.) Many times we build these flows with a small amount of data in Excel, but then over time the data grows, and we hit a threshold. The hard part is often realizing this has happened to you. It happened to me recently, so I figured I'd share how to solve it.]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Pulling data out of tables in Excel is a great capability in Power Automate flows. We often use it to load SharePoint lists as part of ongoing processes (monthly, quarterly, annually, etc.) Many times we build these flows with a small amount of data in Excel, but then over time the data grows, and we hit a threshold. The hard part is often realizing this has happened to you. It happened to me recently, so I figured I&#8217;d share how to solve it.</p>



<p class="wp-block-paragraph">We had something like 275 rows in the table after a while, and that number is going to continue to grow. We knew we weren&#8217;t getting all the rows from the Excel table in the flow, but we didn&#8217;t know why. For some reason, we were only getting 256 rows. When I saw the number 256, I knew it had to be some sort of limitation, since 256 is 2^8. Powers of two limitations almost always mean a poor architecture choice by the creator of the tool, IMO, 256 is just way to low a limit for this particular thing; some higher power of 2 would have been a much better idea.</p>



<p class="wp-block-paragraph">If you look at the documentation for the <a href="https://learn.microsoft.com/en-us/connectors/excelonlinebusiness/#list-rows-present-in-a-table" target="_blank" rel="noreferrer noopener">List rows present in a table</a> action (which is in the <strong>Excel Online (Business)</strong> group of connectors, you won&#8217;t find anything obvious. I used my trusty Ctrl-F and searched for 256. Voila!</p>



<p class="wp-block-paragraph">In the section <a href="https://learn.microsoft.com/en-us/connectors/excelonlinebusiness/#known-issues-and-limitations-with-actions" target="_blank" rel="noreferrer noopener">Known issues and limitations with actions</a> of this documentation page, buried in a table, you&#8217;ll find the following:</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><tbody><tr><td>Pagination</td><td><a href="https://learn.microsoft.com/en-us/connectors/excelonlinebusiness/#list-rows-present-in-a-table">List rows present in a table</a></td><td>The&nbsp;<a href="https://learn.microsoft.com/en-us/connectors/excelonlinebusiness/#list-rows-present-in-a-table">List rows present in a table</a>&nbsp;action returns up to 256 rows by default. In order to get all rows, turn on&nbsp;<a href="https://learn.microsoft.com/en-us/connectors/common/known-issues#pagination-support">pagination</a>.</td></tr></tbody></table></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">The key information is in the right column. By default, you&#8217;ll only get the first 256 rows from the table. In testing, that may be more than adequate. But as your solution scales, you probably will want to ingest more rows than 256. See my comments above.</p>



<p class="wp-block-paragraph">The fix is simple, once you know what it is. In the <strong><em>List rows present in a table</em></strong> action, click on the ellipses and then <code>Settings</code>.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="976" height="315" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-1.png?resize=976%2C315&#038;ssl=1" alt="" class="wp-image-57894" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-1.png?w=976&amp;ssl=1 976w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-1.png?resize=300%2C97&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-1.png?resize=768%2C248&amp;ssl=1 768w" sizes="(max-width: 976px) 100vw, 976px" /></figure>



<p class="wp-block-paragraph">Right at the top of the <code>Settings</code>, you&#8217;ll see that <strong>Pagination</strong> is off.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" decoding="async" width="597" height="216" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-2.png?resize=597%2C216&#038;ssl=1" alt="" class="wp-image-57895" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-2.png?w=597&amp;ssl=1 597w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-2.png?resize=300%2C109&amp;ssl=1 300w" sizes="(max-width: 597px) 100vw, 597px" /></figure>



<p class="wp-block-paragraph">Simply turn on pagination and set the threshold number. Once you&#8217;ve done this, the connector will retrieve the rows in the Excel table page-by-page (the size of the pages is not defined in the documentation) until it has all the items OR it reaches the threshold value. This is spelled out in a separate document in the <a href="https://learn.microsoft.com/en-us/connectors/common/known-issues#pagination-support" target="_blank" rel="noreferrer noopener">Pagination support</a> section.</p>



<p class="wp-block-paragraph">Your threshold value can be from 0 to 100000, and you have to provide it. I see no reason not to use 100000, unless a lower number makes better sense for your business logic.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" decoding="async" width="593" height="83" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-3.png?resize=593%2C83&#038;ssl=1" alt="" class="wp-image-57896" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-3.png?w=593&amp;ssl=1 593w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-3.png?resize=300%2C42&amp;ssl=1 300w" sizes="(max-width: 593px) 100vw, 593px" /></figure>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="597" height="216" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-4.png?resize=597%2C216&#038;ssl=1" alt="" class="wp-image-57897" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-4.png?w=597&amp;ssl=1 597w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/02/image-4.png?resize=300%2C109&amp;ssl=1 300w" sizes="auto, (max-width: 597px) 100vw, 597px" /></figure>



<p class="wp-block-paragraph">In our case, the number of rows probably will always be in the hundreds, but more than 256!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2026/02/16/power-automate-retrieving-more-than-256-rows-from-an-excel-table/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">57737</post-id>	</item>
		<item>
		<title>I&#8217;m a SharePoint Admin but I Can&#8217;t Access the Content Type Hub</title>
		<link>https://sympmarc.com/2026/01/15/im-a-sharepoint-admin-but-i-cant-access-the-content-type-hub/</link>
					<comments>https://sympmarc.com/2026/01/15/im-a-sharepoint-admin-but-i-cant-access-the-content-type-hub/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 15 Jan 2026 22:22:16 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Content Types]]></category>
		<category><![CDATA[permissions]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[Content Type Hub]]></category>
		<category><![CDATA[Content Type Gallery]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=57772</guid>

					<description><![CDATA[As SharePoint Administrators, we ought to be able to access the Content Type Hub out-of-the-box. But I&#8217;ve found in multiple tenants over the years that I can&#8217;t. One of the first indications of the problem is when I try to create a new Content Type in the SharePoint Admin Center and get this error. You...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">As SharePoint Administrators, we ought to be able to access the Content Type Hub out-of-the-box. But I&#8217;ve found in multiple tenants over the years that I can&#8217;t. One of the first indications of the problem is when I try to create a new Content Type in the SharePoint Admin Center and get this error.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="568" height="220" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/01/image-9.png?resize=568%2C220&#038;ssl=1" alt="" class="wp-image-57776" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/01/image-9.png?w=568&amp;ssl=1 568w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/01/image-9.png?resize=300%2C116&amp;ssl=1 300w" sizes="auto, (max-width: 568px) 100vw, 568px" /></figure>
</div>


<p class="wp-block-paragraph">You might say &#8220;But they modernized Content Type management and moved it into the SharePoint Admin Center. Why would you need permissions on the Content Type Hub?&#8221;</p>



<p class="wp-block-paragraph">Well, this is a classic &#8220;<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f484.png" alt="💄" class="wp-smiley" style="height: 1em; max-height: 1em;" />on a<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f437.png" alt="🐷" class="wp-smiley" style="height: 1em; max-height: 1em;" />&#8221; thing. Yes, they modernized things, but in fact, the Content Type Hub is still the place where enterprise information architecture you manage through the Content Services section of the SharePoint Admin Center actually lives. The Content Type Hub is a SharePoint Team Site with special superpowers and it lives at <code>/sites/ContentTypeHub</code> in your tenant.</p>



<p class="wp-block-paragraph">The Content Type Hub used to be visible in the Active Sites listing in the SharePoint Admin Center, but around the time they applied the<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f484.png" alt="💄" class="wp-smiley" style="height: 1em; max-height: 1em;" />, they hid it. Huh.</p>



<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group"><div class="wp-block-group__inner-container is-layout-constrained wp-block-group-is-layout-constrained">
<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="has-very-light-gray-to-cyan-bluish-gray-gradient-background has-background wp-block-paragraph">Note: In some environments, you may want some people to be able to work on the enterprise IA but NOT make them SharePoint Admins. That causes some problems I won&#8217;t go into here, but if you grant them access to the Content Type Hub, they can set up enterprise Content Types without access to the SharePoint Admin Center.<br><br>There really should be an Enterprise IA Center which is separate from the SharePoint Admin Center.</p>
</blockquote>
</div></div>
</div></div>
</div></div>



<p class="wp-block-paragraph">To give yourself permission, replace <code>TenantName</code> in the URL below with <strong>your</strong> tenant name and navigate to that page. </p>



<p class="wp-block-paragraph"><code>https://<strong>TenantName</strong>-admin.sharepoint.com/_layouts/15/online/TA_SiteCollectionOwnersdialog.aspx?site=https://<strong>TenantName</strong>.sharepoint.com/sites/contentTypeHub</code></p>



<p class="wp-block-paragraph">You should land on a page which looks something like this:</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="953" height="474" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/01/image-7.png?resize=953%2C474&#038;ssl=1" alt="" class="wp-image-57773" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/01/image-7.png?w=953&amp;ssl=1 953w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/01/image-7.png?resize=300%2C149&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/01/image-7.png?resize=768%2C382&amp;ssl=1 768w" sizes="auto, (max-width: 953px) 100vw, 953px" /></figure>



<p class="wp-block-paragraph">Since you may not be the only SharePoint Administrator, don&#8217;t just give yourself permissions, give the SharePoint Administrator <strong><em>role</em></strong> those permissions. That way, all SharePoint Admins will be able to access the Content Type Hub.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="953" height="481" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/01/image-8.png?resize=953%2C481&#038;ssl=1" alt="" class="wp-image-57774" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/01/image-8.png?w=953&amp;ssl=1 953w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/01/image-8.png?resize=300%2C151&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2026/01/image-8.png?resize=768%2C388&amp;ssl=1 768w" sizes="auto, (max-width: 953px) 100vw, 953px" /></figure>



<p class="wp-block-paragraph">Once you save, things should be right as rain.</p>



<p class="wp-block-paragraph">Have you ever been caught by this? One reason I&#8217;m writing it up is so I can find my own post the next time it happens!</p>



<h2 class="wp-block-heading">Resources</h2>



<ul class="wp-block-list">
<li><a href="https://www.sjlewis.com/2020/05/12/sharepoint-online-admin-cannot-access-the-content-type-hub/">S. J. Lewis 365 Solutions: SharePoint Online Admin cannot access the Content Type Hub</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2026/01/15/im-a-sharepoint-admin-but-i-cant-access-the-content-type-hub/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">57772</post-id>	</item>
		<item>
		<title>Deleting a SharePoint Team Site When &#8216;We couldn’t find the Microsoft 365 Group connected to this site&#8217;</title>
		<link>https://sympmarc.com/2025/12/15/deleting-a-sharepoint-team-site-when-we-couldnt-find-the-microsoft-365-group-connected-to-this-site/</link>
					<comments>https://sympmarc.com/2025/12/15/deleting-a-sharepoint-team-site-when-we-couldnt-find-the-microsoft-365-group-connected-to-this-site/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 15 Dec 2025 17:05:48 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[Team Site]]></category>
		<category><![CDATA[Microsoft 365 Groups]]></category>
		<category><![CDATA[Microsoft Purview]]></category>
		<category><![CDATA[Retention Policy]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=57623</guid>

					<description><![CDATA[This is a fun challenge. I&#8217;ve run into this multiple times and always just thrown up my hands after a while.&#160;This time, I decided to dig deeper, and my pal Lauri Ellis at Microsoft dug up a solution for me via the MVP channels. Occasionally, we end up with a Team Site which had an...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">This is a fun challenge. I&#8217;ve run into this multiple times and always just thrown up my hands after a while.&nbsp;This time, I decided to dig deeper, and my pal <a href="https://www.linkedin.com/in/lauriellis/" data-type="link" data-id="https://www.linkedin.com/in/lauriellis/" target="_blank" rel="noreferrer noopener">Lauri Ellis</a> at Microsoft dug up a solution for me via the MVP channels.</p>



<p class="wp-block-paragraph">Occasionally, we end up with a Team Site which had an M365 Group, but no longer seems to. We can see this when we look at the site in the SharePoint Admin Center. When we do, we get this message:</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="800" height="221" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image.jpeg?resize=800%2C221&#038;ssl=1" alt="" class="wp-image-57624" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image.jpeg?w=800&amp;ssl=1 800w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image.jpeg?resize=300%2C83&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image.jpeg?resize=768%2C212&amp;ssl=1 768w" sizes="auto, (max-width: 800px) 100vw, 800px" /></figure>



<p class="wp-block-paragraph">If we try to delete the site, we get this:</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="736" height="90" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image-2.jpeg?resize=736%2C90&#038;ssl=1" alt="" class="wp-image-57626" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image-2.jpeg?w=736&amp;ssl=1 736w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image-2.jpeg?resize=300%2C37&amp;ssl=1 300w" sizes="auto, (max-width: 736px) 100vw, 736px" /></figure>



<p class="wp-block-paragraph">If we try to delete the site with PowerShell, still no joy:</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="40" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image.png?resize=1024%2C40&#038;ssl=1" alt="" class="wp-image-57628" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image.png?resize=1024%2C40&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image.png?resize=300%2C12&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image.png?resize=768%2C30&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image.png?w=1245&amp;ssl=1 1245w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Sure, but the M365 Group doesn&#8217;t exist.</p>



<p class="wp-block-paragraph">The fix Lauri suggested is actually pretty easy, but I had never thought of it before. Using the SPO PowerShell module, simply do this:</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell"><em>Set-SPOSite -Identity &lt;site_url&gt; -ClearGroupId</em></code></pre>



<p class="wp-block-paragraph">This simply removes the M365 Group&#8217;s ID from the site&#8217;s settings. From there, you can delete the site &#8211; or do whatever else you were blocked by. I haven&#8217;t tried it, but I expect you could also use <code>Add-PnPMicrosoft365GroupToSite</code> to reconnect the site to an M365 Group, essentially resurrecting it to its prior state.</p>



<p class="wp-block-paragraph">The real question here is why a site would end up in this state, but I have no answer for that. Sometimes we find sites where the M365 Group has disappeared, even though the Team Site still thinks it&#8217;s connected to one. One theory I found on the Interwebs was <strong>if</strong> the Team Site was deleted, and it sat in the site Recycle Bin for more than 30 days, the underlying M365 Group would be deleted (they time out after 30 days), and <strong>then</strong> the Team Site is restored from the Recycle Bin (they don&#8217;t time out for 93 days), then the M365 Group would be gone. This seems pretty far-fetched to me, as I think it would be unlikely we&#8217;d drag something out of the Recycle Bin after 30 days, but hey, it&#8217;s a theory.</p>



<p class="wp-block-paragraph">Have you seen this in the wild? Any hard evidence for why it has happened?</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">Addendum</h2>



<p class="wp-block-paragraph">If you should happen to have a Retention Policy applied to the problematic site in Purview, you&#8217;ll need to add an exclusion to delete it. But guess what: not as simple as it sounds.</p>



<p class="wp-block-paragraph">Because the site was originally backed by a Microsoft 365 Group, you can&#8217;t just exclude it as if it never was. Even if you add an exclusion as a SharePoint site, when you try to delete the site, you&#8217;ll get the message about it being blocked.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="808" height="63" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image-1.png?resize=808%2C63&#038;ssl=1" alt="" class="wp-image-57749" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image-1.png?w=808&amp;ssl=1 808w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image-1.png?resize=300%2C23&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/12/image-1.png?resize=768%2C60&amp;ssl=1 768w" sizes="auto, (max-width: 808px) 100vw, 808px" /></figure>



<p class="wp-block-paragraph">The fix here is to add a <strong><em>new</em></strong> Microsoft 365 Group to the site, which you can do with PnP.PowerShell. <a href="https://pnp.github.io/powershell/cmdlets/Add-PnPMicrosoft365GroupToSite.html">Add-PnPMicrosoft365GroupToSite | PnP PowerShell</a></p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">Add-PnPMicrosoft365GroupToSite -Url "https://contoso.sharepoint.com/sites/FinanceTeamsite" -Alias "FinanceTeamsite" -DisplayName "My finance team site group"</code></pre>



<p class="wp-block-paragraph">This creates a M365 Group and connects it to the site, which you can then add an exclusion for in Purview.</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2025/12/15/deleting-a-sharepoint-team-site-when-we-couldnt-find-the-microsoft-365-group-connected-to-this-site/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">57623</post-id>	</item>
		<item>
		<title>Instantly Make the Gear Appear in SharePoint</title>
		<link>https://sympmarc.com/2025/08/18/instantly-make-the-gear-appear-in-sharepoint/</link>
					<comments>https://sympmarc.com/2025/08/18/instantly-make-the-gear-appear-in-sharepoint/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 18 Aug 2025 21:54:59 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[gear]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[information architecture]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=52591</guid>

					<description><![CDATA[This is truly one of the best tricks I&#8217;ve learned in all the years I&#8217;ve been using SharePoint. When you refresh a page, it can take 8-10 (or more) seconds before the gear (aka cog) is visible. This first animation shows the normal timing. But if you simply click on your name or face, the...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">This is truly one of the best tricks I&#8217;ve learned in all the years I&#8217;ve been using SharePoint.</p>



<p class="wp-block-paragraph">When you refresh a page, it can take 8-10 (or more) seconds before the gear (aka cog) is visible. This first animation shows the normal timing.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="644" height="78" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/08/2025-08-18_17-40-57.gif?resize=644%2C78&#038;ssl=1" alt="" class="wp-image-52598"/></figure>



<p class="wp-block-paragraph">But if you simply click on your name or face, the gear shows up instantly. </p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="618" height="80" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/08/2025-08-18_17-38-21.gif?resize=618%2C80&#038;ssl=1" alt="" class="wp-image-52597"/></figure>



<p class="wp-block-paragraph">As someone who usually has the information architect hat on, I&#8217;ve wasted oodles of time waiting for that darn gear. Now that I know this trick, I&#8217;m gaining 8-10 seconds (at least) per refresh/reload. </p>



<p class="wp-block-paragraph">It sounds like a small win, but when you&#8217;re refreshing or loading pages all day long, it really adds up.</p>



<p class="wp-block-paragraph">I think I&#8217;ll take a year off once I&#8217;ve earned it using this trick.</p>



<p class="wp-block-paragraph">Oh, and Microsoft, you don&#8217;t get off the hook on this. The first thing some of us want when we go to a page is the gear, and it&#8217;s the last thing that shows up. That seems wrong, even if the other 99% of users don&#8217;t care about the gear.</p>



<p class="wp-block-paragraph">I don&#8217;t remember exactly who told me about this trick first, but I owe you one.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"><a href="https://www.linkedin.com/in/kasperbolarsen/" target="_blank" rel="noreferrer noopener">Kasper Larsen</a> pointed out a <a href="https://www.linkedin.com/posts/activity-7355946855064608770-RTbg" target="_blank" rel="noreferrer noopener">post</a> from <a href="https://www.linkedin.com/in/ellya-gold-a31a0620/" target="_blank" rel="noreferrer noopener">Ellya Gold</a> from about a month ago on LinkedIn pointing this trick out. Maybe that&#8217;s there I heard about it?  </p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2025/08/18/instantly-make-the-gear-appear-in-sharepoint/feed/</wfw:commentRss>
			<slash:comments>16</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">52591</post-id>	</item>
		<item>
		<title>What to Do When You Can&#8217;t Create Site Pages in SharePoint</title>
		<link>https://sympmarc.com/2025/07/24/what-to-do-when-you-cant-create-site-pages-in-sharepoint/</link>
					<comments>https://sympmarc.com/2025/07/24/what-to-do-when-you-cant-create-site-pages-in-sharepoint/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 24 Jul 2025 19:23:33 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Content Types]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[information architecture]]></category>
		<category><![CDATA[site pages]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=52127</guid>

					<description><![CDATA[Some settings in SharePoint don&#8217;t make a lot of sense. And sometimes they bite you. There are a few little-known settings in the SharePoint Admin Center for pages. These are tenant-level settings: By default, both settings are checked &#8211; they are enabled. The second one about commenting makes some sense: since comments are pretty much...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Some settings in SharePoint don&#8217;t make a lot of sense. And sometimes they bite you.</p>



<p class="wp-block-paragraph">There are a few little-known settings in the SharePoint Admin Center for pages. </p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="656" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-4.png?resize=1024%2C656&#038;ssl=1" alt="" class="wp-image-52132" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-4.png?resize=1024%2C656&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-4.png?resize=300%2C192&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-4.png?resize=768%2C492&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-4.png?w=1116&amp;ssl=1 1116w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<p class="wp-block-paragraph">These are tenant-level settings:</p>



<ul class="wp-block-list">
<li>Allow users to create modern pages</li>



<li>Allow commenting on modern pages</li>
</ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="590" height="275" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-3.png?resize=590%2C275&#038;ssl=1" alt="" class="wp-image-52131" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-3.png?w=590&amp;ssl=1 590w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-3.png?resize=300%2C140&amp;ssl=1 300w" sizes="auto, (max-width: 590px) 100vw, 590px" /></figure>
</div>


<p class="wp-block-paragraph">By default, both settings are checked &#8211; they are enabled. The second one about commenting makes some sense: since comments are pretty much useless since they don&#8217;t go anywhere, turning them off across the tenant may make sense to you.</p>



<p class="wp-block-paragraph">BUT, you may find that you can&#8217;t create a page from any Site Pages library. You&#8217;ll probably first notice it because when you click the +New button, you only see the Link option.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="702" height="564" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-5.png?resize=702%2C564&#038;ssl=1" alt="" class="wp-image-52133" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-5.png?w=702&amp;ssl=1 702w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-5.png?resize=300%2C241&amp;ssl=1 300w" sizes="auto, (max-width: 702px) 100vw, 702px" /></figure>
</div>


<p class="wp-block-paragraph">To make things even more confusing, if you are on the home page of any site (and have the permissions to do so), you&#8217;ll still see Page as an option when you click the +New button there. And, in fact, you can still create a page from there.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="710" height="757" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-6.png?resize=710%2C757&#038;ssl=1" alt="" class="wp-image-52134" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-6.png?w=710&amp;ssl=1 710w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-6.png?resize=281%2C300&amp;ssl=1 281w" sizes="auto, (max-width: 710px) 100vw, 710px" /></figure>
</div>


<p class="wp-block-paragraph">You&#8217;re most likely to notice this issue when you&#8217;ve added some custom Content Types to the Site Pages library. When you&#8217;ve done this, there&#8217;s no way to select the Contrnt Type from the dropdown, but even worse: you can&#8217;t change the Content Type in the Page details!</p>



<p class="wp-block-paragraph">The reason for this annoyance is probably that someone on your admin team decided to uncheck the <strong>Allow users to create modern pages</strong> box. Given the effect the setting has, I can&#8217;t think of a single scenario where it would make sense to do this. Since you can, in fact create pages, anyway, there&#8217;s zero reason to uncheck that box.</p>



<p class="wp-block-paragraph">Run over and tell your SharePoint Admin that and have them fix it for you!</p>



<p class="wp-block-paragraph">Can you think of a scenario where unchecking the box makes sense? Please do tell!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2025/07/24/what-to-do-when-you-cant-create-site-pages-in-sharepoint/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">52127</post-id>	</item>
		<item>
		<title>Fixing a 404 Error When You Know the SharePoint Site Is There</title>
		<link>https://sympmarc.com/2025/07/23/fixing-a-404-error-when-you-know-the-sharepoint-site-is-there/</link>
					<comments>https://sympmarc.com/2025/07/23/fixing-a-404-error-when-you-know-the-sharepoint-site-is-there/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Wed, 23 Jul 2025 21:13:09 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[Home Page]]></category>
		<category><![CDATA[site pages]]></category>
		<category><![CDATA[404 Error]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=52288</guid>

					<description><![CDATA[This is a quick one, but I&#8217;ve done it enough times, I figured I should write it up. If you&#8217;ve landed here because of searching, I hope I&#8217;m making your day go better. Have you ever navigated to a SharePoint site you&#8217;ve been to hundreds of times and gotten the dreaded 404 NOT FOUND error?...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">This is a quick one, but I&#8217;ve done it enough times, I figured I should write it up. If you&#8217;ve landed here because of searching, I hope I&#8217;m making your day go better.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="296" height="89" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-9.png?resize=296%2C89&#038;ssl=1" alt="" class="wp-image-52289"/></figure>
</div>


<p class="wp-block-paragraph">Have you ever navigated to a SharePoint site you&#8217;ve been to hundreds of times and gotten the dreaded <a href="https://en.wikipedia.org/wiki/HTTP_404" data-type="link" data-id="https://en.wikipedia.org/wiki/HTTP_404" target="_blank" rel="noreferrer noopener">404 NOT FOUND</a> error? There&#8217;s nothing else in the browser window, just that unhelpful message.</p>



<p class="wp-block-paragraph">There are two probable things which could have happened:</p>



<ol class="wp-block-list">
<li>The site itself was deleted. If this is the case, it should be available to restore from the <strong>Deleted sites</strong> recycle bin in the SharePoint Admin Center.</li>



<li>But before you go talk to your SharePoint Admin (sometimes that&#8217;s harder than this step), try the steps below. It may be that the home page of your site has been deleted instead.</li>
</ol>



<p class="wp-block-paragraph">Let&#8217;s say the site you&#8217;re trying to visit is at <code>https://mytenantname.sharepoint.com/sites/FabSite</code>, and you&#8217;re getting the 404 error on whatever page in that site you&#8217;re trying to visit. Also, let&#8217;s assume you&#8217;re a Site Owner or Site Member.</p>



<p class="wp-block-paragraph">Tack this on the end of the URL to the site: <code>/_layouts/viewlsts.aspx</code>. That&#8217;s a link to the Site Contents application page in the site.</p>



<p class="wp-block-paragraph">To be very clear, you&#8217;d make the URL <code>https://mytenantname.sharepoint.com/sites/FabSite</code> + <code>/_layouts/viewlsts.aspx</code> = <code>https://mytenantname.sharepoint.com/sites/FabSite/_layouts/viewlsts.aspx</code></p>



<p class="wp-block-paragraph">If there&#8217;s any other &#8220;stuff&#8221; after the site name part of the URL, you&#8217;d replace that with <code>/_layouts/viewlsts.aspx</code>.</p>



<p class="wp-block-paragraph">If that gets you to the Site Contents page, you&#8217;re almost back to normal. If not, go find that SharePoint Admin or call the Help Desk or whatever.</p>



<p class="wp-block-paragraph">On the Site Contents page, scroll down to the bottom and see if the Site Pages library exists. If not, go to Option 1 below. If the Site Pages library <strong>is</strong> there, then go into it and see if the home page if the site is still there. It used to always be <code>Home.aspx</code>, but unfortunately, Microsoft creates a new home page whenever you apply a template. (See: <a href="https://sympmarc.com/2023/11/03/sharepoint-team-site-home-pages-get-new-names-for-some-reason/" data-type="post" data-id="47626">SharePoint Team Site Home Pages Get New Names – For Some Reason</a>) Whether you&#8217;re sure which page is the home page or not, go to Option 2.</p>



<p class="wp-block-paragraph"><strong>Option 1</strong>: Go into the Recycle Bin and look for the Site Pages library. Odds are, it&#8217;s at or near the top of the list of deleted objects. Select it and restore it.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="932" height="245" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-11.png?resize=932%2C245&#038;ssl=1" alt="" class="wp-image-52291" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-11.png?w=932&amp;ssl=1 932w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-11.png?resize=300%2C79&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-11.png?resize=768%2C202&amp;ssl=1 768w" sizes="auto, (max-width: 932px) 100vw, 932px" /></figure>



<p class="wp-block-paragraph"><strong>Option 2</strong>: Go into the Recycle Bin and look for an aspx page which has a home-page-like name. Odds are, it&#8217;s at or near the top of the list of deleted objects. Select it and restore it.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="636" height="158" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-10.png?resize=636%2C158&#038;ssl=1" alt="" class="wp-image-52290" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-10.png?w=636&amp;ssl=1 636w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-10.png?resize=300%2C75&amp;ssl=1 300w" sizes="auto, (max-width: 636px) 100vw, 636px" /></figure>



<p class="wp-block-paragraph">Navigate back to the Home link in your site and it&#8217;s probably fine now. If not, off to get help. But you may have just repaired things yourself!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2025/07/23/fixing-a-404-error-when-you-know-the-sharepoint-site-is-there/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">52288</post-id>	</item>
		<item>
		<title>Enabling Document Sets in the Content Type Gallery</title>
		<link>https://sympmarc.com/2025/07/09/enabling-document-sets-in-the-content-type-gallery/</link>
					<comments>https://sympmarc.com/2025/07/09/enabling-document-sets-in-the-content-type-gallery/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Wed, 09 Jul 2025 18:51:51 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[feature activation]]></category>
		<category><![CDATA[metadata]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[Document Sets]]></category>
		<category><![CDATA[information architecture]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=52147</guid>

					<description><![CDATA[Document Sets are one of the best things in SharePoint. They help you manage a set of documents which have more value together than separately. They also give you some great special capabilities beyond what a folder can provide: All that said, Microsoft says they don&#8217;t see enough usage to justify investments in them. (See...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Document Sets are one of the best things in SharePoint. They help you manage a set of documents which have more value together than separately. They also give you some great special capabilities beyond what a folder can provide:</p>



<ul class="wp-block-list">
<li>You can specify which Content Types are allowed in the Document Set</li>



<li>The Document Set can be prepopulated with files</li>



<li>Selected metadata values can be pushed to every document in the Document Set</li>
</ul>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="630" height="831" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-8.png?resize=630%2C831&#038;ssl=1" alt="" class="wp-image-52153" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-8.png?w=630&amp;ssl=1 630w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-8.png?resize=227%2C300&amp;ssl=1 227w" sizes="auto, (max-width: 630px) 100vw, 630px" /></figure>



<p class="wp-block-paragraph">All that said, Microsoft says they don&#8217;t see enough usage to justify investments in them. (See <a href="https://www.linkedin.com/in/cmcnulty/" target="_blank" rel="noreferrer noopener">Chris McNulty</a>&#8216;s comment on my earlier post: <a href="https://sympmarc.com/2025/06/12/modernizing-the-document-set-newdocset-form/">Modernizing the Document Set `NewDocSet` Form</a>.) To me, that&#8217;s a chicken and egg argument. Unless Microsoft finishes the job in modernizing Document Sets and then starts encouraging usage, that uptake is likely to stay low. Consultants like me know the value of Document Sets and use them all the time.</p>



<p class="wp-block-paragraph">In fact, there are currently 22 feedback items in the <a href="https://feedbackportal.microsoft.com/feedback/forum/06735c62-321c-ec11-b6e7-0022481f8472" target="_blank" rel="noreferrer noopener">SharePoint Feedback Hub</a> having to do with Document Sets! That&#8217;s a lot for something no one is supposed to care about. <a href="https://feedbackportal.microsoft.com/feedback/search/06735c62-321c-ec11-b6e7-0022481f8472?q=%22document+set%22">&#8220;document set&#8221; · Community</a></p>



<p class="wp-block-paragraph"><a href="https://www.linkedin.com/in/joannecklein/" target="_blank" rel="noreferrer noopener">Joanne Klein</a> and I were talking about this yesterday. Document Sets are excellent containers for use with Purview-based labels and policies. This is especially true at the enterprise (tenant) level. Unfortunately, at least in some cases, Document Sets aren&#8217;t available as a Parent Content Type in the Content Type Gallery under Content Services in the SharePoint Admin Center. This is because Document Sets still require activation of a Site Collection Feature. Many people using SharePoint Online these days never worked with it in the old Feature days, so they may not have any idea these settings even exist.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"><strong>TIP</strong>: If you want your information architect(s) to be able to manage Content Types and Site Columns at the enterprise level, you don&#8217;t have to make them SharePoint Admins (which doesn&#8217;t mean they shouldn&#8217;t be &#8211; in many cases, it&#8217;s the right move. Instead, you can just give them Site Owner permissions on the old Content Type Hub site, which in most tenants is at <code>/sites/ContentTypeHub</code>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Unfortunately, along with many people not knowing about the value of Document Sets, there&#8217;s also misinformation out there, some even coming from Microsoft. As an example, there&#8217;s this post at answers.microsoft.com: <a href="https://answers.microsoft.com/en-us/msoffice/forum/all/sharepoint-online-document-set-not-available-in/3fa26f1d-ef15-46c0-86a8-1b10d69a7409">SharePoint Online Document set not available in Content type gallery &#8211; Microsoft Community</a>. There, the Microsoft person states:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">The Document Set content types and some other content types are not available for the Content type gallery in the SharePoint admin center (at the organization level) and are only available for the site content type gallery (at the site level). This is by design. Previously, the content type publishing experience would add a copy of the content type to each site, but this had been changed by Microsoft.</p>
</blockquote>



<p class="wp-block-paragraph">This simply isn&#8217;t true!</p>



<p class="wp-block-paragraph">If you want to use Document Sets at the enterprise level (and you should want to), there is an easy way to make them available. I believe that, in many cases, Document Sets are simply available for use in the Content Type Gallery without any action, so you may not be having any issues. It may have something to do with the age of the tenant or something, but I really don&#8217;t know.</p>



<p class="wp-block-paragraph">Here&#8217;s how you enable Document Sets:</p>



<ul class="wp-block-list">
<li>Navigate to the Content Type Hub at <code>/sites/ContentTypeHub</code></li>



<li>Go to Gear / Site information / View all site settings</li>



<li>On the settings page, click the <strong>Site collection features</strong> link. It&#8217;s in the section titled <strong>Site Collection Administration</strong>.</li>
</ul>



<p class="wp-block-paragraph">On the next page, you&#8217;ll see the available Site Collection Features. If the Document Sets feature is already Active, then this isn&#8217;t your issue. If it&#8217;s not active, simply click the Activate button and wait a few seconds for the page to refresh.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="830" height="543" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-7.png?resize=830%2C543&#038;ssl=1" alt="" class="wp-image-52152" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-7.png?w=830&amp;ssl=1 830w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-7.png?resize=300%2C196&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/07/image-7.png?resize=768%2C502&amp;ssl=1 768w" sizes="auto, (max-width: 830px) 100vw, 830px" /></figure>



<p class="wp-block-paragraph">Voila! You can now use Document Sets at the tenant (enterprise) level.</p>



<p class="wp-block-paragraph">If you try this and you still have issues, get in touch. No one should be prevented from using Document Sets!</p>



<p class="wp-block-paragraph">Finally, you&#8217;ll need to activate the Document Sets feature in every site where you want to use Document Sets, even if you&#8217;re publishing Content Types which inherit from Document Set at the tenant level.</p>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2025/07/09/enabling-document-sets-in-the-content-type-gallery/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">52147</post-id>	</item>
		<item>
		<title>Dear Microsoft: Stop It with Copilot, Already</title>
		<link>https://sympmarc.com/2025/06/16/dear-microsoft-stop-it-with-copilot-already/</link>
					<comments>https://sympmarc.com/2025/06/16/dear-microsoft-stop-it-with-copilot-already/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 16 Jun 2025 20:41:47 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[agents]]></category>
		<category><![CDATA[modern work]]></category>
		<category><![CDATA[Microsoft 365]]></category>
		<category><![CDATA[Copilot]]></category>
		<category><![CDATA[office.com]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=51935</guid>

					<description><![CDATA[Until recently, one of the easiest ways to get "into" Microsoft 365 was to go to Office.com. I'll readily admit that I never spent any time on the page, mainly because most of my time in Microsoft 365 is spent building sites, pages, libraries, etc.]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Until recently, one of the easiest ways to get &#8220;into&#8221; Microsoft 365 was to go to Office.com. I&#8217;ll readily admit that I never spent any time on the page, mainly because most of my time in Microsoft 365 is spent building sites, pages, libraries, etc.</p>



<p class="wp-block-paragraph">But Microsoft&#8217;s stated intent &#8211; stated many times, in fact &#8211; was to help you get right back to your work by going to Office.com&#8217;s home page. It showed the Office apps for which you were licensed, and more importantly to many people, the files with which you&#8217;d recently been working.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="616" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-8.png?resize=1024%2C616&#038;ssl=1" alt="" class="wp-image-51942" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-8-scaled.png?resize=1024%2C616&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-8-scaled.png?resize=300%2C180&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-8-scaled.png?resize=768%2C462&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-8-scaled.png?resize=1536%2C923&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-8-scaled.png?resize=2048%2C1231&amp;ssl=1 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">These days, we are redirected to <a href="https://m365.cloud.microsoft/">https://m365.cloud.microsoft/</a>, shown below. (It&#8217;s multiple redirects to get there, and in Edge it frequently fails for me, requiring a reload.) This is what it looks like with no Copilot license at all.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="531" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-5.png?resize=1024%2C531&#038;ssl=1" alt="" class="wp-image-51938" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-5.png?resize=1024%2C531&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-5.png?resize=300%2C156&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-5.png?resize=768%2C399&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-5.png?w=1164&amp;ssl=1 1164w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">When you have a Copilot license, it looks, well, almost the same, but with a few additions. Can you spot them?</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="517" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-6.png?resize=1024%2C517&#038;ssl=1" alt="" class="wp-image-51940" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-6.png?resize=1024%2C517&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-6.png?resize=300%2C151&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-6.png?resize=768%2C388&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-6.png?resize=1536%2C775&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-6.png?resize=2048%2C1034&amp;ssl=1 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">This has been bugging me since it happened, and today, I piled onto a <a href="https://www.linkedin.com/posts/juliemturner_where-do-i-go-for-my-office-apps-now-that-activity-7340081056613605376-Pgdk?utm_source=share&amp;utm_medium=member_desktop&amp;rcm=ACoAAAAAv2oBXNWB0gjtH4me3PKm6PcBEtb9Yj4" target="_blank" rel="noreferrer noopener">LinkedIn post</a> from Sympraxian Julie Turner (<a href="https://bsky.app/profile/julieturner.net" target="_blank" rel="noreferrer noopener">@julieturner.net</a> on Bluesky) about it.</p>



<p class="wp-block-paragraph">The fact that Microsoft is now forcing people to a page focused on Copilot shows a disconnect from a large portion of their user base. There are several important considerations here.</p>



<ul class="wp-block-list">
<li>First, many organizations simply aren&#8217;t ready to do <strong>anything</strong> with AI or Copilot. Putting Copilot front &amp; center when they haven&#8217;t subscribed to Copilot at all is not useful for them.</li>



<li>Second, this is a significant change to a landing page which Microsoft has touted for years as &#8220;the place to start your day&#8221;. That use case has been removed totally from the page. No recent documents, no apps, no waffle, etc. Sure, there&#8217;s an <strong>Apps</strong> link to the left, but it adds an unnecessary extra click to go where we want to go.</li>



<li>Third, the <strong>only</strong> way to go from that page to something we&#8217;ve recently worked on is to search &#8211; encouraging people to use search where the Microsoft Graph was actually being useful before by showing recent work &#8211; or by asking Copilot. See my first point.</li>



<li>Finally, by forcing agents on people, we are going to get yet another ungoverned mess. Plus, if you <strong>don&#8217;t </strong>have Copilot licensing or pay-as-you-go enabled, you very quickly hit a dead end with agents. It&#8217;s a solution begging for use to invest in it &#8211; which is NOT a good look for Microsoft. Forcing people into buying licenses to make a page useful was not the ethos we expected historically from them.</li>
</ul>



<p class="wp-block-paragraph">This change to Office.com just one example of Copilot being rammed down the throats of people who may not want it at all, while taking away features people actually used.</p>



<p class="wp-block-paragraph">There are some good things happening with the way Microsoft is marketing Copilot. On our <a href="https://www.sympraxisconsulting.com/asksympraxis/microsoft-365-community-conference-recap/" target="_blank" rel="noreferrer noopener">Ask Sympraxis session</a> after the recent <a href="https://m365conf.com/" target="_blank" rel="noreferrer noopener">Microsoft 365 Conference</a> in Las Vega$, we mentioned that &#8211; rather than selling Copilot as FOMO (&#8220;FOMO is <strong>NOT</strong> a business requirement&#8221;), we&#8217;re starting to see them market specific ways we can solve business problems, like with the <a href="https://techcommunity.microsoft.com/blog/microsoft365copilotblog/researcher-agent-in-microsoft-365-copilot/4397186" target="_blank" rel="noreferrer noopener">Researcher</a> or <a href="https://techcommunity.microsoft.com/blog/microsoft365copilotblog/analyst-agent-in-microsoft-365-copilot/4397191" target="_blank" rel="noreferrer noopener">Analyst</a> agents. It&#8217;s less &#8220;everyone has to have Copilot&#8221; and more&#8221; here&#8217;s how you can solve a problem&#8221;. But how does that translate into the changes above?</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Microsoft 365 Community Conference Recap" width="720" height="405" src="https://www.youtube.com/embed/Ax11BCasx_M?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">But it simply can&#8217;t be all Copilot all the time. Sure, AI like Copilot is transformational. Even an old curmudgeon like me can see that. I truly believe the world is about to change in ways we can&#8217;t even comprehend &#8211; unless we&#8217;ve read a LOT of science fiction (so I guess I can see it!).</p>



<p class="wp-block-paragraph">But enough already. Let people decide when they decide whether Copilot is for them. Stop banging the drum so loudly that dogs in the next county are waking up to bark in the middle of the night. Stop tying Microsoft employee&#8217;s KPIs to Copilot and only Copilot: there SO MUCH work to be done to improve the Microsoft 365 platform, and to be honest, to make the platform just plain work the way it&#8217;s supposed to work. (Meaning bugs, unfinished functionality, etc.) </p>



<p class="wp-block-paragraph">With the Copilot juggernaut, it feels like Microsoft has lost connection with the very people who use Microsoft 365 the most &#8211; to a larger degree than they already had. We have seen a litany of functionality which has launched in the last few years and deprecated or just plain been turned off because people just couldn&#8217;t find a use for it. Listening to the market is at least as important as making the market.</p>



<p class="wp-block-paragraph">So, here&#8217;s my ask, in case it&#8217;s not clear: <strong>stop it with Copilot already, Microsoft</strong>. Sure, it&#8217;s important and may change the world, but it&#8217;s only ONE concept on top of a platform which has tens of thousands of important features, many of which are eroding. Not to mention the fact that your customer based is frequently giving you top notch feature requests &#8211; or even more importantly, bug reports &#8211; in your very own <a href="https://feedbackportal.microsoft.com/feedback/" target="_blank" rel="noreferrer noopener">Feedback Hub</a> which you seem to ignore for years on end. Listen to your biggest advocates and everyday users.</p>



<p class="wp-block-paragraph">What do you think? Less Copilot or more Copilot?</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="683" height="1024" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/pexels-photo-157313.jpg?resize=683%2C1024&#038;ssl=1" class="wp-image-51955" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/pexels-photo-157313.jpg?resize=683%2C1024&amp;ssl=1 683w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/pexels-photo-157313.jpg?resize=200%2C300&amp;ssl=1 200w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/pexels-photo-157313.jpg?resize=768%2C1152&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/pexels-photo-157313.jpg?w=867&amp;ssl=1 867w" sizes="auto, (max-width: 683px) 100vw, 683px" /></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2025/06/16/dear-microsoft-stop-it-with-copilot-already/feed/</wfw:commentRss>
			<slash:comments>22</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">51935</post-id>	</item>
		<item>
		<title>Modernizing the Document Set `NewDocSet` Form</title>
		<link>https://sympmarc.com/2025/06/12/modernizing-the-document-set-newdocset-form/</link>
					<comments>https://sympmarc.com/2025/06/12/modernizing-the-document-set-newdocset-form/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 12 Jun 2025 20:18:41 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Document Sets]]></category>
		<category><![CDATA[information architecture]]></category>
		<category><![CDATA[PnP.PowerShell]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=51906</guid>

					<description><![CDATA[Microsoft modernized Document Sets a few years ago &#8211; sort of. They really didn&#8217;t finish the job, and they seem to be under the impression that few people use Document Sets. Everyone I know who understands good Information Architecture (IA) knows about Document Sets, and they use them when they make sense &#8211; which can...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Microsoft modernized Document Sets a few years ago &#8211; sort of. They really didn&#8217;t finish the job, and they seem to be under the impression that few people use Document Sets. Everyone I know who understands good Information Architecture (IA) knows about Document Sets, and they use them when they make sense &#8211; which can be frequently.</p>



<p class="wp-block-paragraph">Microsoft stopped the modernization process without modernizing the <code>NewDocSet</code> form. If you don&#8217;t use these scripts (there&#8217;s no way to do this in the user interfaces), the <code>NewDocSet</code> form will look something like this. It&#8217;s classic and unattractive, though it does work just fine.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="840" height="322" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-2.png?resize=840%2C322&#038;ssl=1" alt="" class="wp-image-51909" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-2.png?w=840&amp;ssl=1 840w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-2.png?resize=300%2C115&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-2.png?resize=768%2C294&amp;ssl=1 768w" sizes="auto, (max-width: 840px) 100vw, 840px" /></figure>



<p class="wp-block-paragraph">Wouldn&#8217;t this be nicer, though? It fits into the modern UI and acts more like all other <code>NewForms</code>.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1003" height="838" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-3.png?resize=1003%2C838&#038;ssl=1" alt="" class="wp-image-51910" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-3.png?w=1003&amp;ssl=1 1003w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-3.png?resize=300%2C251&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-3.png?resize=768%2C642&amp;ssl=1 768w" sizes="auto, (max-width: 1003px) 100vw, 1003px" /></figure>



<p class="wp-block-paragraph">Best of all, you can now apply formatting to the modern form: adding to the header, rearranging columns, putting a link in the footer etc. That&#8217;s because the form is now modern!</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="413" height="468" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-4.png?resize=413%2C468&#038;ssl=1" alt="" class="wp-image-51912" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-4.png?w=413&amp;ssl=1 413w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-4.png?resize=265%2C300&amp;ssl=1 265w" sizes="auto, (max-width: 413px) 100vw, 413px" /></figure>
</div>


<p class="wp-block-paragraph">One of the bright bulbs in the community, Dan Toft &#8211; <a href="https://bsky.app/profile/dan-toft.dk" target="_blank" rel="noreferrer noopener">@dan-toft.dk</a>‬ on BlueSky &#8211; figured out a way to &#8220;modernize&#8221; the <code>NewDocSet</code> form for Document Sets and posted a script sample to the <a href="https://pnp.github.io/script-samples/">Script Samples | PnP Samples</a> called <a href="https://pnp.github.io/script-samples/spo-document-sets-modern-new-form/README.html?tabs=pnpps">Enable modern creation forms for Document sets</a>.</p>



<p class="wp-block-paragraph">Dan&#8217;s sample works perfectly well when you want to modernize a Content Type which has been enabled in a specific Document Library. I wanted to modernize a bunch of Document Sets, though, and I had defined them in the Content Type Hub &#8211; which is still where Content Types end up when you define them in the modern Content Type Gallery.</p>



<p class="wp-block-paragraph">I adapted Dan&#8217;s good work to list out the Content Types in the Content Type Hub which inherit from Document Set, enable you to choose one, change the setting to make the <code>NewDocSet</code> form modern, and if you want, publish the result.</p>



<p class="wp-block-paragraph">Here&#8217;s the resulting PowerShell script:</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">$tenant = "YourTenantName"
$clientId = "YourAppRegistrationGUID"

$cthConnection = Connect-PnPOnline -ClientId $clientId -Url "https://$($tenant).sharepoint.com/sites/ContentTypeHub" -Interactive

# Get the "Document Set" content types
$cts = Get-PnPContentType | Where-Object { $_.Id.StringValue.StartsWith("0x0120D520") }

foreach ($ct in $cts) {
    $currVal = "<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" />"
    if($ct.NewFormClientSideComponentId.Length -eq '') {
        $currVal = "<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" />"
    }
    Write-Host "[$($cts.IndexOf($ct)+1)] $($ct.name) $($currVal)"
}

$CTindex = Read-Host -Prompt "Which content type to you wish to modernize"

# Null out the NewFormClientSideComponentId as that seems to bring it to modern UI
$cts[$CTindex - 1].NewFormClientSideComponentId = $null;
$cts[$CTindex - 1].Update($false);

Invoke-PnPQuery

$ctPub = Read-Host -Prompt "Content Type $($cts[$CTindex-1].Name) updated. Would you like to publish the change? (Y/N)"
if ($ctPub -ne 'Y' -and $ctPub -ne 'y') {
    Write-Host -ForegroundColor Red "Exiting without publishing changes."
    exit
}
else {
    # Publish the changed content type
    Write-Host -ForegroundColor Yellow "Publishing content type $($cts[$CTindex-1].Name) with ID $($cts[$CTindex-1].Id)"
    Publish-PnPContentType -ContentType $cts[$CTindex - 1].Id
}

Write-Host -ForegroundColor Green "All done"

</code></pre>



<p class="wp-block-paragraph">When you run the script, you&#8217;ll see something like this:</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="264" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image.png?resize=1024%2C264&#038;ssl=1" alt="" class="wp-image-51907" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image.png?resize=1024%2C264&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image.png?resize=300%2C77&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image.png?resize=768%2C198&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image.png?resize=1536%2C396&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image.png?w=2034&amp;ssl=1 2034w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The Document Set Content Types are listed, showing whether or not the <code>NewDocSet</code> form has been modernized already. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> means it has been, <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/274c.png" alt="❌" class="wp-smiley" style="height: 1em; max-height: 1em;" /> means it has not been.</p>



<p class="wp-block-paragraph">After choosing the Document Set Content Type you want, you&#8217;re prompted to ask if you&#8217;d like to publish it. I can think of scenarios when you would (I&#8217;m done setting it up) &#8211; and when you wouldn&#8217;t (I&#8217;m still working on it) &#8211; so I made it an option.</p>



<p class="wp-block-paragraph">Here&#8217;s hoping this script proves useful to you. I&#8217;ll be sure to submit it to the <a href="https://pnp.github.io/script-samples/">Script Samples | PnP Samples</a>, too. Whenever you&#8217;re starting a script, be sure to check for a good sample to start with there.</p>



<figure class="wp-block-image size-full"><a href="https://pnp.github.io/script-samples/" target="_blank" rel=" noreferrer noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" width="969" height="95" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-1.png?resize=969%2C95&#038;ssl=1" alt="" class="wp-image-51908" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-1.png?w=969&amp;ssl=1 969w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-1.png?resize=300%2C29&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/06/image-1.png?resize=768%2C75&amp;ssl=1 768w" sizes="auto, (max-width: 969px) 100vw, 969px" /></a></figure>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">IMPORTANT CAVEAT [Added 2025-07-23]</h2>



<p class="wp-block-paragraph">Today I wanted to revert this change on a Content Type which inherits from Document Set. Unfortunately, between Dan and me both hammering on it, we couldn&#8217;t come up with a way to make it work. One would think that replacing the <code>NewFormClientSideComponentId</code> property for the Content Type with the default value it had in it before would be the way to revert the change. For whatever reason &#8211;  and it&#8217;s possible there&#8217;s some encoding trick we missed &#8211; this doesn&#8217;t work.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2025/06/12/modernizing-the-document-set-newdocset-form/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">51906</post-id>	</item>
		<item>
		<title>Setting the Sharing Link Default to &#8216;Only people with existing access&#8217;</title>
		<link>https://sympmarc.com/2025/04/07/setting-the-sharing-link-default-to-only-people-with-existing-access/</link>
					<comments>https://sympmarc.com/2025/04/07/setting-the-sharing-link-default-to-only-people-with-existing-access/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 07 Apr 2025 17:29:51 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[sharing links]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[PnP.PowerShell]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=50232</guid>

					<description><![CDATA[Sharing content in SharePoint using links is a great capability. Microsoft has worked over the years to make the process simple to use, and we even see the same sharing dialog in SharePoint and on our PCs when we share using Windows Explorer. As tenant owners, we can set the default type of sharing link...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Sharing content in SharePoint using links is a great capability. Microsoft has worked over the years to make the process simple to use, and we even see the same sharing dialog in SharePoint and on our PCs when we share using Windows Explorer.</p>



<p class="wp-block-paragraph">As tenant owners, we can set the default type of sharing link to match our organization&#8217;s governance. This setting in in the SharePoint Admin Center. You can reach it under Policies / Sharing. (No, not in Settings, where I always look for it!) The default value for the setting is <strong>Anyone with the link</strong>, which you can see in the screenshot below.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="259" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image.png?resize=1024%2C259&#038;ssl=1" alt="" class="wp-image-50283" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image.png?resize=1024%2C259&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image.png?resize=300%2C76&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image.png?resize=768%2C194&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image.png?resize=1536%2C388&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image.png?w=1941&amp;ssl=1 1941w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">You can also see that there are only three options listed. In fact, there are four options available. The missing one is <strong>Only people with existing access</strong>. This &#8211; to me &#8211; is almost always the best default option because it doesn&#8217;t change the permissions on the object (item, file, folder, page, etc.). It just creates a link to it.</p>



<p class="wp-block-paragraph">One of the reasons we often see a real mess of permissions is that the default setting is <strong>Specific people (only the people the user specifies)</strong>. Each time someone uses that option, there&#8217;s a special link created which &#8211; if used by the recipient &#8211; breaks the permission inheritance on the object. In fact, all three of the available options above has the potential to change the permissions on the object &#8211; if it is used by a recipient. That&#8217;s messy, unless it&#8217;s what you intend to do.</p>



<p class="wp-block-paragraph">Wouldn&#8217;t it be great if we could set <strong>Only people with existing access</strong> as the default at the tenant level? Well, Microsoft &#8211; in their infinite wisdom &#8211; has not given us that option. It&#8217;s not for a lack of us asking, though. Some of us MVPs have been bringing it up for years.</p>



<p class="wp-block-paragraph">Wanting to use <strong>Only people with existing access</strong> as the default is especially important in an Intranet setting. In the vast majority of cases, you give <strong>Everyone except external users</strong> (EEEU) read permissions on the entire Intranet &#8211; all the sites. Since everyone already has read access, we actually don&#8217;t want people breaking inheritance with a link just to say, &#8220;The thing you want is here.&#8221;</p>



<p class="wp-block-paragraph">Unfortunately, as I mentioned you can&#8217;t set <strong>Only people with existing access</strong> as the default in the SharePoint Admin Center; you have to do it site by site.</p>



<p class="wp-block-paragraph">I&#8217;ve got a script I use to change the default on Intranet site called <code>setSharingSettings.ps1</code>. I figured I&#8217;d share the script and show you what the results are.</p>



<p class="wp-block-paragraph">Let&#8217;s assume the tenant setting is <strong>Specific people (only the people the user specifies</strong>, like so.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="249" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-4.png?resize=1024%2C249&#038;ssl=1" alt="" class="wp-image-50287" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-4.png?resize=1024%2C249&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-4.png?resize=300%2C73&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-4.png?resize=768%2C187&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-4.png?resize=1536%2C374&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-4.png?w=1928&amp;ssl=1 1928w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Here&#8217;s how that plays out in individual sites.</p>



<h2 class="wp-block-heading"><strong>BEFORE</strong></h2>



<h3 class="wp-block-heading">Setting in SharePoint Admin for the specific site</h3>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="287" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-1.png?resize=1024%2C287&#038;ssl=1" alt="" class="wp-image-50284" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-1.png?resize=1024%2C287&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-1.png?resize=300%2C84&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-1.png?resize=768%2C215&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-1.png?resize=1536%2C430&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-1.png?resize=2048%2C573&amp;ssl=1 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"></p>



<h3 class="wp-block-heading">In the sharing dialog for objects in that site</h3>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="897" height="1024" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-5.png?resize=897%2C1024&#038;ssl=1" alt="" class="wp-image-50288" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-5.png?resize=897%2C1024&amp;ssl=1 897w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-5.png?resize=263%2C300&amp;ssl=1 263w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-5.png?resize=768%2C877&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-5.png?w=1146&amp;ssl=1 1146w" sizes="auto, (max-width: 897px) 100vw, 897px" /></figure>



<h3 class="wp-block-heading">If you don&#8217;t enter a name, you get an error when you try to copy the link</h3>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="719" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-7.png?resize=1024%2C719&#038;ssl=1" alt="" class="wp-image-50290" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-7.png?resize=1024%2C719&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-7.png?resize=300%2C211&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-7.png?resize=768%2C539&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-7.png?w=1172&amp;ssl=1 1172w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading"><strong>AFTER</strong></h2>



<h3 class="wp-block-heading">Setting in SharePoint Admin for the specific site</h3>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="275" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-8.png?resize=1024%2C275&#038;ssl=1" alt="" class="wp-image-50291" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-8.png?resize=1024%2C275&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-8.png?resize=300%2C81&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-8.png?resize=768%2C207&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-8.png?resize=1536%2C413&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-8.png?resize=2048%2C551&amp;ssl=1 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">In the sharing dialog for objects in that site</h3>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="870" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-11.png?resize=1024%2C870&#038;ssl=1" alt="" class="wp-image-50294" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-11.png?resize=1024%2C870&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-11.png?resize=300%2C255&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-11.png?resize=768%2C652&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-11.png?w=1167&amp;ssl=1 1167w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">When copying the sharing link</h3>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="780" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-9.png?resize=1024%2C780&#038;ssl=1" alt="" class="wp-image-50292" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-9.png?resize=1024%2C780&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-9.png?resize=300%2C229&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-9.png?resize=768%2C585&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/04/image-9.png?w=1171&amp;ssl=1 1171w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">PowerShell Script</h2>



<p class="wp-block-paragraph">Here&#8217;s my <code>setSharingSettings.ps1</code> PowerShell script using <a href="https://pnp.github.io/powershell/" target="_blank" rel="noreferrer noopener">PnP.PowerShell</a> which you can use to change the default sharing link setting for all sites associated with a Hub Site. That &#8211; in many cases &#8211; will work for your entire Intranet. You may want to apply this change to other sets of sites, as well.</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell line-numbers"># Load PnP.PowerShell, if it isn't already
Import-Module PnP.PowerShell -Force
$tenant = "MyTenantName"
$adminSiteUrl = "https://$($tenant)-admin.sharepoint.com"
$clientId = "" # Enter your ClientId here
$nameOfHubSite = "" # Enter the name of your Hub Site
$adminConnection = Connect-PnPOnline -Url $adminSiteUrl -ClientId $clientId -Interactive -ReturnConnection
$sites = Get-PnPTenantSite -Connection $adminConnection
$hubSite = $sites | Where-Object { $_.Title -eq $nameOfHubSite }
$sitesToSet = $sites | Where-Object { $_.HubSiteId -eq $hubSite.HubSiteId }
$filteredSitesToSet = $sitesToSet #| Select-Object -First 1 # Use filtering here if you'd like to test the script
foreach ($site in $filteredSitesToSet) {
&nbsp; &nbsp; $thisSite = Get-PnPTenantSite -Connection $adminConnection -Identity $site
&nbsp; &nbsp; if (!$thisSite.DefaultLinkToExistingAccess) {
&nbsp; &nbsp; &nbsp; &nbsp; Write-Host -BackgroundColor Cyan "Site: $($site.Url) :: Changing setting for DefaultLinkToExistingAccess: $($thisSite.DefaultLinkToExistingAccess)"
&nbsp; &nbsp; &nbsp; &nbsp; Set-PnPTenantSite -Connection $adminConnection -Identity $site -DefaultLinkToExistingAccess $true
&nbsp; &nbsp; }
}</code></pre>



<p class="wp-block-paragraph"></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<h2 class="wp-block-heading">Update on 2025-04-08</h2>



<p class="wp-block-paragraph">Apparently, there&#8217;s a way to change the default setting at the tenant level &#8211; but only with PowerShell. Thanks to <a href="https://www.linkedin.com/in/srice08/" target="_blank" rel="noreferrer noopener">Steven Rice</a> for cluing me in.</p>



<p class="wp-block-paragraph">Both the SPO and PnP PowerShell modules provide the ability to change this setting. Here are the two variations with a link to the docs:</p>



<h3 class="wp-block-heading">PnP.PowerShell</h3>



<p class="wp-block-paragraph">See: <a href="https://pnp.github.io/powershell/cmdlets/Set-PnPTenant.html"><a href="https://pnp.github.io/powershell/cmdlets/Set-PnPTenant.html#-coredefaultlinktoexistingaccess">Set-PnPTenant | PnP PowerShell</a></a></p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">Set-PnPTenant -CoreDefaultLinkToExistingAccess $true</code></pre>



<h3 class="wp-block-heading">SPO PowerShell</h3>



<p class="wp-block-paragraph">See: <a href="https://pnp.github.io/powershell/cmdlets/Set-PnPTenant.html"><a href="https://learn.microsoft.com/en-us/powershell/module/sharepoint-online/set-spotenant?view=sharepoint-ps#-coredefaultlinktoexistingaccess">Set-SPOTenant (Microsoft.Online.SharePoint.PowerShell) | Microsoft Learn</a></a></p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">Set-SPOTenant -CoreDefaultLinkToExistingAccess $true</code></pre>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">How does this mesh with your governance? Is this a change you plan to make?</p>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2025/04/07/setting-the-sharing-link-default-to-only-people-with-existing-access/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">50232</post-id>	</item>
		<item>
		<title>Webinar Recap: Managing Unlicensed OneDrive Accounts Effectively</title>
		<link>https://sympmarc.com/2025/03/17/webinar-recap-managing-unlicensed-onedrive-accounts-effectively/</link>
					<comments>https://sympmarc.com/2025/03/17/webinar-recap-managing-unlicensed-onedrive-accounts-effectively/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 17 Mar 2025 17:32:56 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[OneDrive]]></category>
		<category><![CDATA[OneDrive for Business]]></category>
		<category><![CDATA[unlicensed]]></category>
		<category><![CDATA[Microsoft 365 Archive]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=50116</guid>

					<description><![CDATA[Last Thursday, I did a webinar with ShareGate covering the upcoming changes for unlicensed OneDrives: Race against the OneDrive clock: How to stay ahead of Microsoft&#8217;s deadline I tried to cover many aspects of the upcoming changes, which are primarily outlined in this article from Microsoft: Manage unlicensed OneDrive user accounts &#8211; SharePoint in Microsoft...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Last Thursday, I did a webinar with <a href="https://sharegate.com/" target="_blank" rel="noreferrer noopener">ShareGate</a> covering the upcoming changes for unlicensed OneDrives: <a href="https://sharegate.com/resource/race-against-the-onedrive-clock-how-to-stay-ahead-of-microsofts-deadline">Race against the OneDrive clock: How to stay ahead of Microsoft&#8217;s deadline</a></p>



<figure class="wp-block-image size-large"><a href="https://sharegate.com/resource/race-against-the-onedrive-clock-how-to-stay-ahead-of-microsofts-deadline" target="_blank" rel=" noreferrer noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="470" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/03/image.png?resize=1024%2C470&#038;ssl=1" alt="" class="wp-image-50118" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/03/image.png?resize=1024%2C470&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/03/image.png?resize=300%2C138&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/03/image.png?resize=768%2C352&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/03/image.png?resize=1536%2C705&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2025/03/image.png?w=1804&amp;ssl=1 1804w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">I tried to cover many aspects of the upcoming changes, which are primarily outlined in this article from Microsoft: <a href="https://learn.microsoft.com/en-us/sharepoint/unlicensed-onedrive-accounts">Manage unlicensed OneDrive user accounts &#8211; SharePoint in Microsoft 365 | Microsoft Learn</a> To me, the article tries to cover too much, which makes it pretty confusing. I had to read sections of it multiple times to understand the details. I did it, so hopefully you don&#8217;t have to. Check out <a href="https://sharegate.com/resource/race-against-the-onedrive-clock-how-to-stay-ahead-of-microsofts-deadline" target="_blank" rel="noreferrer noopener">the video</a> if you need to understand things better. Yes, you&#8217;ll need to register, but these are our ShareGate friends, and they use your contact info judiciously.</p>



<p class="wp-block-paragraph">These changes were announced last August, but many people missed it or decided to kick it down the road. Well, we&#8217;re getting to the fork in that road where we need to act on this.</p>



<p class="wp-block-paragraph">With questions during the webinar and from our contact form at <a href="https://www.sympraxisconsulting.com/asksympraxis/" target="_blank" rel="noreferrer noopener">Ask Sympraxis</a> there are a couple of things I don&#8217;t think covered well enough. Here are some questions I&#8217;d like to answer.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Regarding the upcoming archive change for OneDrive, will unlicensed OneDrives under Legal Hold be archived? We do not have PAYG storage set up, we use default retention, but my concern is about our Legal Hold content. Thanks!</em></p>
</blockquote>



<p class="wp-block-paragraph">From <a href="https://learn.microsoft.com/en-us/sharepoint/unlicensed-onedrive-accounts#use-microsoft-purview-in-archived-state" target="_blank" rel="noreferrer noopener">this section of the above article</a>, we know that &#8220;Archived OneDrive accounts <strong>fully honor retention policies, settings, and litigation hold and eDiscovery hold</strong>. For example, if your company has a five-year retention policy, it remains unchanged whether the OneDrive account is active or archived. Archiving doesn&#8217;t reset the timeline of the retention policy or holds.&#8221;</p>



<p class="wp-block-paragraph">Several people ask some variant of this question, which is also sort of implied in the question above:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>Microsoft Archive requires you to setup a subscription for the pay-as-you-go service. If an organisation hasn&#8217;t done this, do we know where these charges go?</em></p>
</blockquote>



<p class="wp-block-paragraph">or</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph"><em>For us it says &#8220;Enable billing to reactivate archived OneDrive accounts.&#8221; in the Admin Center. So I guess we are &#8220;ok&#8221; as long as we do not enable billing?</em></p>
</blockquote>



<p class="wp-block-paragraph">First off, it&#8217;s important to note that OneDrive storage is not at all connected to SharePoint storage. The amount of storage we have available in the SharePoint Admin Center is only for SharePoint, not for OneDrives.</p>



<p class="wp-block-paragraph">I didn&#8217;t know the definitive answer to this question, but I assumed that Microsoft would automatically enable Microsoft Archive if you had OneDrives which need to be archived due to retention polices or some other reason that would require them to kept after your tenant is affected by this change.</p>



<p class="wp-block-paragraph">According to a contact at Microsoft, if you don&#8217;t set up Microsoft Archive, your unlicensed OneDrives which need to be archived <strong>will</strong> be archived. Without PAYGO, you won&#8217;t be charged for the storage for those OneDrives. If you need to reactivate any of that content, though, you&#8217;ll need to enable PAYGO for Microsoft Archive. See this article about how to <a href="https://learn.microsoft.com/en-us/microsoft-365/archive/archive-setup?view=o365-worldwide">Set up Microsoft 365 Archive &#8211; Microsoft 365 Archive | Microsoft Learn</a> You can also check out the official word on this from Microsoft in this <a href="https://www.youtube.com/watch?v=uEpfudZ2xag" target="_blank" rel="noreferrer noopener">OneDrive Customer Office Hours | March 2025</a> recording, specifically at <a href="https://youtu.be/uEpfudZ2xag?si=z60f8pZDMS_YEgwk&amp;t=713" target="_blank" rel="noreferrer noopener">11:53</a>.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Have other questions? Feel free to ask them in the comments and I&#8217;ll add to the post.</p>



<h2 class="wp-block-heading">Resources</h2>



<ul class="wp-block-list">
<li><a href="https://learn.microsoft.com/SharePoint/unlicensed-onedrive-accounts">Manage unlicensed OneDrive user accounts</a></li>



<li><a href="https://learn.microsoft.com/SharePoint/unlicensed-onedrive-accounts">Manage unlicensed OneDrive user accounts (FAQs)</a></li>



<li><a href="https://learn.microsoft.com/en-us/microsoft-365/archive/archive-overview">Overview of Microsoft 365 Archive</a></li>



<li><a href="https://learn.microsoft.com/en-us/microsoft-365/archive/archive-setup?view=o365-worldwide">Set up Microsoft 365 Archive &#8211; Microsoft 365 Archive | Microsoft Learn</a></li>



<li><a href="https://learn.microsoft.com/en-us/microsoft-365/archive/archive-pricing">Pricing model for Microsoft 365 Archive</a></li>



<li><a href="https://techcommunity.microsoft.com/blog/microsoft_365_archive_blog/microsoft-365-archive-eliminates-reactivation-fees-by-march-31-2025/4383215">Microsoft 365 Archive Eliminates Reactivation Fees by March 31, 2025</a></li>



<li><a href="https://www.youtube.com/watch?v=uEpfudZ2xag" target="_blank" rel="noreferrer noopener">OneDrive Customer Office Hours | March 2025</a></li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2025/03/17/webinar-recap-managing-unlicensed-onedrive-accounts-effectively/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">50116</post-id>	</item>
		<item>
		<title>Dear Microsoft: Please Give Us Back &#8220;Discard changes&#8221; in the New SharePoint Page Editing Mode</title>
		<link>https://sympmarc.com/2024/09/05/dear-microsoft-please-give-us-back-discard-changes-in-the-new-sharepoint-page-editing-mode/</link>
					<comments>https://sympmarc.com/2024/09/05/dear-microsoft-please-give-us-back-discard-changes-in-the-new-sharepoint-page-editing-mode/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 05 Sep 2024 14:58:39 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Page Properties]]></category>
		<category><![CDATA[Discard changes]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=49273</guid>

					<description><![CDATA[Recently as I've been editing SharePoint pages, I've noticed that the Discard changes button is missing in the toolbar. It's a tiny little thing, and I just assumed that it was an occasional bug. But now that the new experience has rolled out to more tenants I work in, I've realized it's a real change, not just a bug.]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph"><strong>If this bugs you, please go vote on this item in the Feedback Portal</strong>: <a href="https://feedbackportal.microsoft.com/feedback/idea/ece9d1b4-e668-ef11-a4e7-6045bdb238dc?q=discard+changes">New Co-Authoring Feature REMOVES Discard Changes · Community (microsoft.com)</a></p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Recently as I&#8217;ve been editing SharePoint pages, I&#8217;ve noticed that the <code>Discard changes</code> button is missing in the toolbar. It&#8217;s a tiny little thing, and I just assumed that it was an occasional bug. But now that the new experience has rolled out to more tenants I work in, I&#8217;ve realized it&#8217;s a real change, not just a bug.</p>



<p class="wp-block-paragraph">If you&#8217;re not familiar with this little button, it allows[ed] you to throw away anything you&#8217;ve changed in the page. It&#8217;s both an escape hatch (&#8220;Whoa, I really screwed this up!&#8221;) and a real convenience.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="214" height="67" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image.png?resize=214%2C67&#038;ssl=1" alt="" class="wp-image-49274"/></figure>
</div>


<p class="wp-block-paragraph">I understand through my observations that this is a real change. I&#8217;m not sure why anyone thought it was a good idea to remove it.</p>



<p class="wp-block-paragraph">One extremely common reason why we put a page we have access to into Edit mode is to check the settings on something. We just want to look at an existing Web Part or two and see which settings we used so we can reproduce something similar elsewhere. Without the <code>Discard changes</code> button, we can&#8217;t actually leave Edit mode, leaving things as they were.</p>



<p class="wp-block-paragraph">My bright idea when I was seeing this as a bug was to just remove the <code>?Mode=Edit</code> query string value, which then shows the page in View move, rather than Edit mode.</p>



<p class="wp-block-paragraph">The problem here is that when we navigate away from the page we&#8217;ve opened in Edit mode, it stays in the <code>Needs publishing</code> state. Effectively it&#8217;s checked out to the person who did it as a draft, even though they haven&#8217;t actually changed anything.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="708" height="101" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-1.png?resize=708%2C101&#038;ssl=1" alt="" class="wp-image-49276" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-1.png?w=708&amp;ssl=1 708w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-1.png?resize=300%2C43&amp;ssl=1 300w" sizes="auto, (max-width: 708px) 100vw, 708px" /></figure>



<p class="wp-block-paragraph">Now we are forced to <code>Republish</code> the page to put it back into the right state. But what if I&#8217;ve inadvertently changed something I didn&#8217;t realize. OR, even worse, I&#8217;ve changed a few things just to test something out and now my escape hatch is gone?</p>



<p class="wp-block-paragraph">I can only imagine that this has something to do with co-authoring pages. If you ask me, the frequency of co-authoring is going to be exceedingly small. Most often a single person is responsible for a page and they manage it and its content. If I were to hazard a guess, co-authoring will be used less than 10% of the time. It&#8217;s a shiny new feature which few people have seen a need for.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="543" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-2.png?resize=1024%2C543&#038;ssl=1" alt="" class="wp-image-49277" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-2.png?resize=1024%2C543&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-2.png?resize=300%2C159&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-2.png?resize=768%2C407&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-2.png?resize=1536%2C814&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-2.png?w=2035&amp;ssl=1 2035w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">As part of these feature updates (which also includes a new toolbox for the Web Parts, image suggestions, and additional page layouts), we did get an improved Version History. As before, we can restore an older version of the page from an earlier time. Unfortunately, this is going to be a required action when we simply wanted to put a page into Edit mode to check something.</p>



<p class="wp-block-paragraph">Yes, we have the <code>Undo</code> button on the toolbar, but even if I undo all the way back to no changes, I can&#8217;t leave the page in its previous state without publishing it, creating a new version with no changes.</p>



<p class="wp-block-paragraph">Here&#8217;s the Version history from a page where I simply put it into Edit mode and then abandoned it.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="465" height="1024" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-4.png?resize=465%2C1024&#038;ssl=1" alt="" class="wp-image-49279" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-4.png?resize=465%2C1024&amp;ssl=1 465w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-4.png?resize=136%2C300&amp;ssl=1 136w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/09/image-4.png?w=473&amp;ssl=1 473w" sizes="auto, (max-width: 465px) 100vw, 465px" /></figure>
</div>


<p class="wp-block-paragraph">Without knowing what the logic was here; this is my request. Dear Microsoft: Please give us back the <code>Discard changes</code> button!</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li><a href="https://techcommunity.microsoft.com/t5/microsoft-sharepoint-blog/introducing-coauthoring-for-sharepoint-pages-and-news/ba-p/4192161">Introducing Coauthoring for SharePoint Pages and News (microsoft.com)</a></li>



<li><a href="https://support.microsoft.com/en-us/office/collaborate-on-sharepoint-pages-and-news-with-coauthoring-91d7dc25-37c3-44a4-99da-f552e0f9cfe9">Collaborate on SharePoint pages and news with coauthoring &#8211; Microsoft Support</a></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Since I posted this, I&#8217;ve found quite a few other posts and threads about it, so I figured I&#8217;d gather them here. If you know of others, let me know and I&#8217;ll add them. If we have one list to show to the folks at Microsoft, maybe we can sway them.</p>



<ul class="wp-block-list">
<li>If this bugs you, please go vote on this item in the Feedback Portal: <a href="https://feedbackportal.microsoft.com/feedback/idea/ece9d1b4-e668-ef11-a4e7-6045bdb238dc?q=discard+changes">New Co-Authoring Feature REMOVES Discard Changes · Community (microsoft.com)</a></li>



<li>Julie Turner on LinkedIn: <a href="https://www.linkedin.com/posts/juliemturner_dear-microsoft-please-give-us-back-discard-activity-7237476362373017602-TY7H" target="_blank" rel="noreferrer noopener">https://www.linkedin.com/posts/juliemturner_dear-microsoft-please-give-us-back-discard-activity-7237476362373017602-TY7H</a></li>



<li><a href="https://techcommunity.microsoft.com/t5/sharepoint/new-co-authoring-feature-removes-discard-changes/m-p/4234187">New Co-Authoring Feature REMOVES Discard Changes &#8211; Microsoft Community Hub</a></li>



<li><a href="https://techcommunity.microsoft.com/t5/sharepoint/what-happened-to-the-quot-discard-changes-quot-option-when/m-p/4230852">What Happened To The &#8220;Discard Changes&#8221; Option When Editing SharePoint Site Pages??? &#8211; Microsoft Community Hub</a></li>
</ul>



<p class="wp-block-paragraph"></p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2024/09/05/dear-microsoft-please-give-us-back-discard-changes-in-the-new-sharepoint-page-editing-mode/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">49273</post-id>	</item>
		<item>
		<title>SharePoint Lookbook: What&#8217;s happened to it?</title>
		<link>https://sympmarc.com/2024/07/29/sharepoint-lookbook-whats-happened-to-it/</link>
					<comments>https://sympmarc.com/2024/07/29/sharepoint-lookbook-whats-happened-to-it/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 29 Jul 2024 17:21:52 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Microsoft Learning]]></category>
		<category><![CDATA[adoption]]></category>
		<category><![CDATA[SharePoint Lookbook]]></category>
		<category><![CDATA[Learning Pathways]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=49092</guid>

					<description><![CDATA[There has been a lot of confusion about what's happened to the SharePoint Lookbook. I've found myself explaining the story to many people, so I thought capturing it in a blog post might be helpful: if only so I can refer people to it instead of typing again.]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">There has been a lot of confusion about what&#8217;s happened to the SharePoint Lookbook. I&#8217;ve found myself explaining the story to many people, so I thought capturing it in a blog post might be helpful: if only so I can refer people to it instead of typing again.</p>



<p class="wp-block-paragraph">If you weren&#8217;t familiar with the Lookbook, it provided a set of site examples which a Tenant Admin could automatically deploy into a tenant. It gave some excellent examples of how you <strong>might </strong>solve specific business needs with SharePoint sites. I always recommended that the examples be used as exactly that: examples of the building blocks you could use to build your own sites. The examples probably wouldn&#8217;t perfectly solve your business needs, but they gave very detailed information about how you might go about it.</p>



<p class="wp-block-paragraph">Most of the examples included:</p>



<ul class="wp-block-list">
<li>The ability to instantiate the example in your tenant with a few clicks</li>



<li>Details of any site features used in the example</li>



<li>Detailed information about what Web Parts were on each page and how they were configured</li>



<li>Descriptions of any custom lists or libraries included with the example</li>
</ul>



<p class="wp-block-paragraph">Here&#8217;s a screenshot from the example entitled The Perspective:</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="860" height="1024" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/07/image-1.png?resize=860%2C1024&#038;ssl=1" alt="" class="wp-image-49096" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/07/image-1.png?resize=860%2C1024&amp;ssl=1 860w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/07/image-1.png?resize=252%2C300&amp;ssl=1 252w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/07/image-1.png?resize=768%2C914&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/07/image-1.png?w=1007&amp;ssl=1 1007w" sizes="auto, (max-width: 860px) 100vw, 860px" /></figure>



<p class="wp-block-paragraph">Microsoft decided to shut down the Lookbook site, which was at lookbook.microsoft.com, in June, 2024. The reasons for this aren&#8217;t important, really, but they were valid on some level.</p>



<p class="wp-block-paragraph">The old URL no longer works, but some of the basic information has moved into the <a href="https://adoption.microsoft.com/en-us/sharepoint-look-book/">SharePoint Look Book – Microsoft Adoption</a>. This is on the Microsoft Adoption site and is a skinnied down version of what we used to have in the Lookbook. We also can&#8217;t provision anything directly: it&#8217;s now truly just examples, and with a bit less depth.</p>



<p class="wp-block-paragraph">Through the wonders of the World Wide Web, though, we can still see the old Lookbook in all its glory &#8211; but without the functionality &#8211; in the last successful crawl from the Wayback Machine from June 9, 2024: <a href="https://web.archive.org/web/20240609031414/https://lookbook.microsoft.com/">SharePoint provisioning service (archive.org)</a></p>



<p class="wp-block-paragraph">To me, the worst part of this is that Microsoft Learning Pathways is now harder to deploy. No more one-button-push for a Global Admin, but there are manual deployment steps which a SharePoint Admin (less permission required!) can take. We recently did an Ask Sympraxis about this: <a href="https://www.sympraxisconsulting.com/asksympraxis/whats-new-with-microsoft-365-learning-pathways-v5-and-the-lookbook/">New features: Microsoft 365 SharePoint Learning Pathways v5 (sympraxisconsulting.com)</a> Yes, there&#8217;s a new version of Learning Pathways (v5), and a new way to deploy it (which was always another way to do it, but more labor intensive). If you need a hand with that deployment, Sympraxis offers a <a href="https://www.sympraxisconsulting.com/portfolio/jumpstart/">Microsoft 365 Jumpstart</a> to get you up and running.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">What will you miss most about the old Lookbook?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2024/07/29/sharepoint-lookbook-whats-happened-to-it/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">49092</post-id>	</item>
		<item>
		<title>I&#8217;m Switching from &#8216;Sync&#8217; to &#8216;Add shortcut to OneDrive&#8217; &#8211; and Why</title>
		<link>https://sympmarc.com/2024/07/15/im-switching-from-sync-to-add-shortcut-to-onedrive-and-why/</link>
					<comments>https://sympmarc.com/2024/07/15/im-switching-from-sync-to-add-shortcut-to-onedrive-and-why/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 15 Jul 2024 17:57:15 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[OneDrive]]></category>
		<category><![CDATA[better practice]]></category>
		<category><![CDATA[sync]]></category>
		<category><![CDATA[Add shortcut to OneDrive]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=48982</guid>

					<description><![CDATA[One of the downsides of being immersed in the Microsoft 365 platform is I develop habits based on how the platform worked historically. One of these is my choice to use Sync with Document Libraries exclusively, instead of Add shortcut to OneDrive. (Note that the language on this &#8220;button&#8221; has changed over time, but as...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">One of the downsides of being immersed in the Microsoft 365 platform is I develop habits based on how the platform worked historically. One of these is my choice to use <strong>Sync </strong>with Document Libraries exclusively, instead of <strong>Add shortcut to OneDrive</strong>. (Note that the language on this &#8220;button&#8221; has changed over time, but as of the writing of this post says <strong>Add shortcut to OneDrive</strong>).</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="999" height="247" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/07/image.png?resize=999%2C247&#038;ssl=1" alt="" class="wp-image-48985" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/07/image.png?w=999&amp;ssl=1 999w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/07/image.png?resize=300%2C74&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/07/image.png?resize=768%2C190&amp;ssl=1 768w" sizes="auto, (max-width: 999px) 100vw, 999px" /></figure>



<p class="wp-block-paragraph">Today my fellow Sympraxian shared this great article from Hans Brender (<a data-type="link" data-id="https://twitter.com/HansBrender" href="https://twitter.com/HansBrender" target="_blank" rel="noreferrer noopener">@HansBrender</a>): <a href="https://hansbrender.com/2024/10/03/add-to-onedrive-2/">Add to OneDrive</a>. As I read through the article &#8211; it&#8217;s very detailed &#8211; I decided I&#8217;ve been holding things wrong. Hans knows OneDrive better than just about anybody &#8211; he&#8217;s Mr. OneDrive!</p>



<p class="wp-block-paragraph">What I&#8217;ve told clients in the past is to pick one or the other and only use that choice. It&#8217;s a personal decision, rather than an organizational decision. The reason to pick one or the other and be consistent about it is that you can&#8217;t use both methods with any single Document Library.</p>



<p class="wp-block-paragraph">BUT, Hans points out several limitations with the &#8220;classic <strong>Sync</strong>&#8220;. (Classic, modern, neo-classic-modern&#8230; we run out of words!) </p>



<ul class="wp-block-list">
<li>There is a limit of 300,000 total files synced (the count, not the size)</li>



<li>The sync points you set up on one device aren&#8217;t applied to your other devices. (This may also seem like a benefit, if you do different types of work with your different devices.)</li>



<li>Stopping a sync is a somewhat obtuse process, so many people simply never stop syncing things.</li>
</ul>



<p class="wp-block-paragraph">On the other hand, there are some upsides for <strong>Add shortcut to OneDrive</strong>.</p>



<ul class="wp-block-list">
<li>If the org wants to push shortcuts out, then people should use <strong>Add shortcut to OneDrive</strong> (as noted, the text has changed since Hans&#8217; article).</li>



<li>You can rearrange the shortcuts if you choose to provide something more intuitive for yourself.</li>
</ul>



<p class="wp-block-paragraph">Like I said above, I&#8217;ve always used <strong>Sync</strong>. But after reading the article, I&#8217;m feeling I need to change my habit. I&#8217;ve had a feeling for a while now that Microsoft &#8211; in its infinite wisdom and having the goal to help everyone &#8211; might decide to deprecate <strong>Sync</strong>. I have no knowledge of this actually happening, but I have a feeling.</p>



<p class="wp-block-paragraph">If you are like me and you work in multiple tenants, you may choose one or other of the two approaches for different reasons. But from now on I&#8217;m going to use the <strong>Add shortcut to OneDrive</strong> option. Plus, I&#8217;m going to go through the effort of moving from classic <strong>Sync </strong>to <strong>Add shortcut to OneDrive</strong> &#8211; as soon as I hang up here.</p>



<p class="wp-block-paragraph">Hans&#8217; article does a MUCH better job of explaining all this, and in great detail, so I chose to only hit the high points. I strongly recommend reading his article to get all the details. </p>



<h2 class="wp-block-heading">Resources</h2>



<ul class="wp-block-list">
<li><a href="https://hansbrender.com/2024/10/03/add-to-onedrive-2/">Add to OneDrive</a></li>



<li><a href="https://support.microsoft.com/en-us/office/add-shortcuts-to-shared-folders-in-onedrive-for-work-or-school-d66b1347-99b7-4470-9360-ffc048d35a33#:%7E:text=In%20OneDrive%2C%20in%20the%20navigation,Add%20shortcut%20to%20My%20files." target="_blank" rel="noreferrer noopener">Add shortcuts to shared folders in OneDrive for work or school</a>&nbsp;</li>



<li><a href="https://support.microsoft.com/en-us/office/restrictions-and-limitations-in-onedrive-and-sharepoint-64883a5d-228e-48f5-b3d2-eb39e07630fa" target="_blank" rel="noreferrer noopener">Restrictions and limitations in OneDrive and SharePoint</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2024/07/15/im-switching-from-sync-to-add-shortcut-to-onedrive-and-why/feed/</wfw:commentRss>
			<slash:comments>9</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">48982</post-id>	</item>
		<item>
		<title>Reindexing SharePoint Content Manually &#8211; and an Indication of Improvements on the Horizon</title>
		<link>https://sympmarc.com/2024/06/17/reindexing-sharepoint-content-manually-and-an-indication-of-improvements-on-the-horizon/</link>
					<comments>https://sympmarc.com/2024/06/17/reindexing-sharepoint-content-manually-and-an-indication-of-improvements-on-the-horizon/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 17 Jun 2024 17:12:07 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Microsoft Search]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[Document Library]]></category>
		<category><![CDATA[search]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=48784</guid>

					<description><![CDATA[If you&#8217;ve been using SharePoint for a while, you know that newly added content may not show up in search results immediately. These days, you my most directly notice this with News Posts in roll up News Web Parts or simply using the Microsoft Search box at the top of every page. Microsoft 365 had...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">If you&#8217;ve been using SharePoint for a while, you know that newly added content may not show up in search results immediately. These days, you my most directly notice this with News Posts in roll up News Web Parts or simply using the Microsoft Search box at the top of every page.</p>



<p class="wp-block-paragraph">Microsoft 365 had gotten very good at &#8220;noticing&#8221; content changes, and until the last six months or so, you could expect that newly added content or content with newly set metadata columns would show up in search within a few minutes. Unfortunately, that performance level (which was never reflected in an actual Service Level Agreement (SLA) from Microsoft) is seemingly a thing of the past.</p>



<p class="wp-block-paragraph">These days, I find myself manually triggering a reindex either at the Document Library or site level quite often. It&#8217;s the only way we can try to get things into the index on Microsoft 365; there&#8217;s no &#8220;full crawl&#8221; like we used to have in the on-premises days. Sadly, even these manually triggered reindexes aren&#8217;t a reliable way to solve the lags, though they give us something to do while we wait, at least.</p>



<p class="wp-block-paragraph">One heartening development is that the manual reindexing tools have started to ask why you are choosing to reindex the container you&#8217;ve chosen. This can only mean that Microsoft has recognized the issues and is trying to better understand why we are triggering the reindexes ourselves. Note that you must also tick the box saying that you &#8220;acknowledge and agree to the statement above&#8221;, meaning the somewhat scary language about taxing the servers.</p>



<p class="wp-block-paragraph">Here are the two dialogs where we can trigger reindexing manually. You must be a Site Owner (or Site Admin) to get to these settings.</p>



<p class="wp-block-paragraph">First, on a Document Library. This can be found at <img data-recalc-dims="1" loading="lazy" decoding="async" width="55" height="44" class="wp-image-48787" style="width: 55px;" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-6.png?resize=55%2C44&#038;ssl=1" alt=""> / Library settings / More library settings / Advanced settings / Reindex Document Library.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1023" height="586" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-9.png?resize=1023%2C586&#038;ssl=1" alt="" class="wp-image-48793" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-9.png?w=1023&amp;ssl=1 1023w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-9.png?resize=300%2C172&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-9.png?resize=768%2C440&amp;ssl=1 768w" sizes="auto, (max-width: 1023px) 100vw, 1023px" /></figure>



<p class="wp-block-paragraph">Next, on a site. This can be found at <img data-recalc-dims="1" loading="lazy" decoding="async" width="55" height="44" class="wp-image-48787" style="width: 55px;" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-6.png?resize=55%2C44&#038;ssl=1" alt=""> / Site information / View all site settings / Search and offline availability / Reindex site.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="578" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-8.png?resize=1024%2C578&#038;ssl=1" alt="" class="wp-image-48791" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-8.png?resize=1024%2C578&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-8.png?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-8.png?resize=768%2C434&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-8.png?w=1045&amp;ssl=1 1045w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">If you decide to use these options, be sure to indicate the best reason why. I&#8217;m giving Microsoft the benefit of the doubt here and hoping they will improve the reindexing process using the data we provide them.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2024/06/17/reindexing-sharepoint-content-manually-and-an-indication-of-improvements-on-the-horizon/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">48784</post-id>	</item>
		<item>
		<title>Enabling Global Navigation in the SharePoint Home Site</title>
		<link>https://sympmarc.com/2024/06/05/enabling-global-navigation-in-the-sharepoint-home-site/</link>
					<comments>https://sympmarc.com/2024/06/05/enabling-global-navigation-in-the-sharepoint-home-site/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Wed, 05 Jun 2024 15:54:44 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[Viva Connections]]></category>
		<category><![CDATA[global navigation]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=48712</guid>

					<description><![CDATA[Over the last few months - since around January - I've needed to enable Global Navigation in a SharePoint Home Site as part of three new Intranet launches. In each case, it took a VERY long time to take effect and/or didn't happen until I worked with Microsoft to come up with an unexpected fix.]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Over the last few months &#8211; since around January &#8211; I&#8217;ve needed to enable Global Navigation in a SharePoint Home Site as part of three new Intranet launches. In each case, it took a VERY long time to take effect and/or didn&#8217;t happen until I worked with Microsoft to come up with an unexpected fix.</p>



<p class="wp-block-paragraph">The main benefit of enabling Global Navigation is it gives us consistent navigation in the SharePoint app bar, as shown in this Microsoft Learn article: <a href="https://learn.microsoft.com/en-us/viva/connections/sharepoint-app-bar">Set up global navigation in the SharePoint app bar | Microsoft Learn</a>. The Global Navigation you choose is then available in the app bar <em>from anywhere in SharePoint</em>.</p>



<p class="wp-block-paragraph">Additionally, once you have Global Navigation enabled &#8211; and available &#8211; you can turn on Viva Connections in Teams to give direct access to your Internet there. It&#8217;s pretty slick, even if you don&#8217;t care about any of the additional capabilities of Viva Connections (and I haven&#8217;t ever had a client who wanted more than access to the Intranet).</p>



<p class="wp-block-paragraph">To enable Global Navigation, we must have a site set as a Home Site. Without additional licensing and complexity (which I&#8217;m going to skip here), you can only have one Home Site. Once you&#8217;ve enabled the Home Site, the Global Navigation settings can be accessed via its settings menu:<br /></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="311" height="441" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-1.png?resize=311%2C441&#038;ssl=1" alt="" class="wp-image-48721" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-1.png?w=311&amp;ssl=1 311w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-1.png?resize=212%2C300&amp;ssl=1 212w" sizes="auto, (max-width: 311px) 100vw, 311px" /></figure>
</div>


<p class="wp-block-paragraph">As you can see in the highlighted text from the Global Navigation UI, this change should take effect in just a few minutes.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="306" height="188" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image.png?resize=306%2C188&#038;ssl=1" alt="" class="wp-image-48713" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image.png?w=306&amp;ssl=1 306w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image.png?resize=300%2C184&amp;ssl=1 300w" sizes="auto, (max-width: 306px) 100vw, 306px" /></figure>
</div>


<p class="wp-block-paragraph">In my three tenants, this isn&#8217;t what happened. For each tenant where I made this change, the Global Navigation didn&#8217;t appear in an hour, a day, a week, even over a month. Certainly not a few minutes!</p>



<p class="wp-block-paragraph">I filed a support ticket in the first instance, and after a few weeks of back and forth with the Microsoft support folks, wasn&#8217;t having any luck. What fixed it in that case was essentially just jiggling the handle. I turned things off and back on, I re-uploaded the icon, etc. Finally, after some combination of those actions, the Global Navigation showed up &#8211; almost immediately after whatever my last action was.</p>



<p class="wp-block-paragraph">So, I won that one, but I didn&#8217;t really know why.</p>



<p class="wp-block-paragraph">With the next two, I tried all those jiggling activities, but wasn&#8217;t getting any joy. After over a month, I wasn&#8217;t sure I was ever going to get this working. During this time, I was occasionally in touch with a few Microsoft people through the MVP channels which I can access. They had me check a few things, but none of them seemed like they should be related.</p>



<p class="wp-block-paragraph">Finally, we hit upon a solution. It wasn&#8217;t the way things are supposed to work, and in fact, it directly contradicted the documentation. In the support article <a href="https://support.microsoft.com/en-us/office/choose-settings-for-the-viva-connections-app-61bc93fe-5d58-4b4c-a0b1-abdd484ccf46">Choose settings for the Viva Connections app &#8211; Microsoft Support</a>, it explicitly says: &#8220;Confirm your organization has a home site and has enabled global navigation&nbsp;before customizing Viva Connections app settings for end-users in Microsoft Teams.&#8221;</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="386" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-2.png?resize=1024%2C386&#038;ssl=1" alt="" class="wp-image-48722" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-2.png?resize=1024%2C386&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-2.png?resize=300%2C113&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-2.png?resize=768%2C290&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-2.png?w=1180&amp;ssl=1 1180w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">However, my contact suggested checking the status of the Viva Connection experience. Here&#8217;s what I saw.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="280" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-3.png?resize=1024%2C280&#038;ssl=1" alt="" class="wp-image-48723" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-3.png?resize=1024%2C280&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-3.png?resize=300%2C82&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-3.png?resize=768%2C210&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/06/image-3.png?w=1523&amp;ssl=1 1523w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">As I would have expected, it was in a Draft state &#8211; I hadn&#8217;t enabled it. Remember that we have to enable Global Navigation <strong><em>first</em></strong>, per the documentation both above and elsewhere. They suggested enabling the Viva Connection experience, anyway. This setting can be found in the Admin Center: <a href="https://admin.microsoft.com/Adminportal/Home#/viva/connections/experiences">https://admin.microsoft.com/Adminportal/Home#/viva/connections/experiences</a> So, I enabled the Viva Connection experience. And waited. After 15 minutes of refreshing the Home Site&#8217;s home page, I didn&#8217;t see anything. I figured, what the heck, I&#8217;d turn off the Global Navigation and turn it back on &#8211; jiggling the handle again.</p>



<p class="wp-block-paragraph"><strong>Success!</strong> The Global Navigation showed up almost instantly after turning it on again. This worked in both tenants, too!</p>



<p class="wp-block-paragraph">No, this isn&#8217;t how it is supposed to work, but it does seem to fix the problem &#8211; at least it did in two tenants for me. I&#8217;m writing this post in case it&#8217;s also happening to you.</p>



<p class="wp-block-paragraph">To summarize, the winning combination of steps was:</p>



<ul class="wp-block-list">
<li>Enable the Viva Connection experience here: <a href="https://admin.microsoft.com/Adminportal/Home#/viva/connections/experiences" target="_blank" rel="noreferrer noopener">Microsoft 365 admin center</a> <a href="https://admin.microsoft.com/Adminportal/Home#/viva/connections/experiences" target="_blank" rel="noreferrer noopener">https://admin.microsoft.com/Adminportal/Home#/viva/connections/experiences</a></li>



<li>Turn the Global Navigation setting in the Home Site OFF and save</li>



<li>Turn the Global Navigation setting in the Home Site ON and save</li>
</ul>



<p class="wp-block-paragraph">The Global Navigation then appeared in the SharePoint app bar almost immediately.</p>



<p class="wp-block-paragraph">Luckily, I have some very patient clients. Thanks to them for that.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2024/06/05/enabling-global-navigation-in-the-sharepoint-home-site/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">48712</post-id>	</item>
		<item>
		<title>When should organizational content be private?</title>
		<link>https://sympmarc.com/2024/04/29/when-should-organizational-content-be-private/</link>
					<comments>https://sympmarc.com/2024/04/29/when-should-organizational-content-be-private/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 29 Apr 2024 16:18:34 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Content Types]]></category>
		<category><![CDATA[Content Management]]></category>
		<category><![CDATA[culture]]></category>
		<category><![CDATA[lifecycle]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=48534</guid>

					<description><![CDATA[One thing you learn very early on in consulting (if you don&#8217;t &#8211; uh-oh!) is that organizational cultures vary drastically. There are many different dimensions to this. Some organizations are very open and honest &#8211; perhaps to a fault &#8211; and others tend to keep most things hidden from other groups or people. Regardless of...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">One thing you learn very early on in consulting (if you don&#8217;t &#8211; uh-oh!) is that organizational cultures vary drastically. There are many different dimensions to this. Some organizations are very open and honest &#8211; perhaps to a fault &#8211; and others tend to keep most things hidden from other groups or people. Regardless of the culture, though, content lifecycles matter a lot.</p>



<p class="wp-block-paragraph">I was asked recently by someone in a more open organization why some content should be kept private versus be published on an Intranet. Here are some reasons I tend to use to illustrate what some content should be &#8220;private&#8221; &#8211; and there are varying degrees of privacy, of course.</p>



<ol class="wp-block-list">
<li><strong>Content which is in progress</strong> &#8211; When you are working on something, it usually just doesn&#8217;t make sense for everyone to see it. Sometimes we start working in OneDrive, but usually in a team setting &#8211; a site or a Team where our colleagues can work with us. Once the content is &#8220;done&#8221; (which can mean different things for different Content Types), we publish to a more public place.</li>



<li><strong>Content which should have limited viewership</strong> &#8211; One easy example would be a salary spreadsheet. We should store content in a container which has the right permissions, allowing only the right people to see it. Keep in mind that search can surface content, even if we don&#8217;t have specific navigation links to it.</li>



<li><strong>Content which simply isn&#8217;t relevant to everyone or is outdated</strong> &#8211; People often say that search sucks, and a big reason for that is it returns too many results, sometimes results which contradict each other. An example would be a process document which has been updated multiple times, each with a different filename. Only the most current version should be public, though you may well want to keep the historical versions for your team.</li>
</ol>



<p class="wp-block-paragraph">A big part of how I think about this is from the perspective of the content lifecycle. There&#8217;s a visual I created for the <a href="https://learn.microsoft.com/en-us/microsoft-365/community/microsoft365-maturity-model--intro" data-type="link" data-id="https://learn.microsoft.com/en-us/microsoft-365/community/microsoft365-maturity-model--intro" target="_blank" rel="noreferrer noopener">Maturity Model for Microsoft 365</a> in the <a href="https://learn.microsoft.com/en-us/microsoft-365/community/microsoft365-maturity-model--management-of-content" data-type="link" data-id="https://learn.microsoft.com/en-us/microsoft-365/community/microsoft365-maturity-model--management-of-content" target="_blank" rel="noreferrer noopener">Management of Content Competency</a> which also helps think this through:</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="576" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/04/image.png?resize=1024%2C576&#038;ssl=1" alt="" class="wp-image-48536" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/04/image.png?resize=1024%2C576&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/04/image.png?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/04/image.png?resize=768%2C432&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/04/image.png?w=1306&amp;ssl=1 1306w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Create </strong>&#8211; Content creation is sometimes a sort of dirty business. We may throw a bunch of ideas against the wall to see what sticks. I sometimes call this the &#8220;sausage factory&#8221;. It&#8217;s not a place that many people should ever see.</p>



<p class="wp-block-paragraph"><strong>Iterate</strong> &#8211; There&#8217;s naturally some iteration in the content creation process. We may take a very different tack in the beginning but based on interactions with our close colleagues or research, we may revise a particular piece of content multiple times.</p>



<p class="wp-block-paragraph"><strong>Review</strong> &#8211; Depending on the type of content, it may need some sort of review. That review process can be anything from saying &#8220;Yup, it&#8217;s time&#8221; to needing every group in the organization to comment, share with their employees for comment, and sign off.</p>



<p class="wp-block-paragraph"><strong>Publish</strong> &#8211; Only once the content is truly ready is it time to publish it &#8211; whether to a slightly larger group or to the entire organization. Publishing can take multiple forms, but when it comes to the Intranet, it&#8217;s generally to copy the content into that public place.</p>



<p class="wp-block-paragraph"><strong>Consume</strong> &#8211; While the content is still valid and useful, people should be able to consume it easily and readily. This means we need to give them simple ways to get to it when they need it. That means things like good navigation, good search configuration, and more. Which mechanisms are most important will vary with the type of content.</p>



<p class="wp-block-paragraph"><strong>Feedback </strong>&#8211; While the content is available to others, ideally, we have a good way for people to give us feedback. Sometimes the feedback is in the form of questions, or sometimes it&#8217;s suggestions to make the content more clear or useful. We should be open to that feedback and try to react to it somehow during the content&#8217;s useful lifespan.</p>



<p class="wp-block-paragraph">Note that we use this image to describe Level 400 behavior on the <a href="https://learn.microsoft.com/en-us/microsoft-365/community/microsoft365-maturity-model--management-of-content" data-type="link" data-id="https://learn.microsoft.com/en-us/microsoft-365/community/microsoft365-maturity-model--management-of-content" target="_blank" rel="noreferrer noopener">Management of Content Competency</a>. That&#8217;s a pretty mature approach, and you may not get there with every type of content. One would hope you&#8217;d aspire to this level of sophistication with content that is highly important to your organization, especially if it is used widely. Also, look at the way the arrows flow: a powerful content lifecycle includes regular revision, not just because a timer has run out (we may review certain types of documents once a year, for example), but also based on feedback during that time period.</p>



<p class="wp-block-paragraph">In summary, deciding which content should be publicly available vs. only available to a smaller group will depend on the organizational culture, the type of content, and where that content is in its lifecycle.</p>



<p class="wp-block-paragraph">How do you make these decisions in your organization?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2024/04/29/when-should-organizational-content-be-private/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">48534</post-id>	</item>
		<item>
		<title>New Microsoft Lists Forms Experience</title>
		<link>https://sympmarc.com/2024/03/20/new-microsoft-lists-forms-experience/</link>
					<comments>https://sympmarc.com/2024/03/20/new-microsoft-lists-forms-experience/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Wed, 20 Mar 2024 20:24:33 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Forms]]></category>
		<category><![CDATA[Microsoft Lists]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=48330</guid>

					<description><![CDATA[I think this is going to really boost how fast we can build data collection for lists with no dev at all: Collect information like a pro New Microsoft Lists forms experience in Microsoft 365 Until this rolls out, we have had several approaches we could use (and there may be others): Each of these...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">I think this is going to really boost how fast we can build data collection for lists with no dev at all: <a href="https://techcommunity.microsoft.com/t5/microsoft-sharepoint-blog/collect-information-like-a-pro-new-microsoft-lists-forms/ba-p/4086659" rel="noreferrer noopener" target="_blank">Collect information like a pro New Microsoft Lists forms experience in Microsoft 365</a></p>



<p class="wp-block-paragraph">Until this rolls out, we have had several approaches we could use (and there may be others):</p>



<ol class="wp-block-list">
<li>Out of the box list forms</li>



<li>Enhanced list forms with JSON formatting</li>



<li>Microsoft Forms with Power Automate</li>



<li>Power Apps</li>



<li>Custom solutions with SharePoint Framework (SPFx) [or other tools]</li>
</ol>



<p class="wp-block-paragraph">Each of these approaches is still very useful and may be valid for the scenarios you run into.</p>



<p class="wp-block-paragraph">The new List Forms approach adds to our toolkit and probably sits between 1 and # 2 above, at least in complexity to implement. It also has multiple benefits:</p>



<ul class="wp-block-list">
<li>We can share a link to the form which allows people to enter information, with no visibility into the underlying list where that information is stored.</li>



<li>The form looks nicer and cleaner than the out of the box list forms, and it can have a title and summary text at the top, much like a Microsoft Forms form.</li>



<li>We see solutions built with out of the box list forms all the time where everyone can see all the list items. By being able to share a link to only the form, we can isolate data collection from data management.</li>



<li>The entered information goes directly into the list, and we have all the tools we can always use with lists to move the list item through a business process (Rules, Power Automate, specialize views, etc.)</li>
</ul>



<p class="wp-block-paragraph">Watch for this new capability to roll out in your tenant. It&#8217;s <a href="https://www.microsoft.com/en-us/microsoft-365/roadmap?filters=&amp;searchterms=124865">Microsoft 365 Roadmap #124865</a>.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="999" height="538" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/03/image.png?resize=999%2C538&#038;ssl=1" alt="" class="wp-image-48335" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/03/image.png?w=999&amp;ssl=1 999w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/03/image.png?resize=300%2C162&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/03/image.png?resize=768%2C414&amp;ssl=1 768w" sizes="auto, (max-width: 999px) 100vw, 999px" /></figure>



<h2 class="wp-block-heading">Resources</h2>



<ul class="wp-block-list">
<li><a href="https://techcommunity.microsoft.com/t5/microsoft-sharepoint-blog/collect-information-like-a-pro-new-microsoft-lists-forms/ba-p/4086659" target="_blank" rel="noreferrer noopener">Collect information like a pro New Microsoft Lists forms experience in Microsoft 365</a></li>



<li><a href="https://learn.microsoft.com/en-us/sharepoint/dev/declarative-customization/list-form-configuration">Configure the list form | Microsoft Learn</a></li>



<li><a href="https://support.microsoft.com/en-us/office/create-an-automated-workflow-for-microsoft-forms-dee28c00-503a-48b3-89df-91a5084e6e43">Create an automated workflow for Microsoft Forms &#8211; Microsoft Support</a></li>



<li><a href="https://learn.microsoft.com/en-us/sharepoint/dev/spfx/sharepoint-framework-overview">Overview of the SharePoint Framework (SPFx) | Microsoft Learn</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2024/03/20/new-microsoft-lists-forms-experience/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">48330</post-id>	</item>
		<item>
		<title>Microsoft and Knowledge Management</title>
		<link>https://sympmarc.com/2024/02/29/microsoft-and-knowledge-management/</link>
					<comments>https://sympmarc.com/2024/02/29/microsoft-and-knowledge-management/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 29 Feb 2024 16:10:08 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Knowledge Management]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[Microsoft 365]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[artificial intelligence]]></category>
		<category><![CDATA[Copilot]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=48152</guid>

					<description><![CDATA[Knowledge management (KM) is hard. This has been proven to me many times over the last 30 or so years I've been paying attention to the concepts. With the announcement of the abrupt retirement of Viva Topics as of February 22, 2025, I've been thinking about the history of KM solutions from Microsoft and where they have all gone.]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Knowledge management (KM) is hard. This has been proven to me many times over the last 30 or so years I&#8217;ve been paying attention to the concepts. With the announcement of the abrupt <a href="https://learn.microsoft.com/en-us/microsoft-365/topics/changes-coming-to-topics?view=o365-worldwide&amp;WT.mc_id=M365-MVP-9501" data-type="link" data-id="https://learn.microsoft.com/en-us/microsoft-365/topics/changes-coming-to-topics?view=o365-worldwide&amp;WT.mc_id=M365-MVP-9501" target="_blank" rel="noreferrer noopener">retirement</a> of Viva Topics as of February 22, 2025, I&#8217;ve been thinking about the history of KM solutions from Microsoft and where they have all gone.</p>



<p class="wp-block-paragraph">But first, a few tangents&#8230;</p>


<div class="wp-block-image">
<figure class="alignright size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="700" height="420" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/02/image.png?resize=700%2C420&#038;ssl=1" alt="" class="wp-image-48154" style="width:233px;height:auto" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/02/image.png?w=700&amp;ssl=1 700w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/02/image.png?resize=300%2C180&amp;ssl=1 300w" sizes="auto, (max-width: 700px) 100vw, 700px" /></figure>
</div>


<p class="wp-block-paragraph">In 1996, I took a job as a consultant at a company called Renaissance Solutions. It was started by <a href="https://www.linkedin.com/in/harry-m-lasker-79094214/" data-type="link" data-id="https://www.linkedin.com/in/harry-m-lasker-79094214/" target="_blank" rel="noreferrer noopener">Harry Lasker</a>, <a href="https://en.wikipedia.org/wiki/David_P._Norton" target="_blank" rel="noreferrer noopener">David Norton</a>, and <a href="https://www.linkedin.com/in/david-lubin-baa37561/" data-type="link" data-id="https://www.linkedin.com/in/david-lubin-baa37561/">David Lubin</a> to marry the concepts of the <a href="https://www.investopedia.com/terms/b/balancedscorecard.asp" target="_blank" rel="noreferrer noopener">Balanced Scorecard</a> (BSC), knowledge management, and technical solutions. That sounds simple today, but back then it wasn&#8217;t, at least from a technical perspective. We analyzed the work our clients did to understand how to improve performance by measuring the right things (BSC), leveraging the knowledge within the organization (KM), improving processes (a form of business process reengineering &#8211; not the destructive kind), all supported with technical solutions. I only mention this wonderful experience to show that KM has been in my blood for a long time, and I&#8217;ve got at least a little cred with it. I like to think there&#8217;s a healthy dollop of KM thinking in all the solutions I build to this day.</p>



<p class="wp-block-paragraph">Why is KM hard? Well, it requires a concerted commitment by an organization to do a lot of up-front work which may not pay dividends for a decent amount of time; the return on investment (ROI) is hard to prove for a while. Figuring out what knowledge the organization has, what parts of that knowledge are high-quality, which parts contribute to the overall organizational strategy, and how to quantify that knowledge and distribute it to the appropriate people at the right time takes a lot of effort. That effort means people need to be in positions to execute (in-house or outside consultants, but in the long run, in-house is a far better approach) for a long enough period of time with enough executive commitment to lay the foundations &#8211; before that ROI starts to roll in. </p>



<p class="wp-block-paragraph">Organizational culture figures into all this, too, of course, and changing a culture is in my mind like turning the proverbial battleship: it takes miles of effort before it happens. To me, an organization&#8217;s culture is simply the sum of its people. No fancy initiatives change that culture quickly if the people have mindsets that don&#8217;t match the desired culture. On top of that, incentives which support all of the KM activity also tend to lag the KM efforts by a year or more, as the Human Resources function figures out how to integrate it into performance metrics and reviews.</p>



<p class="wp-block-paragraph">Now, back to Microsoft, which has repeatedly tried to offer knowledge management capabilities in the SharePoint and Microsoft 365 platforms. If you&#8217;ve been watching as long as I have, you&#8217;ll probably see that I&#8217;m not hitting all of them here, but these are the most important attempts that I recall over the years.</p>



<p class="wp-block-paragraph">In SharePoint 2003, we had the concept of Areas, which allowed us to focus work around the area/topic to which it related. It didn&#8217;t work all that well, but it didn&#8217;t matter that much as it totally disappeared in SharePoint 2007. It may have been promising, but it didn&#8217;t last long enough to prove out.</p>



<p class="wp-block-paragraph">At Microsoft Ignite in 2015, Microsoft announced something called InfoPedia. It never saw the light of day, and the best description I can find of the hopes for it are in this article from my friend Benjamin Niaulin (<a href="https://twitter.com/bniaulin" data-type="link" data-id="https://twitter.com/bniaulin" target="_blank" rel="noreferrer noopener">@bniaulin</a>) at ShareGate: <a href="https://sharegate.com/blog/ignite-knowledge-management-portal-explained">Office 365 Redefines Knowledge Management</a>. The idea behind this mystical portal was to provide a prepackaged approach to provide knowledge to the organization. It sounded fantastic! But other than some fairly interesting demos, it never happened.</p>



<p class="wp-block-paragraph">The most recent &#8211; and in my mind, the most powerful &#8211; KM solution from Microsoft was <a href="https://techcommunity.microsoft.com/t5/viva-topics-blog/introducing-microsoft-viva-topics/ba-p/2107007" target="_blank" rel="noreferrer noopener">Viva Topics</a>. Yes, &#8220;was&#8221;, because they have announced its <a href="https://learn.microsoft.com/en-us/microsoft-365/topics/changes-coming-to-topics?view=o365-worldwide&amp;WT.mc_id=M365-MVP-9501" data-type="link" data-id="https://learn.microsoft.com/en-us/microsoft-365/topics/changes-coming-to-topics?view=o365-worldwide&amp;WT.mc_id=M365-MVP-9501" target="_blank" rel="noreferrer noopener">retirement</a>, with no replacements planned. Viva Topics provides a way to manage knowledge objects (topics) by attaching definitions, people, and canonical content to them. That&#8217;s important, but the coolest part about it is wherever those topics are found in SharePoint pages or Teams conversations, the topic is presented as a link to that topic card. With that one link, we can provide some of the mythical KM holy grails, like Find the Expert, a notion of Communities of Practice and/or Communities of Interest, canonical artifacts and more. My guess is the uptake for Viva Topics was never high enough to provide a reliable revenue stream to Microsoft to support it. Organizations that wanted to use it had to pony up for the licensing fees as well as the KM efforts to make it actually work.</p>



<p class="wp-block-paragraph">Microsoft has now decided to focus almost all of its efforts on <a href="https://copilot.microsoft.com/" data-type="link" data-id="https://copilot.microsoft.com/" target="_blank" rel="noreferrer noopener">Copilot</a>, which is ostensibly the reason why Viva Topics is being retired. This thread Susan Hanley (<a href="https://twitter.com/susanhanley" data-type="link" data-id="https://twitter.com/susanhanley" target="_blank" rel="noreferrer noopener">@susanhanley</a>) on Twitter encapsulates concerns that some of us have about this.</p>



<figure class="wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">Super sad to say goodbye to Viva Topics. The vision was great for Knowledge Management &#8211; but times have changed. Learn more: <a href="https://t.co/UNsd1f16dF">https://t.co/UNsd1f16dF</a></p>&mdash; Susan Hanley (@susanhanley) <a href="https://twitter.com/susanhanley/status/1760740624901525900?ref_src=twsrc%5Etfw">February 22, 2024</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p class="wp-block-paragraph">Copilot &#8211; in whichever form (Microsoft has introduced some 150+ Copilots so far &#8211; very overwhelming!) responds to queries using Large Language Models (LLMs). I&#8217;m not going to go into the technology behind any of this; there&#8217;s plenty out there if you choose to dig deeper. One of the important benefits is that &#8211; by paying a per user fee &#8211; you can connect Copilots to your organization content repositories.</p>



<p class="wp-block-paragraph">From a knowledge management perspective, I see several very important issues with a total reliance on Copilots:</p>



<ul class="wp-block-list">
<li><strong>Content Curation</strong> &#8211; For KM to be truly effective, there&#8217;s a curation workload to it. Only Subject Matter Exprts (SMEs) can make the nuanced evaluations about where a particular knowledge object has no value, some value, or high value. Viva Topics gave us that curation engine, as clunky as it is to work with.</li>



<li><strong>Content Management</strong> &#8211; When you turn Copilots on your content repositories, it is going to pick up everything it can find with relevance, much like a search index does. Yes, the semantic index is a bit different, but the core idea is very similar.) If you have old or outdated or incorrect content, Copilot will find it and incorporate it in its responses. Thus, effective content management becomes even more important that it has been. Many organizations are more in the content collection business than the content management business, so this challenge is now even more critical in the era of Copilot. Unless the organizations which sign up for Copilot do some serious housecleaning first (or at least in parallel), they will be getting some very unreliable results.</li>



<li><strong>Search skills</strong> aka &#8220;<a href="https://www.ibm.com/topics/prompt-engineering" target="_blank" rel="noreferrer noopener">prompt engineering</a>&#8221; &#8211; We&#8217;ve had truly amazing search, both in SharePoint and Microsoft 365 as well as the Web in general &#8211; for decades now. How many times have you heard &#8220;search sucks&#8221;? Search itself doesn&#8217;t suck, but <em>search skills</em> are greatly lacking in the general population, IMO,. If one can&#8217;t come up with a good search query to find something, how can one come up with a good Copilot prompt, which has to be even more detailed and precise? Sure, we can train people on prompt engineering, but did we ever train them on search skills? Rarely.</li>



<li><strong>Result Quality</strong> &#8211; If you&#8217;ve used any of the current &#8220;AI&#8221; tools &#8211; Copilot included &#8211; you know that they quite often &#8211; if not a majority of the time &#8211; return questionable results. They may not be wrong, but just as with search results, they may not be &#8220;right&#8221;. If we need to validate every result we get (remember &#8211; no curation and probably iffy content management, too), then we have to be SMEs ourselves to evaluate the results. If I ask Copilot to describe the iron smelting process, I&#8217;ll get a result, but is it right? I have no idea, because I&#8217;m not an iron smelter.</li>
</ul>



<p class="wp-block-paragraph">So, is everything dire? Am I simply a naysayer? No, not at all. I have no doubt that the AI tech we have today &#8211; as amazingly impressive as it is &#8211; is in its infancy. It will continue to improve, and at some point, we will be able to trust all its responses to be the absolutely best responses. At least more often than not.</p>



<p class="wp-block-paragraph">It&#8217;s going to be a very wild ride &#8211; one that many of us won&#8217;t see to fruition. Let&#8217;s all just be realistic about where we are. Microsoft has tried to give us KM solutions many times in the past, unfortunately, none with the longevity it would have taken to truly succeed. Copilot is simply the next in the series. Let&#8217;s see where it takes us.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="500" height="281" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/02/50136-2001_A_Space_Odyssey-HAL_9000.jpg?resize=500%2C281&#038;ssl=1" alt="" class="wp-image-48174" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/02/50136-2001_A_Space_Odyssey-HAL_9000.jpg?w=500&amp;ssl=1 500w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2024/02/50136-2001_A_Space_Odyssey-HAL_9000.jpg?resize=300%2C169&amp;ssl=1 300w" sizes="auto, (max-width: 500px) 100vw, 500px" /></figure>
</div>


<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Any sufficiently advanced technology is indistinguishable from magic.</p>
<cite>Arthur C. Clarke</cite></blockquote>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2024/02/29/microsoft-and-knowledge-management/feed/</wfw:commentRss>
			<slash:comments>7</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">48152</post-id>	</item>
		<item>
		<title>SharePoint Site Swap Fails &#8211; But a Fallback Position</title>
		<link>https://sympmarc.com/2024/01/26/sharepoint-site-swap-fails-but-a-fallback-position/</link>
					<comments>https://sympmarc.com/2024/01/26/sharepoint-site-swap-fails-but-a-fallback-position/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Fri, 26 Jan 2024 17:35:59 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Home Site]]></category>
		<category><![CDATA[site swap]]></category>
		<category><![CDATA[Invoke-PnPSiteSwap]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[intranet]]></category>
		<category><![CDATA[Invoke-SPOSiteSwap]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=47768</guid>

					<description><![CDATA[When we build a new Home Site in a client tenant, usually for a new Intranet, we generally build that new site off in a corner, so it&#8217;s not exposed or in the way while we build it. This process can take a few weeks, months or even longer, and while we&#8217;re working on things,...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">When we build a new Home Site in a client tenant, usually for a new Intranet, we generally build that new site off in a corner, so it&#8217;s not exposed or in the way while we build it. This process can take a few weeks, months or even longer, and while we&#8217;re working on things, we want to leave the existing sites rerunning as they are. Once the new site &#8211; which I generally put at <code>/sites/NewIntranet</code> &#8211; is finished, we can do a Site Swap to move it into the root site at launch.</p>



<p class="wp-block-paragraph">In this case, we were trying to do a site swap using the Replace Site UI in the SharePoint Admin Center. We had the new Communication site we wanted to swap into the root all set. I&#8217;ve done this process many times with no issues. </p>



<p class="wp-block-paragraph">When I entered the URL for the site we wanted to swap into the root, I got the message saying &#8220;<img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Site is ready&#8221;.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="572" height="358" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-1.png?resize=572%2C358&#038;ssl=1" alt="" class="wp-image-47770" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-1.png?w=572&amp;ssl=1 572w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-1.png?resize=300%2C188&amp;ssl=1 300w" sizes="auto, (max-width: 572px) 100vw, 572px" /></figure>



<p class="wp-block-paragraph">After clicking the Save button, the process started and soon thereafter, I got the message &#8220;Root site couldn&#8217;t be replaced&#8221;.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="548" height="418" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-2.png?resize=548%2C418&#038;ssl=1" alt="" class="wp-image-47771" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-2.png?w=548&amp;ssl=1 548w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-2.png?resize=300%2C229&amp;ssl=1 300w" sizes="auto, (max-width: 548px) 100vw, 548px" /></figure>



<p class="wp-block-paragraph">I also tried the swap with the PowerShell cmdlets <code>Invoke-PnPSiteSwap</code> and <code>Invoke-SPOSiteSwap</code>. In both cases, I got a message like this:</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="254" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-4.png?resize=1024%2C254&#038;ssl=1" alt="" class="wp-image-47775" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-4.png?resize=1024%2C254&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-4.png?resize=300%2C74&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-4.png?resize=768%2C191&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-4.png?resize=1536%2C381&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-4.png?resize=2048%2C508&amp;ssl=1 2048w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/12/image-4.png?w=2580&amp;ssl=1 2580w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">That is&#8230;</p>



<pre class="wp-block-code"><code class="">Invoke-SPOSiteSwap : The new site name is too long using URL https://tenantname.sharepoint.com/sites/ArchiveOldSite. The path for all files and folders in the site cannot exceed 400 characters At line:1 char:5 + Invoke-SPOSiteSwap ` + ~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : NotSpecified: (:) [Invoke-SPOSiteSwap], ServerException + FullyQualifiedErrorId : Microsoft.SharePoint.Client.ServerException,Microsoft.Online.SharePoint.PowerShell.SwapSite</code></pre>



<p class="wp-block-paragraph">With a bunch of Binglage, I saw that many people had run into this problem, and it may have had nothing to do with URL lengths. That said, we did have some pretty deep folder structures.</p>



<h2 class="wp-block-heading">Fallback Position</h2>



<p class="wp-block-paragraph">We didn&#8217;t want to abort at the 11th hour if we could help it. As I thought about it, I realized I could go to a fallback position that isn&#8217;t horrible and it wouldn&#8217;t prevent me from doing the site swap afterward, once we worked out the issue.</p>



<p class="wp-block-paragraph">Here&#8217;s what we did:</p>



<ul class="wp-block-list">
<li>Set the <code>/sites/NewIntranet</code> site as the Home Site</li>



<li>This gave us the Global Navigation capability, so we could set up the App Bar to show the Intranet navigation nodes in place of the SharePoint Home Page.</li>



<li>Edited the home page in the current root site (an old Team Site, of course) to display launch info and a button that took us to the New Intranet home page.</li>



<li>We shared the link to the New Intranet with the organization, so they can go directly to the <code>/sites/NewIntranet</code> site.</li>



<li>I also put in a ticket with Microsoft because &#8211; well &#8211; that&#8217;s something you&#8217;re supposed to do.</li>
</ul>



<p class="wp-block-paragraph">While we waited for Microsoft Support to get back to us, we were in a decent position. The new Intranet was &#8220;launched&#8221; and could be used. We can do the site swap later, and everything will just redirect and the behavior will be the same. Presto!&nbsp;</p>



<h2 class="wp-block-heading">Solving the Problem</h2>



<p class="wp-block-paragraph">But what&#8217;s the actual problem, and how can we / could we have solved it? After about 3 weeks of back and forth with support, they ended up telling me that we had files with paths that were too long. Um, ok. I could pretty much tell that based on the error message I got, but I was hoping Microsoft would have a smart recommendation about mitigating the actual problem. Unfortunately, not.</p>



<p class="wp-block-paragraph">Remember that I started by using the nice UI provided to make the swap, and the error I got was the incredibly unhelpful &#8220;Root site couldn&#8217;t be replaced&#8221;. There was no information there for me to work with. Only after I ran the PowerShell approach to swap the site that I got some clues.</p>



<p class="wp-block-paragraph">Should I have known there would be an issue? Maybe, sure. That&#8217;s partially on me. But what about organizations that don&#8217;t have someone who can quickly pivot to PowerShell or have been working with SharePoint for decades?</p>



<p class="wp-block-paragraph">The <strong>Manage home site page</strong> in the SharePoint Admin Center should give much better information when a Site Swap fails. There is zero information about what to do to resolve the failure in that UI or in the <a href="https://learn.microsoft.com/en-us/sharepoint/modern-root-site">Modernize your root site &#8211; SharePoint in Microsoft 365 | Microsoft Learn</a> article. It would be ideal if there were:</p>



<ul class="wp-block-list">
<li>A “test” option in the UI that tells us whether the Site Swap will work. When we click the Save button &#8211; it&#8217;s for real. There&#8217;s no way to know if there will be a problem until we&#8217;re ready to do the swap for real.</li>



<li>Information about common issues in the above article, along with ways to mitigate the issues. Now that I&#8217;ve run into this issue and seen by searching that lots of other have run into it as well, it should be spelled out very clearly, along with how to get around it.</li>
</ul>



<p class="wp-block-paragraph">Thus, this post &#8211; for those of you who might run into this issue at the 11th hour like I did. The fallback position can get you launched, but then what?</p>



<p class="wp-block-paragraph">One of the things the Microsoft support folks gave me was a script to find files with long paths. I didn&#8217;t get much explanation, and the script was set to look for files with URLs greater than 218 characters. I have no idea what the significance of that number is, but it reported on probably half the files in the root site.</p>



<p class="wp-block-paragraph">Here&#8217;s the script as I received it from support. You&#8217;d change the parameters at the top and run it. It gives you a CSV file listing all the files with long URLs, based on the <code>$MaxUrlLength</code>. That value you should choose there will depend on where you plan to move the site. For example, if you want to swap it into <code>https://mytenant.sharepoint.com/sites/A</code> (which is the shortest possible URL in <code>mytenant</code>), you could set $MaxUrlLength to 362:</p>



<ul class="wp-block-list">
<li>The maximum URL length is 400</li>



<li>The length of <code>https://mytenant.sharepoint.com/sites/A</code> is 38</li>



<li>Thus, you could move files with URL lengths of 400 &#8211; 38 = 362 URL lengths into that site.</li>
</ul>



<p class="wp-block-paragraph">Unfortunately, the length of your organization&#8217;s name &#8211; in my example, that&#8217;s <code>mytenant</code> &#8211; matters. If you have a longer organization name, you have a bigger problem.</p>



<p class="wp-block-paragraph">The script outputs a CSV file with a list of the files with long URLs and details about each, as defined in <code>$global:LongURLInventory</code>. Using that list, you can perform the mitigation you need. In my case, we&#8217;ve got something like 12,000 files with long URLs. I&#8217;ll be writing a script that uses ShareGate to copy the files into <code>https://mytenant.sharepoint.com/sites/A</code> and then delete them from their original locations. At that point, we&#8217;ll be able to do the site swap without any issues. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f91e-1f3fb.png" alt="🤞🏻" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell line-numbers">#Parameters
$SiteURL = "https://crescent.SharePoint.com/sites/Marketing"
$MaxUrlLength = 218
$CSVPath = "C:\Temp\LongURLInventory.csv"
$global:LongURLInventory = @()
$Pagesize = 2000

#Function to scan and collect long files
Function Get-PnPLongURLInventory
{
    [cmdletbinding()]
    param([parameter(Mandatory = $true, ValueFromPipeline = $true)] $Web)
  
    Write-host "Scanning Files with Long URL in Site '$($Web.URL)'" -f Yellow
    If($Web.ServerRelativeUrl -eq "/")
    {
        $TenantURL= $Web.Url
    }
    Else
    {
        $TenantURL= $Web.Url.Replace($Web.ServerRelativeUrl,'')
    }
     
    #Get All Large Lists from the Web - Exclude Hidden and certain lists
    $ExcludedLists = @("Form Templates", "Preservation Hold Library","Site Assets", "Pages", "Site Pages", "Images",
                            "Site Collection Documents", "Site Collection Images","Style Library")
                              
    #Get All Document Libraries from the Web
    $Lists= Get-PnPProperty -ClientObject $Web -Property Lists
    $Lists | Where-Object {$_.BaseType -eq "DocumentLibrary" -and $_.Hidden -eq $false -and $_.Title -notin $ExcludedLists -and $_.ItemCount -gt 0} -PipelineVariable List | ForEach-Object {
        #Get Items from List  
        $global:counter = 0;
        $ListItems = Get-PnPListItem -List $_ -PageSize $Pagesize -Fields Author, Created, File_x0020_Type -ScriptBlock { Param($items) $global:counter += $items.Count; Write-Progress -PercentComplete ($global:Counter / ($_.ItemCount) * 100) -Activity "Getting List Items of '$($_.Title)'" -Status "Processing Items $global:Counter to $($_.ItemCount)";}
        $LongListItems = $ListItems | Where { ([uri]::EscapeUriString($_.FieldValues.FileRef).Length + $TenantURL.Length ) -gt $MaxUrlLength }
        Write-Progress -Activity "Completed Retrieving Items from List $($List.Title)" -Completed
                 
        If($LongListItems.count -gt 0)
        {
            #Get Root folder of the List
            $Folder = Get-PnPProperty -ClientObject $_ -Property RootFolder
            Write-host "`tFound '$($LongListItems.count)' Items with Long URLs at '$($Folder.ServerRelativeURL)'" -f Green
 
            #Iterate through each long url item and collect data          
            ForEach($ListItem in $LongListItems)
            {
                #Calculate Encoded Full URL of the File
                $AbsoluteURL =  "$TenantURL$($ListItem.FieldValues.FileRef)"
                $EncodedURL = [uri]::EscapeUriString($AbsoluteURL)
  
                    #Collect document data
                    $global:LongURLInventory += New-Object PSObject -Property ([ordered]@{
                        SiteName  = $Web.Title
                        SiteURL  = $Web.URL
                        LibraryName = $List.Title
                        LibraryURL = $Folder.ServerRelativeURL
                        ItemName = $ListItem.FieldValues.FileLeafRef
                        Type = $ListItem.FileSystemObjectType
                        FileType = $ListItem.FieldValues.File_x0020_Type
                        AbsoluteURL = $AbsoluteURL
                        EncodedURL = $EncodedURL
                        UrlLength = $EncodedURL.Length                     
                        CreatedBy = $ListItem.FieldValues.Author.LookupValue
                        CreatedByEmail  = $ListItem.FieldValues.Author.Email
                        CreatedAt = $ListItem.FieldValues.Created
                        ModifiedBy = $ListItem.FieldValues.Editor.LookupValue
                        ModifiedByEmail = $ListItem.FieldValues.Editor.Email
                        ModifiedAt = $ListItem.FieldValues.Modified                       
                    })
                }
            }
        }
}
 
#Connect to Site collection
Connect-PnPOnline -Url $SiteURL -Interactive
   
#Call the Function for all Webs
Get-PnPSubWeb -Recurse -IncludeRootWeb | ForEach-Object { Get-PnPLongURLInventory $_ }
  
#Export Documents Inventory to CSV
$Global:LongURLInventory | Export-Csv $CSVPath -NoTypeInformation
Write-host "Report has been Exported to '$CSVPath'"  -f Magenta
</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2024/01/26/sharepoint-site-swap-fails-but-a-fallback-position/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">47768</post-id>	</item>
		<item>
		<title>SharePoint Team Site Home Pages Get New Names &#8211; For Some Reason</title>
		<link>https://sympmarc.com/2023/11/03/sharepoint-team-site-home-pages-get-new-names-for-some-reason/</link>
					<comments>https://sympmarc.com/2023/11/03/sharepoint-team-site-home-pages-get-new-names-for-some-reason/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Fri, 03 Nov 2023 22:59:06 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[information architecture]]></category>
		<category><![CDATA[Team Site]]></category>
		<category><![CDATA[Home Page]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=47626</guid>

					<description><![CDATA[Today I noticed something that threw me for a loop. I created a garden variety Team Site and saw that the home page was named CollabHome.aspx. Home pages have been named Home.aspx in SharePoint forever. I did some searching and came up with nothing for &#8220;CollabHome.aspx&#8221;. One would thing there would be something documented about...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Today I noticed something that threw me for a loop. I created a garden variety Team Site and saw that the home page was named <code>CollabHome.aspx</code>. Home pages have been named <code>Home.aspx</code> in SharePoint forever.</p>



<p class="wp-block-paragraph">I did some searching and came up with nothing for &#8220;CollabHome.aspx&#8221;. One would thing there would be something documented about a change like this, but no. As I usually do, I turned to Twitter to try to find out why this had happened.</p>



<figure class="wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">I just created a standard Team Site using the Standard Team template (simplest), and the home page was set to /SitePages/CollabHome.aspx. When did that start to happen? No bueno. Tried it twice to be sure. <a href="https://twitter.com/susanhanley?ref_src=twsrc%5Etfw">@susanhanley</a> <a href="https://twitter.com/EEMancini?ref_src=twsrc%5Etfw">@EEMancini</a></p>&mdash; Marc D Anderson (@sympmarc) <a href="https://twitter.com/sympmarc/status/1720495034955338072?ref_src=twsrc%5Etfw">November 3, 2023</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p class="wp-block-paragraph">I always want the simplest starting point, as it&#8217;s better to me to build what we actually want than to start with a template that isn&#8217;t exactly right and probably doesn&#8217;t follow good information architecture (IA) rules. (Yes, I&#8217;m looking at you, Microsoft.) Now that we are forced to choose a template, I choose Standard team. There&#8217;s no option to choose &#8220;No template, thank you very much.&#8221;</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="620" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/11/image.png?resize=1024%2C620&#038;ssl=1" alt="" class="wp-image-47627" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/11/image.png?resize=1024%2C620&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/11/image.png?resize=300%2C182&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/11/image.png?resize=768%2C465&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/11/image.png?w=1200&amp;ssl=1 1200w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Our pal Cathy Dew (<a rel="noreferrer noopener" href="https://twitter.com/catpaint1" data-type="link" data-id="https://twitter.com/catpaint1" target="_blank">@catpaint1</a>) let us know some of the reasoning in a response.</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">Yes, we do give each homepage a unique name now because site templates are additive as <a href="https://twitter.com/susanhanley?ref_src=twsrc%5Etfw">@susanhanley</a> mentioned. This helps you understand which homepage is from which template you applied if you apply a second at a later time.</p>&mdash; Cathy Dew (@catpaint1) <a href="https://twitter.com/catpaint1/status/1720539905040994616?ref_src=twsrc%5Etfw">November 3, 2023</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p class="wp-block-paragraph">For years, some of us have been telling people not to change the name of the site home page. It&#8217;s good &#8211; at least in my mind &#8211; to have consistency. Maybe it&#8217;s because I type URLs into the address bar more than most people, but consistency is rarely a bad thing. When I see a tenant where the home pages have all been renamed, it&#8217;s almost an indicator that the rest of the IA is likely to be messy.</p>



<p class="wp-block-paragraph">Since the template we choose determines the home page name, I created a site with each of the templates to see what we get. Unfortunately, the home page naming isn&#8217;t that consistent, either. I hear they may clean this up a bit, but if you already have a site with one of these names, it&#8217;s likely to stay with the name it has.</p>



<figure class="wp-block-table"><table><thead><tr><th>Template name</th><th>Home page</th></tr></thead><tbody><tr><td>Standard team</td><td>CollabHome.aspx</td></tr><tr><td>Crisis communication team</td><td>crisisCommunicationHome.aspx</td></tr><tr><td>Employee onboarding team</td><td>Employee-onboarding-team-home.aspx</td></tr><tr><td>Event planning</td><td>EventPlanHome.aspx</td></tr><tr><td>IT help desk</td><td>ITHelpdeskHome.aspx</td></tr><tr><td>Project management</td><td>ProjectHome.aspx</td></tr><tr><td>Retail management team</td><td>RetailManagementHome.aspx</td></tr><tr><td>Store collaboration</td><td>SCHome.aspx</td></tr><tr><td>Training course</td><td>TrainingHome.aspx</td></tr><tr><td>Training design team</td><td>LearningTeamHome.aspx</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">I&#8217;m not wild about this change at all. At the very least, I&#8217;d like a default &#8220;No template&#8221; option that gives me exactly the same thing I&#8217;ve always gotten. <strong>Standard team</strong> seems to be that, albeit with its home page named <code>CollabHome.aspx</code>. It feels sort of like one of those <a rel="noreferrer noopener" href="https://en.wikipedia.org/wiki/Hippocratic_Oath" data-type="link" data-id="https://en.wikipedia.org/wiki/Hippocratic_Oath" target="_blank">Hippocratic Oath</a> things: &#8220;First do no harm&#8221;. A change for change&#8217;s sake with no clear benefit is not a good thing.</p>



<p class="wp-block-paragraph">Is this going to cause huge damage? No. Should I be annoyed or just accept it? Well, maybe the latter. But I see too many changes in SharePoint that erode the power it&#8217;s already had for years in the home of something new. It&#8217;s not just me being a curmudgeon (which I proudly am!), but also me hoping the best for this platform now and in the future.</p>



<p class="wp-block-paragraph">ADDENDUM: if you don’t see this in your tenant yet, it may not have reached you. As I understand it, this is rolling out slowly.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2023/11/03/sharepoint-team-site-home-pages-get-new-names-for-some-reason/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">47626</post-id>	</item>
		<item>
		<title>Where&#8217;s My SharePoint Site? Ask the `AAD to SharePoint Sync` User</title>
		<link>https://sympmarc.com/2023/10/27/wheres-my-sharepoint-site-ask-the-aad-to-sharepoint-sync-user/</link>
					<comments>https://sympmarc.com/2023/10/27/wheres-my-sharepoint-site-ask-the-aad-to-sharepoint-sync-user/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Fri, 27 Oct 2023 19:34:46 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Audit Log]]></category>
		<category><![CDATA[Microsoft Purview]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[Azure AD]]></category>
		<category><![CDATA[Entra ID]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=47562</guid>

					<description><![CDATA[Today one of my clients had a problem. One of her SharePoint sites was missing. She found it in Deleted sites in the SharePoint Admin Center. Restoring the site from the Deleted sites is an easy fix, of course: she had already done that on her own. But none of the Site Owners or Site...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Today one of my clients had a problem. One of her SharePoint sites was missing. She found it in <strong>Deleted sites</strong> in the SharePoint Admin Center. Restoring the site from the <strong>Deleted sites</strong> is an easy fix, of course: she had already done that on her own. But none of the Site Owners or Site Members could access the site. This was why she had pinged me.</p>



<p class="wp-block-paragraph">But why had the site been deleted? As a Global Admin in a very small organization, she felt should have known why this had happened.</p>



<h2 class="wp-block-heading">Analysis</h2>



<p class="wp-block-paragraph">We thought about what the causes might be, and these were data points about the site which made it a little different than most of their sites.</p>



<ul class="wp-block-list">
<li>She thought she may have set up a policy when she created it &#8211; but we couldn&#8217;t find one.</li>



<li>There were guest users who had sharing links for 30 days which had just expired &#8211; but that shouldn&#8217;t have caused any change in the state of the site.</li>
</ul>



<p class="wp-block-paragraph">We turned to the Audit Log in the <s>Compliance Porta</s>l Microsoft Purview Compliance Portal to see whodunnit. Many people don&#8217;t think of using the Audit Log for things like this, but it&#8217;s a great way to <s>pin something on the perpetrator</s> figure out what happened. Unfortunately, usually the people who have access to the Microsoft Purview Compliance Portal are tough to find in a large organization. Here, it was easy.</p>



<p class="wp-block-paragraph">We set the start date to the date when the last modification had been made in the site, as seen in the Active sites listing, and we set the activity to search for <strong>Deleted site</strong> in the <strong>Site administration activities</strong>. (The audit log gives us a lot of granular settings.)</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="391" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-12.png?resize=1024%2C391&#038;ssl=1" alt="" class="wp-image-47565" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-12.png?resize=1024%2C391&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-12.png?resize=300%2C115&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-12.png?resize=768%2C294&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-12.png?w=1470&amp;ssl=1 1470w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">About 10 minutes later &#8211; these requests run in the background &#8211; we had an answer, of sorts. Like many things, the output is a little unintelligible in Excel (you get a CSV file), so I popped the JSON payload into Visual Studio code and formatted it.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="865" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-11.png?resize=1024%2C865&#038;ssl=1" alt="" class="wp-image-47564" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-11.png?resize=1024%2C865&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-11.png?resize=300%2C253&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-11.png?resize=768%2C649&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-11.png?resize=1536%2C1297&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-11.png?w=1930&amp;ssl=1 1930w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">So, what gives? We see that the user who deleted the site is <code>AAD to SharePoint Sync</code>. (Oops &#8211; another example of Microsoft&#8217;s penchant for renaming things leaving unintelligible messages! No more AAD; <a href="https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id" data-type="link" data-id="https://www.microsoft.com/en-us/security/business/identity-access/microsoft-entra-id" target="_blank" rel="noreferrer noopener">Azure Active Directory [AAD] is now Entra ID</a>. Is that EI?) There&#8217;s no &#8220;user&#8221; with that name, of course. The name implies some automated process deleted the site. AAD/EI &#8220;owns&#8221; Microsoft 365 Groups, so it had to be something with the underlying Group.</p>



<h2 class="wp-block-heading">Solution</h2>



<p class="wp-block-paragraph">When my client realized what date and time the site was deleted, she said &#8220;Hmmm&#8230;&#8221; She had deleted the Microsoft Team associated with the site in question last week. Bingo! I explained how the Team is connected to a Microsoft 365 Group which is connected to the SharePoint site (plus any other apps or services provisioned for the Group &#8211; like Planner). She had known this at one point, but in the heat of cleaning up the place&#8230;</p>



<p class="wp-block-paragraph">But what about the permissions issue on the restored site? Well, while we were figuring all this out, one of her team members (a Member of the Microsoft 365 Group) was able to get into the site. As with many things in the Microsoft 365 platform, sometimes you have to wait a little while. In this case, the background percolation to reinstate the underlying Microsoft 365 Group&#8217;s permissions took a while.</p>



<p class="wp-block-paragraph">Finally, back to normal &#8211; and we knew what had happened!</p>



<h2 class="wp-block-heading">Learnings</h2>



<p class="wp-block-paragraph">The big thing I learned here was about the mysterious <code>AAD to SharePoint Sync</code> &#8220;user&#8221;. If you see that user doing something, know that it&#8217;s probably due to a change made to a Microsoft 365 Group rippling out into the other Microsoft 365 apps and services. Of course, but the time I need this bit of knowledge again, that not user will probably be named something else. <code>EI to SharePoint Sync</code>, maybe?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2023/10/27/wheres-my-sharepoint-site-ask-the-aad-to-sharepoint-sync-user/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">47562</post-id>	</item>
		<item>
		<title>Using Content Types in SharePoint with Search-Driven User Interfaces</title>
		<link>https://sympmarc.com/2023/10/17/using-content-types-in-sharepoint-with-search-driven-user-interfaces/</link>
					<comments>https://sympmarc.com/2023/10/17/using-content-types-in-sharepoint-with-search-driven-user-interfaces/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Tue, 17 Oct 2023 18:45:38 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Content Types]]></category>
		<category><![CDATA[Site Columns]]></category>
		<category><![CDATA[search]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=47497</guid>

					<description><![CDATA[Content Types are a fundamental building block in SharePoint. Every object you upload or create in a SharePoint list or library gets a Content Type assigned to it, whether you realize it or not. If you create an item in a list, by default, it gets the Item Content Type. If you upload a file...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Content Types are a fundamental building block in SharePoint. Every object you upload or create in a SharePoint list or library gets a Content Type assigned to it, whether you realize it or not. If you create an item in a list, by default, it gets the <strong><em>Item</em></strong> Content Type. If you upload a file to a library, it gets the <strong><em>Document </em></strong>Content Type. (Sure, there are some exceptions to this, but it applies to the majority of the content we add to SharePoint.)</p>



<p class="wp-block-paragraph">If your information architecture (IA) is more mature (See: <a rel="noreferrer noopener" href="https://learn.microsoft.com/en-us/microsoft-365/community/microsoft365-maturity-model--management-of-content" target="_blank">Management of Content</a> in the <a rel="noreferrer noopener" href="https://learn.microsoft.com/en-us/microsoft-365/community/index_mm4m365" data-type="link" data-id="https://learn.microsoft.com/en-us/microsoft-365/community/index_mm4m365" target="_blank">Maturity Model for Microsoft 365</a>), you will create your own Content Types, which represent the important business objects in your organization. Those Content Types should be named for the things you use every day and have conversations about: &#8220;We need to get a new <strong><em>Employment Contract</em></strong> in place with Isabel.&#8221; or &#8220;How many <strong><em>Company Policies</em></strong> need to be reviewed this month?&#8221;</p>



<p class="wp-block-paragraph">Once you&#8217;ve built out your IA and have started assigning Content Types to your content, you&#8217;ll undoubtedly want to build some search-driven user interfaces (UIs). When we decide to include Site Columns in our Content Types, we should only add those Site Columns which will:</p>



<ul class="wp-block-list">
<li>Support process execution effectively, or</li>



<li>Provide us with ways to display similar content which is stored across lists and libraries or sites.</li>
</ul>



<p class="wp-block-paragraph">When we do this, we often &#8211; in fact, almost always &#8211; turn to the <a rel="noreferrer noopener" href="https://microsoft-search.github.io/pnp-modern-search/" data-type="link" data-id="https://microsoft-search.github.io/pnp-modern-search/" target="_blank">PnP Modern Search Web Parts</a>. For years, these community-built and supported Web Parts have been more powerful than the out of the box search experience in SharePoint. I install this solution for every single client I work with.</p>



<p class="wp-block-paragraph">When we use PnP Modern Search, we often want to filter, retrieve, or group by Content Type in the UIs we build. Due to the vagaries of the underlying SharePoint Search engine, we may need to take some foundational steps to make Content Type as useful as we&#8217;d like it to be.</p>



<h2 class="wp-block-heading">Filtering by Content Type Name</h2>



<p class="wp-block-paragraph">If you&#8217;d just like to filter using the value of Content Type, you should use the <code>SPContentType</code> Managed Property. We can use <code>SPContentType</code> in the query template we create to request the subset of content we&#8217;d like it to return.</p>



<p class="wp-block-paragraph">Here&#8217;s an example:</p>



<p class="wp-block-paragraph"><code>{searchTerms} SPContentType:'Internal Policy'</code></p>



<p class="wp-block-paragraph">This query goes in the <strong>Query templat</strong>e field in the PnP Search Results Web Part.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="300" height="276" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image.png?resize=300%2C276&#038;ssl=1" alt="" class="wp-image-47498"/></figure>
</div>


<p class="wp-block-paragraph">Content Type names are a bit more &#8220;brittle&#8221; (meaning the name of the Content Type <em>could</em> change over time) than the underlying <code>ContentTypeId</code>s, but it&#8217;s a lot easier to read the query and know what we meant when we set things up.</p>



<h2 class="wp-block-heading">Filtering by Content Type Id</h2>



<p class="wp-block-paragraph">When we first create a Content Type, it gets a <code>ContentTypeId</code> which is unique to that particular Content Type. The <code>ContentTypeId</code> is sort of like the <code>InternalName</code> of a list column, but its <code>Id</code> is constructed differently in that the <code>ContentTypeId</code> is built up based on its ancestry. There&#8217;s an older article in Microsoft Learn which describes this in intricate detail, so I won&#8217;t rehash it here. See: <a href="https://learn.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/aa543822(v=office.14)">Content Type IDs | Microsoft Learn</a>.</p>



<p class="wp-block-paragraph">For the purposes of this article, though, your query template might look something like this:</p>



<p class="wp-block-paragraph"><code>{searchTerms} ContentTypeId:0x010100AE45373F3F70FE4695EFCE3CCC53FD6E07*</code></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="310" height="344" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-1.png?resize=310%2C344&#038;ssl=1" alt="" class="wp-image-47499" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-1.png?w=310&amp;ssl=1 310w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-1.png?resize=270%2C300&amp;ssl=1 270w" sizes="auto, (max-width: 310px) 100vw, 310px" /></figure>
</div>


<p class="wp-block-paragraph">If you deconstruct this <code>ContentTypeId</code>, we can tell it represents a Content Type with <strong><em>Document</em></strong> as its parent, because it starts with <code>0x0101</code>. </p>



<p class="wp-block-paragraph">Using the <code>ContentTypeId</code> is most useful when you want to make your query less brittle (albeit less intelligible) and/or you&#8217;d like to take advantage of the Content Type inheritance model. In the example above, we use an asterisk in the query template so we can retrieve content with that <code>ContentTypeId</code> <em>or longer</em> &#8211; the asterisk is a wildcard character. Each inheritance tacks on an additional unique section of characters, as shown in this image borrowed from the Microsoft Learn article above.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="576" height="333" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-2.png?resize=576%2C333&#038;ssl=1" alt="" class="wp-image-47500" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-2.png?w=576&amp;ssl=1 576w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-2.png?resize=300%2C173&amp;ssl=1 300w" sizes="auto, (max-width: 576px) 100vw, 576px" /></figure>
</div>


<h2 class="wp-block-heading">Displaying or Grouping by the Content Type</h2>



<p class="wp-block-paragraph">Sooner or later, you will want to display or group by the Content Type name. We can surely just display the <code>SPContentType</code>, since we used it to filter above, right? Well, no. If you switch your PnP Search Results Web Part to the debug layout, you&#8217;ll see that <code>SPContentType</code> always returns <code>null</code>.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="256" height="98" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-3.png?resize=256%2C98&#038;ssl=1" alt="" class="wp-image-47501"/></figure>
</div>


<p class="wp-block-paragraph">How does that make any sense? It doesn&#8217;t, but thanks to search guru Mikael Svenson and his brief but pithy article <a href="https://www.techmikael.com/2016/02/when-query-by-content-type-name-use.html">When query by content type name use SPContentType and not ContentType</a>, at least we know why. If we look at the out -of-the-box set up for <code>SPContentType</code>, we can see that it is Query-able, but NOT Retrieve-able. That means filtering works great, but when we try to get the value for other uses, we can&#8217;t.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="64" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-6.png?resize=1024%2C64&#038;ssl=1" alt="" class="wp-image-47504" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-6.png?resize=1024%2C64&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-6.png?resize=300%2C19&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-6.png?resize=768%2C48&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-6.png?w=1026&amp;ssl=1 1026w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Surely, there&#8217;s another existing Managed Property we can use, right? Well, no. Here are a few candidates, but you can probably see why none of them get us there: they are descriptive, but they aren&#8217;t the actual Content Type name. We strike out with <code>contentClass</code> and <code>ContentType</code>, though we can see they indicate similar information about the object. And we know that <code>ContentTypeId</code> isn&#8217;t human-readable.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="768" height="44" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-4.png?resize=768%2C44&#038;ssl=1" alt="" class="wp-image-47502" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-4.png?w=768&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-4.png?resize=300%2C17&amp;ssl=1 300w" sizes="auto, (max-width: 768px) 100vw, 768px" /></figure>
</div>


<p class="wp-block-paragraph">The workaround for this is to map the <code>ows_ContentType</code> Crawled Property to one of the <code>RefinableStringXX</code> Managed Properties. Here, I&#8217;ve chosen to use the ever-mnemonic <code>RefinableString122</code>. Note that this Managed Property is Retrieve-able, but not Search-able! (Sometimes one wonders if they thought all this through when they first built it, eh?)</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="698" height="26" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-7.png?resize=698%2C26&#038;ssl=1" alt="" class="wp-image-47505" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-7.png?w=698&amp;ssl=1 698w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-7.png?resize=300%2C11&amp;ssl=1 300w" sizes="auto, (max-width: 698px) 100vw, 698px" /></figure>



<p class="wp-block-paragraph">Once we have this Managed Property set up and percolated, we can display or group by the Content Type name.</p>



<p class="wp-block-paragraph">Here&#8217;s what we see in the debug layout:</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="322" height="16" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-9.png?resize=322%2C16&#038;ssl=1" alt="" class="wp-image-47507" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-9.png?w=322&amp;ssl=1 322w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-9.png?resize=300%2C15&amp;ssl=1 300w" sizes="auto, (max-width: 322px) 100vw, 322px" /></figure>



<p class="wp-block-paragraph">And here&#8217;s an example us grouping by the Content Type name value using <code>RefinableString122</code>:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="302" height="182" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-10.png?resize=302%2C182&#038;ssl=1" alt="" class="wp-image-47509" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-10.png?w=302&amp;ssl=1 302w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-10.png?resize=300%2C181&amp;ssl=1 300w" sizes="auto, (max-width: 302px) 100vw, 302px" /></figure>
</div>


<p class="wp-block-paragraph">Giving us this nice result:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="502" height="234" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-8.png?resize=502%2C234&#038;ssl=1" alt="" class="wp-image-47506" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-8.png?w=502&amp;ssl=1 502w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/10/image-8.png?resize=300%2C140&amp;ssl=1 300w" sizes="auto, (max-width: 502px) 100vw, 502px" /></figure>
</div>


<h2 class="wp-block-heading">Summary</h2>



<p class="wp-block-paragraph">Content Types are indeed the best thing since sliced bread, but sometimes you need to be a master baker to get the most out of them.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li><a href="https://learn.microsoft.com/en-us/microsoft-365/community/what-is-content-type">What is a content type? | Microsoft Learn</a></li>



<li><a href="https://learn.microsoft.com/en-us/microsoft-365/community/what-is-site-column">What is a site column? | Microsoft Learn</a></li>



<li><a href="https://learn.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/aa543822(v=office.14)">Content Type IDs | Microsoft Learn</a></li>



<li><a href="https://www.techmikael.com/2016/02/when-query-by-content-type-name-use.html">Tech and me: When query by content type name use SPContentType and not ContentType (techmikael.com)</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2023/10/17/using-content-types-in-sharepoint-with-search-driven-user-interfaces/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">47497</post-id>	</item>
		<item>
		<title>Creating an Array of Dates within a Date Range with PowerShell</title>
		<link>https://sympmarc.com/2023/06/22/creating-an-array-of-dates-within-a-date-range-with-powershell/</link>
					<comments>https://sympmarc.com/2023/06/22/creating-an-array-of-dates-within-a-date-range-with-powershell/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 22 Jun 2023 18:23:41 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[date arithmetic]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[5000 item limit]]></category>
		<category><![CDATA[PnP.PowerShell]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=47027</guid>

					<description><![CDATA[Today I needed to create an array of all the dates in a data range in PowerShell. It&#8217;s a simple little thing. Maybe I should have asked Github Copilot, but I&#8217;m old skool, so I wrote it myself. (I also haven&#8217;t gotten used to having a virtual assistant!) The reason I even needed to do...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Today I needed to create an array of all the dates in a data range in PowerShell. It&#8217;s a simple little thing. Maybe I should have asked <a data-type="URL" data-id="https://github.com/features/copilot" href="https://github.com/features/copilot" target="_blank" rel="noreferrer noopener">Github Copilot</a>, but I&#8217;m old skool, so I wrote it myself. (I also haven&#8217;t gotten used to having a virtual assistant!)</p>



<p class="wp-block-paragraph">The reason I even needed to do this is the dread 5000 item view threshold in SharePoint lists and libraries. We have a list with about 1.6 million items in it, and I wanted to &#8220;slice out&#8221; the ones which matched a specific date range. No matter how I tried to do that in the UI, I failed &#8211; not surprisingly, since there are about 1500 items per date.</p>



<p class="wp-block-paragraph">You might ask why we&#8217;d have so many items in a list. Well, this is a list that&#8217;s built up over 7 years, and we actually need all the data in it together. I built an app in Angular years ago which uses it as a data source, and that app works just fine. This request for a year&#8217;s worth of data is an anomaly, and not something I considered in my design.</p>



<p class="wp-block-paragraph">I hit on the idea to use <a data-type="URL" data-id="https://pnp.github.io/powershell/" href="https://pnp.github.io/powershell/" target="_blank" rel="noreferrer noopener">PnP.PowerShell</a> to grab the items for each day in the date range and combine them all together. But first, I needed a valid list of all the dates in that year range. Thus, my little script here. I think it&#8217;s self-explanatory, but feel free to ask questions in the comments. One note: you could change the format in line 11 to meet your own needs.</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell line-numbers"># Set up list of days we want
$days = @() # Array to hold all the dates
# Start and end date for the range
$startDate = [DateTime] "2022-05-01" 
$endDate = [DateTime] "2023-04-30"

# Loop through, adding one date to the array at a time until we reach the end date
$date = [DateTime] $startDate
while ($date -le $endDate) {
    $days += $date.ToString('yyyyMMdd')
    $date = $date.AddDays(1)
}

# And here's our final array!
$days
</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2023/06/22/creating-an-array-of-dates-within-a-date-range-with-powershell/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">47027</post-id>	</item>
		<item>
		<title>Pinning a Destination to Quick Access in SharePoint Online</title>
		<link>https://sympmarc.com/2023/02/17/pinning-a-destination-to-quick-access-in-sharepoint-online/</link>
					<comments>https://sympmarc.com/2023/02/17/pinning-a-destination-to-quick-access-in-sharepoint-online/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Fri, 17 Feb 2023 15:21:52 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[Quick access]]></category>
		<category><![CDATA[Copy to]]></category>
		<category><![CDATA[Move to]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=46433</guid>

					<description><![CDATA[Here&#8217;s the scenario: we have a site called Clients where we track potential clients and store files we get from them during discussions. Once they become an actual client, we create a Team Site, connect it to Teams, and we move the files into that site. For years, this has frustrated me no end because...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Here&#8217;s the scenario: we have a site called Clients where we track potential clients and store files we get from them during discussions. Once they become an actual client, we create a Team Site, connect it to Teams, and we move the files into that site.</p>



<p class="wp-block-paragraph">For years, this has frustrated me no end because when I create the new Team Site, it can take until overnight for that site to be visible in the Copy to / Move to dialog.</p>



<p class="wp-block-paragraph">As I am wont to do, I finally turned to Twitter for a solution (though I don&#8217;t think this is the first time!). with the #SPHelp hashtag.</p>



<figure class="wp-block-embed aligncenter is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">How do I get a site to show up in the Move to or Copy to dialogs? If there&#39;s a trick other than waiting overnight after creating a new site, I haven&#39;t found it. <a href="https://twitter.com/hashtag/SPHelp?src=hash&amp;ref_src=twsrc%5Etfw">#SPHelp</a> <a href="https://twitter.com/hashtag/veryfrustrating?src=hash&amp;ref_src=twsrc%5Etfw">#veryfrustrating</a> <a href="https://t.co/c0Zt6rnAR4">pic.twitter.com/c0Zt6rnAR4</a></p>&mdash; Marc D Anderson (@sympmarc) <a href="https://twitter.com/sympmarc/status/1626344373788057605?ref_src=twsrc%5Etfw">February 16, 2023</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p class="wp-block-paragraph">It was gratifying to get many responses (and many people expressing the same frustration). Most of the suggestions were things I&#8217;d tried before: upload some dummy files to the new site to generate &#8220;activity&#8221;, follow the new site, etc. None of these actions seemed to <em>reliably </em>make the site show up where I wanted it.<a href="https://twitter.com/pzkfwg"></a></p>



<p class="wp-block-paragraph"><a href="https://twitter.com/pzkfwg"></a>Francis Laurin (<a href="https://twitter.com/pzkfwg"></a><a rel="noreferrer noopener" href="https://twitter.com/pzkfwg" target="_blank">@pzkfwg)</a> and Gregory Zelfond (<a rel="noreferrer noopener" href="https://twitter.com/gregoryzelfond" data-type="URL" data-id="https://twitter.com/gregoryzelfond" target="_blank">@gregoryzelfond)</a> responded with the winning answer. Turns out the answer has been staring me in the face &#8211; though I don&#8217;t think it&#8217;s all that obvious. If you notice, the list of destinations on the left of the Copy to / Mode to dialog screen is called <strong>Quick access</strong>.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="642" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/02/image.png?resize=1024%2C642&#038;ssl=1" alt="" class="wp-image-46435" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/02/image.png?resize=1024%2C642&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/02/image.png?resize=300%2C188&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/02/image.png?resize=768%2C482&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/02/image.png?w=1075&amp;ssl=1 1075w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The solutions is to navigate to the specific Document Library you want to copy/move to and pin that Document Library to <strong>Quick access</strong>. That option has been there for a long time, but I never connected it to this process in my mind.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="56" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/02/image-1.png?resize=1024%2C56&#038;ssl=1" alt="" class="wp-image-46436" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/02/image-1.png?resize=1024%2C56&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/02/image-1.png?resize=300%2C16&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/02/image-1.png?resize=768%2C42&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/02/image-1.png?w=1157&amp;ssl=1 1157w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">This great video from Greg shows how this all works:</p>



<figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"><div class="wp-block-embed__wrapper">
<iframe loading="lazy" title="Pin to Quick Access in SharePoint Document Library" width="720" height="405" src="https://www.youtube.com/embed/0wUDvVch7tY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
</div></figure>



<p class="wp-block-paragraph">Unfortunately, that feels backward. Ideally, Microsoft will make the Copy to / Move to dialog smarter and let us just search for the site we want to use as the destination. I shouldn&#8217;t need to <strong><em>go</em></strong> to that destination <strong><em>before </em></strong>I copy/move the content. </p>



<p class="wp-block-paragraph">At the very least, the dialog should have some way to know that pinning to <strong>Quick access</strong> is a &#8220;thing&#8221;, by offering some in process help or tip. I&#8217;m thinking that a little info icon next to the words <strong>Quick access</strong> which takes me to an article which explains what <strong>Quick access</strong> even is would be a huge step in the right direction. When I Bingle for the *right* search terms &#8220;SharePoint quick access&#8221;, for example, I only find information about Windows <strong>Quick access</strong> (which seems to be broken for me lately, but that&#8217;s another post).</p>



<p class="wp-block-paragraph">I feel like I&#8217;m a reasonably smart guy with some familiarity with the platform. This shouldn&#8217;t have been so hard to figure out.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2023/02/17/pinning-a-destination-to-quick-access-in-sharepoint-online/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">46433</post-id>	</item>
		<item>
		<title>Using ShareGate PowerShell to Download SharePoint Content</title>
		<link>https://sympmarc.com/2023/02/13/using-sharegate-powershell-to-download-sharepoint-content/</link>
					<comments>https://sympmarc.com/2023/02/13/using-sharegate-powershell-to-download-sharepoint-content/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 13 Feb 2023 19:44:00 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[export]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Sharegate]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=46221</guid>

					<description><![CDATA[You might be surprised by the title of this post. Isn&#8217;t our goal to get everyone&#8217;s content *into* SharePoint? Usually that&#8217;s the case, for sure. But many times, in the course of a migration from an older (usually on premises) version of SharePoint, we identify whole sites or branches of subsites that simply don&#8217;t have...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">You might be surprised by the title of this post. Isn&#8217;t our goal to get everyone&#8217;s content *into* SharePoint? Usually that&#8217;s the case, for sure.</p>



<p class="wp-block-paragraph">But many times, in the course of a migration from an older (usually on premises) version of SharePoint, we identify whole sites or branches of subsites that simply don&#8217;t have any real purpose anymore. In some cases, we migrate the content into SharePoint Online, maybe into a site called Archive or similar. But other times we just want to save the content somewhere *in case* someone needs it. Which approach you take may hinge on your organizational culture, what storage mechanisms you have available, and the relative importance of the content &#8211; among many other things.</p>



<p class="wp-block-paragraph">I&#8217;ve worked on a PowerShell script for this recently and used it for several different clients. With it, I can point at the top level of a branch of sites &#8211; maybe something like <code>/sites/HR</code> or <code>/departments/Finance</code>, and the script will download the content from that site, and recursively from all its subsites, etc. into a network location of my choosing, say <code>C:</code>\ or <code>Z:</code>\<code>Archive</code>.</p>



<p class="wp-block-paragraph">I&#8217;ve run this script with both SharePoint 2010 and SharePoint 2016 as the source version, so I expect it will work for you in most cases.</p>



<figure class="wp-block-image size-large"><a href="https://sharegate.com/" target="_blank" rel="noreferrer noopener"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="137" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/sharegate.png?resize=1024%2C137&#038;ssl=1" alt="" class="wp-image-46240" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/sharegate.png?resize=1024%2C137&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/sharegate.png?resize=300%2C40&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/sharegate.png?resize=768%2C103&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/sharegate.png?resize=1536%2C205&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/sharegate.png?w=1617&amp;ssl=1 1617w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a></figure>



<p class="wp-block-paragraph">The script is pretty straightforward because I use <a rel="noreferrer noopener" href="https://migration-tool.sharegate.com/hc/en-us/categories/204661007-Powershell" data-type="URL" data-id="https://migration-tool.sharegate.com/hc/en-us/categories/204661007-Powershell" target="_blank">ShareGate&#8217;s PowerShell module</a> to do all the heavy lifting: yet another reason why <a rel="noreferrer noopener" href="https://sharegate.com/" data-type="URL" data-id="https://sharegate.com/" target="_blank">ShareGate</a> rocks! If you have ShareGate installed on your machine, you have their PowerShell module as well, even if you didn&#8217;t realize it.</p>



<figure class="wp-block-pullquote"><blockquote><p>Note the ShareGate module requires you to be running PowerShell 5.x, NOT the more current PowerShell 7.x.</p></blockquote></figure>



<p class="wp-block-paragraph">The script comes in two pieces:</p>



<ul class="wp-block-list">
<li><strong>downloadSite.ps1</strong> &#8211; The script I actually run, after setting three variables appropriately.</li>



<li><strong>downloadSiteFunctions.psm1</strong> &#8211; A module with functions I call above. If you want to do recursion, you&#8217;ll need functions of some sort, and using a separate module gives some flexibility for reuse.</li>
</ul>



<p class="wp-block-paragraph">The parameter settings I show in the <strong>downloadSite.ps1</strong> below were what I wanted for a particular scenario. When you read through <strong>downloadSiteFunctions.psm1</strong> below, you&#8217;ll see what the impact of those settings is.</p>



<pre title="downloadSite.ps1" class="wp-block-code"><code lang="powershell" class="language-powershell line-numbers">Import-Module -Name ShareGate # Requires ShareGate to be installed on the machine
Import-Module "./PowerShell/downloadSiteFunctions.psm1" -Force

# Setup
$sourceSiteName = "Name for the downloaded folder"
$sourceSiteUrl = "https://FarmOrTenantName/siteName/"

# The downloads will end up in a folder here named $sourceSiteName
$destTop = "Z:\" # Be sure to include a trailing backslash

# Any list or library in this array will be excluded from the downloads
$exclusionLists = @(
    "Content and Structure Reports",
    "Master Page Gallery",
    "Reusable Content",
    "Style Library",
    "Web Part Gallery",
    "Workflow Tasks",
    "Microfeed",
    "Site Pages",
    "Site Assets"
)

# Process root web
#   Delete existing folder - we assume we want to start from scratch
Remove-Item `
    -Path "$($destTop)$($sourceSiteName)" `
    -Recurse `
    -Force

#   Create new top-level folder
$top = New-Item `
    -Path "$($destTop)$($sourceSiteName)" `
    -ItemType Directory -Force

#   Export lists
Export-SympLists `
    -ParentFolder "$($top.FullName)" `
    -WebUrl $sourceSiteUrl `
    -Versions $false `
    -ExclusionLists $exclusionLists `
    -KeepEmpty $false `
    -KeepLists $true

# Process subwebs
Get-SympSubwebs `
    -ParentFolder "$($top.FullName)" `
    -WebUrl $sourceSiteUrl `
    -Versions $false `
    -ExclusionLists $exclusionLists `
    -KeepEmpty $false `
    -KeepLists $true
</code></pre>



<p class="wp-block-paragraph">The <strong>downloadSiteFunctions.psm1</strong> file might seem complicated, but it&#8217;s just two functions:</p>



<ul class="wp-block-list">
<li><strong>Export-SympLists</strong> &#8211; Exports all list/library contents from a web using ShareGate PowerShell functions. The ShareGate function <code>Export-List</code> is a workhorse. It exports ALL lists and libraries to folders. Even better, it creates an Excel file containing the inventory with all the metadata as well as the Document (libraries) or Attachments (lists).</li>



<li><strong>Get-SympSubwebs</strong> &#8211; Gets the subwebs of any web and exports their list contents using ShareGate PowerShell functions. By calling itself as a last step, the function enables recursion. Essentially, it &#8220;walks&#8221; the subsite (web) topology from the current site (web) on down.</li>
</ul>



<pre title="downloadSiteFunctions.psm1" class="wp-block-code"><code lang="powershell" class="language-powershell line-numbers">&lt;#
.DESCRIPTION
   Exports list contents from a web using ShareGate PowerShell functions
.EXAMPLE
   Export-SympLists -ParentFolder $parentFolder -WebUrl $webUrl -Versions $versions
#&gt;
function Export-SympLists {
   [CmdletBinding()]
   [Alias()]
   [OutputType([int])]
   Param
   (
      # Parent Folder
      [string]
      $ParentFolder,
 
      # Web URL
      [string]
      $WebUrl,
 
      # Versions - Should we download versions (or only the latest version) $true = all versions
      [boolean]
      $Versions = $false,
 
      # ExclusionLists - Array of list names to *skip* in the download
      [array]
      $ExclusionLists = @(),

      # KeepEmpty - Will create a folder for every library even if it is empty.
      # Setting this to $false will delete the empty folders.
      [boolean]
      $KeepEmpty = $false,

      # KeepLists - Will create a folder for every list even if it is empty.
      # Setting this to $true will keep all lists, regardless of their number of items.
      [boolean]
      $KeepLists = $false
 
   )
  
   Begin {
  
      Write-Host "Processing web $($WebUrl)"
 
   }
   Process {
  
      # ShareGate's Connect-Site
      $srcSite = Connect-Site $WebUrl

      # ShareGate's Get-List
      $srcLists = Get-List -Site $srcSite

      # Filter out the exclusionList items, if any
      foreach ($exclusionList in $ExclusionLists) {
         $newLists = $srcLists | Where-Object { $_.Title -ne $exclusionList } 
         $srcLists = $newLists
      }

      # If there's something to download, do it.
      if ($srcLists.length -gt 0) {
         # If we want to keep versions 
         if ($Versions) {
            $result = Export-List -List $srcLists -DestinationFolder "$($ParentFolder)"
         }
         else {
            # Else we don't want to keep versions 
            $result = Export-List -List $srcLists -DestinationFolder "$($ParentFolder)" -NoVersionHistory 
         }
      }

      # If #KeepLists, then keep all lists
      if ($KeepLists) {
         $srcLists = $srcLists | Where-Object { $_.RootFolder -inotmatch "/Lists/" }
      }

      # If !$KeepEmpty, delete the folders which have no content
      if (!$KeepEmpty) {
         foreach ($list in $srcLists) {
            $listPath = "$($ParentFolder)\$($list.Title)"
            $documents = Get-Item -Path "$($listPath)\Documents\*" -ErrorAction Ignore
            if ($documents.length -eq 0) {
               Remove-Item -Path $listPath -Force -Confirm:$false -Recurse
            }
         }
      }

   }
   End {
   }
}
 
 
&lt;#
 .DESCRIPTION
    Gets the subwebs of any web and exports their list contents using ShareGate PowerShell functions
 .EXAMPLE
    Get-SympSubwebs -ParentFolder $parentFolder -WebUrl $webUrl -Versions $versions 
 #&gt;
function Get-SympSubwebs {
   [CmdletBinding()]
   [Alias()]
   [OutputType([int])]
   Param
   (
      # Parent Folder
      [string]
      $ParentFolder,
 
      # Web URL
      [string]
      $WebUrl,
 
      # Versions - Should we download versions (or only the latest version) $true = all versions
      [boolean]
      $Versions,
 
      # ExclusionLists - Array of list names to skip in the download
      [array]
      $ExclusionLists,

      # KeepEmpty - Will create a folder for every library even if it is empty.
      # Setting this to $false will delete the empty folders.
      [boolean]
      $KeepEmpty = $false,

      # KeepLists - Will create a folder for every list even if it is empty.
      # Setting this to $true will keep all lists, regardless of their number of items.
      [boolean]
      $KeepLists = $false

   )
  
   Begin {
  
      Write-Host "Getting subwebs of $($WebUrl)"
 
   }
   Process {
  
      # ShareGate's Connect-Site
      $siteConnection = Connect-Site $WebUrl

      # ShareGate's Get-Subsite
      $webs = Get-Subsite -Site $siteConnection
 
      # Process each web
      foreach ($web in $webs) {
 
         # Remove illegal characters in the web title
         $cleanTitle = $web.Title.Replace("#", "").Replace(":", " - ").Replace("/", "-").Replace("""", "'")

         # Variable for the web's folder - note the leading "_"
         $rootFolder = "$($ParentFolder)\_$($cleanTitle)" 
 
         # Create the web's folder
         $newFolder = New-Item -Path $rootFolder -ItemType Directory -Force

         # Download the lists/libraries with the provided parameters
         Export-SympLists -ParentFolder $rootFolder -WebUrl "$($web.Address)" -Versions $Versions -ExclusionLists $ExclusionLists -KeepEmpty $KeepEmpty -KeepLists $KeepLists

         # Get the web's subwebs - this is the recursion
         Get-SympSubwebs -ParentFolder $rootFolder -WebUrl "$($web.Address)" -Versions $Versions -ExclusionLists $ExclusionLists -KeepEmpty $KeepEmpty -KeepLists $KeepLists

      }
 
   }
   End {
   }
}
 </code></pre>



<p class="wp-block-paragraph">Here&#8217;s an example. Let&#8217;s say I set the variables in <strong>downloadSite.ps1</strong> like so:</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell"># Setup
$sourceSiteName = "Brazil"
$sourceSiteUrl = "https://myTenant/Brazil/"

# The downloads will end up in a folder here named $sourceSiteName
$destTop = "Z:\"</code></pre>



<p class="wp-block-paragraph">I end up with something like the following set of folders. Brazil is the top-level site, and it has 3 subsites: Facilities, Human Resources, and Recruitment. Notice that each subsite&#8217;s folder&#8217;s name starts with an underscore so we can easily understand the tree at a glance.</p>



<p class="wp-block-paragraph">Within each subsite&#8217;s folder, all the lists and libraries within it (if requested) are represented as folders.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="383" height="751" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/tree.png?resize=383%2C751&#038;ssl=1" alt="" class="wp-image-46224" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/tree.png?w=383&amp;ssl=1 383w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/tree.png?resize=153%2C300&amp;ssl=1 153w" sizes="auto, (max-width: 383px) 100vw, 383px" /></figure>



<p class="wp-block-paragraph">Each library&#8217;s folder contains the Excel file with the metadata, and a subfolder containing the documents themselves.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="243" height="89" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/Docs.png?resize=243%2C89&#038;ssl=1" alt="" class="wp-image-46225"/></figure>



<p class="wp-block-paragraph">Each list&#8217;s folder contains the Excel file with the metadata, and a subfolder containing the attachments, if any.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="209" height="78" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/List.png?resize=209%2C78&#038;ssl=1" alt="" class="wp-image-46226"/></figure>



<p class="wp-block-paragraph">This script gives me a good scaffolding and some options I can use to get content out of SharePoint in an organized and broad way. I&#8217;ve already used it with two clients, and I firmly expect I&#8217;ll use it again.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2023/02/13/using-sharegate-powershell-to-download-sharepoint-content/feed/</wfw:commentRss>
			<slash:comments>6</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">46221</post-id>	</item>
		<item>
		<title>Goals for your IT Team When They Free Up Time Through Automation</title>
		<link>https://sympmarc.com/2023/01/26/goals-for-your-it-team-when-they-free-up-time-through-automation/</link>
					<comments>https://sympmarc.com/2023/01/26/goals-for-your-it-team-when-they-free-up-time-through-automation/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 26 Jan 2023 20:05:19 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[consulting]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[Azure AD]]></category>
		<category><![CDATA[automation]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=46201</guid>

					<description><![CDATA[Back in October, I was lucky enough to visit my friends at ShareGate, along with fellow MVPs Jasper Oosterveld (@jappie1981) and Maarten Eekels (@maarteneekels) We had several conversations with ShareGate&#8217;s Laurent St. Pierre (@laurent_sp), and those were recorded and released as a series of videos: The evolution of IT: Improving digital employee experience to boost...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Back in October, I was lucky enough to visit my friends at <a rel="noreferrer noopener" href="https://sharegate.com/" data-type="URL" data-id="https://sharegate.com/" target="_blank">ShareGate</a>, along with fellow MVPs Jasper Oosterveld (<a rel="noreferrer noopener" href="https://twitter.com/jappie1981" data-type="URL" data-id="https://twitter.com/jappie1981" target="_blank">@jappie1981</a>) and Maarten Eekels (<a rel="noreferrer noopener" href="https://twitter.com/maarteneekels" data-type="URL" data-id="https://twitter.com/maarteneekels" target="_blank">@maarteneekels</a>) We had several conversations with ShareGate&#8217;s Laurent St. Pierre (<a rel="noreferrer noopener" href="https://twitter.com/laurent_sp" data-type="URL" data-id="https://twitter.com/laurent_sp" target="_blank">@laurent_sp</a>), and those were recorded and released as a series of videos: <a href="https://sharegate.com/resource/the-evolution-of-it">The evolution of IT: Improving digital employee experience to boost productivity</a>. The conversations have also led to ongoing asynchronous discussions about the things we said, for more elaboration and to expand on our thoughts.</p>



<p class="wp-block-paragraph">Recently, ShareGate&#8217;s <a href="https://sharegate.com/blog/author/rafael-spuldar">Rafael Spuldar</a> did a new blog post: <a href="https://sharegate.com/blog/5-it-goals-for-your-team-when-they-free-up-time-through-automation">5 IT Goals for Your Team When They Free up Time &#8211; ShareGate</a>.</p>



<p class="wp-block-paragraph">Emily Mancini (<a rel="noreferrer noopener" href="https://twitter.com/eemancini" data-type="URL" data-id="https://twitter.com/eemancini" target="_blank">@eemancini</a>) and I had kicked around the topic and came up with the following list of ideas. Some made it into Rafael&#8217;s post, and others didn&#8217;t, so I figured I&#8217;d post our full list here. </p>



<p class="wp-block-paragraph">Let us know what you think in the comments!</p>



<ol class="wp-block-list" type="1" start="1">
<li><strong>Clean up AD/AAD data </strong>&#8211; In most cases, targeting content to the right people is based on AAD data. This data determines which people belong in particular Microsoft 365 Group, especially if they are dynamic groups. If the organization can actually rely on that data being correct, they can build out much more personalized experiences. In most organizations, not only is the data wrong, but everyone knows it&#8217;s wrong and they can’t rely on it. No one even tries to get it fixed because they think it’s pointless. Spending time improving this data provides many benefits.</li>



<li><strong>Focus on consultative customer service </strong>– If you’re like many IT departments, people don’t come to you for advice and assistance because they can’t get your time. Set up an informal (or formal) consulting capability for the organization. Let anyone in the organization get in touch during office hours to help them think through technical issues and starting solutions for themselves. This consultative focus can also become “market sensing”, in that it tells you what the organization is doing and what they need that you aren’t providing. Unless you have an amazing help desk, they probably don’t fulfill this role. Help desks tend to focus on solving immediate problems (which everyone wants them to do), and not longer-term efforts. If nothing else, it’s a different mindset.</li>



<li><strong>Think about places you could solve problems</strong> – Imagine going out into the organization and saying something like “We know you struggle with people filling out so many of these forms. We’d like to help you automate and improve the process.” You’d be heroes! In other words, do external outreach in the organization: offering the very services you have capacity for – for free! You’ll be amazed at the goodwill this engenders.</li>



<li><strong>Search analysis</strong> &#8211; Take a look at the searches people are doing and what happens. How many searches lead to useful results, and how many fail? A failed search is a content opportunity, and a successful search means that content matters and may need a review. That doesn&#8217;t mean that you in IT need to do that review, but you&#8217;d be providing great information to the content owners to make their content more valuable. You have the tools to do this in Microsoft 365, but many organizations simply don&#8217;t.</li>



<li><strong>Run the assessment tool &#8211; </strong>The <a href="https://pnp.github.io/pnpassessment/index.html">Microsoft 365 Assessment tool</a> was created to help people move from classic to modern and from on prem to the cloud originally. It&#8217;s been expanded to help people understand how Microsoft Syntex might be a valuable toolset. But as part of the output, it gives you information about how to improve your information architecture. You need to be at least a SharePoint Admin to run the scanner, so running it for your Site Owners is a way to give them a gift to improve their content and its structure.</li>
</ol>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="474" height="315" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/OIP.jpg?resize=474%2C315&#038;ssl=1" alt="" class="wp-image-46219" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/OIP.jpg?w=474&amp;ssl=1 474w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/OIP.jpg?resize=300%2C199&amp;ssl=1 300w" sizes="auto, (max-width: 474px) 100vw, 474px" /></figure>
</div>]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2023/01/26/goals-for-your-it-team-when-they-free-up-time-through-automation/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">46201</post-id>	</item>
		<item>
		<title>Inconvenient Caching Issue with Microsoft Lists</title>
		<link>https://sympmarc.com/2023/01/24/inconvenient-caching-issue-with-microsoft-lists/</link>
					<comments>https://sympmarc.com/2023/01/24/inconvenient-caching-issue-with-microsoft-lists/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Tue, 24 Jan 2023 21:30:28 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Microsoft Lists]]></category>
		<category><![CDATA[offline]]></category>
		<category><![CDATA[caching]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=46120</guid>

					<description><![CDATA[Recently, one of my clients pinged me because she wasn&#8217;t seeing any items in a list she knew had many items in it. She&#8217;s used the list many times in the past and she hadn&#8217;t changed any of the view settings. I did all the usual stuff: I could see all the items in the...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Recently, one of my clients pinged me because she wasn&#8217;t seeing any items in a list she knew had many items in it. She&#8217;s used the list many times in the past and she hadn&#8217;t changed any of the view settings.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="785" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/MissingListItems.png?resize=1024%2C785&#038;ssl=1" alt="" class="wp-image-46205" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/MissingListItems.png?resize=1024%2C785&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/MissingListItems.png?resize=300%2C230&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/MissingListItems.png?resize=768%2C589&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/MissingListItems.png?w=1146&amp;ssl=1 1146w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">I did all the usual stuff:</p>



<ul class="wp-block-list">
<li>Checked permissions on the site: She was a Site Owner, as we both thought.</li>



<li>Looked for broken inheritance on permissions &#8211; unlikely to be the problem, since she was a Site Owner.</li>



<li>Restarting the browser</li>



<li>Rebooting the machine</li>



<li>A bunch of random stuff</li>
</ul>



<p class="wp-block-paragraph">I could see all the items in the list, as could a few others.</p>



<p class="wp-block-paragraph">It seemed like such a simple thing, but nothing in my normal arsenal was solving the problem, so I turned to Bing.</p>



<p class="wp-block-paragraph">I quickly found this post on the Tech Community. A bunch of folks have had the same problem, so the thread was pretty long: <a href="https://techcommunity.microsoft.com/t5/sharepoint/sharepoint-caching-problems-with-lists/m-p/2870798">SharePoint Caching Problems with Lists &#8211; Microsoft Community Hub</a>.</p>



<p class="wp-block-paragraph">There were some&#8230;interesting&#8230;solutions there, but the winner is simple:</p>



<ul class="wp-block-list">
<li>Navigate to <strong>List Settings</strong>, then <strong>Advanced Settings</strong></li>



<li>Scroll down to <strong>Offline Client Availability</strong> &#8211; Odds are it will be set to <strong>Yes</strong>, so change it to <strong>No </strong>and save.</li>
</ul>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="195" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-2.png?resize=1024%2C195&#038;ssl=1" alt="" class="wp-image-46187" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-2.png?resize=1024%2C195&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-2.png?resize=300%2C57&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-2.png?resize=768%2C146&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-2.png?w=1365&amp;ssl=1 1365w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Go back to the list and you should see the items again. If you&#8217;d like to (and I&#8217;d suggest you do), go back in and set <strong>Offline Client Availability</strong> to <strong>Yes </strong>again.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="194" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-3.png?resize=1024%2C194&#038;ssl=1" alt="" class="wp-image-46188" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-3.png?resize=1024%2C194&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-3.png?resize=300%2C57&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-3.png?resize=768%2C145&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-3.png?w=1354&amp;ssl=1 1354w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">My theory is something happened to the caching for the list.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="600" height="160" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-1.png?resize=600%2C160&#038;ssl=1" alt="" class="wp-image-46186" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-1.png?w=600&amp;ssl=1 600w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2023/01/image-1.png?resize=300%2C80&amp;ssl=1 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure>
</div>


<p class="wp-block-paragraph">Guess what? The first post in the thread above was just about the same time offline mode rolled out for Microsoft Lists: <a href="https://www.windowscentral.com/microsoft-lists-gets-supercharged-performance-and-offline-support">Microsoft Lists gets &#8216;supercharged&#8217; performance and offline support | Windows Central</a>. If you didn&#8217;t know this ever happened, then it&#8217;s working exactly the way it&#8217;s supposed to work. If you lose Internet connectivity for a short time, you can continue working and the changes sync when you&#8217;re connected again. Heck, take your laptop to a desert island for a week and work on your list and your changes should sync when you plug in again.</p>



<p class="wp-block-paragraph">When I&#8217;ve built solutions which rely on caching in the past, I&#8217;ve usually hidden a &#8220;cache buster&#8221; button somewhere in them. Caching sometimes goes sideways on you, no matter how good your code is. The &#8220;cache buster&#8221; button here was an advanced setting few people would even think of, much less know about. It would be great if there were some indication on the screen somewhere that maybe something is awry, but no such luck.</p>



<p class="wp-block-paragraph">Leaving this here for anyone who might be as frustrated as I was, maybe even future me.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2023/01/24/inconvenient-caching-issue-with-microsoft-lists/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">46120</post-id>	</item>
		<item>
		<title>SharePoint Lists &#038; Libraries: Modern vs. Classic View Settings</title>
		<link>https://sympmarc.com/2023/01/06/sharepoint-lists-libraries-modern-vs-classic-view-settings/</link>
					<comments>https://sympmarc.com/2023/01/06/sharepoint-lists-libraries-modern-vs-classic-view-settings/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Fri, 06 Jan 2023 21:58:48 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Document Library]]></category>
		<category><![CDATA[modern]]></category>
		<category><![CDATA[lists]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=45998</guid>

					<description><![CDATA[SharePoint lists &#38; libraries: we all love &#8217;em. With multiple views, they are like little apps. [Why the heck do lists have a brand and logo but libraries don&#8217;t? And why aren&#8217;t the two just considered simply variations on a concept by Microsoft?] Do you find yourself using both the modern &#38; classic view settings?...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">SharePoint lists &amp; libraries: we all love &#8217;em. With multiple views, they are like little apps.</p>



<p class="wp-block-paragraph">[Why the heck do lists have a brand and logo but libraries don&#8217;t? And why aren&#8217;t the two just considered simply variations on a concept by Microsoft?]</p>



<p class="wp-block-paragraph">Do you find yourself using both the modern &amp; classic view settings? If so, why do you continue to use the classic view settings? I&#8217;m building a list (ha!) for the Microsoft folks. I&#8217;m after feedback about view settings in particular, but anything you find yourself returning to the classic settings UIs for regularly would be helpful.</p>



<p class="wp-block-paragraph">For example: I go to the classic view settings to display the Title in libraries or to create a &#8220;folderless&#8221; view. </p>



<p class="wp-block-paragraph">Here&#8217;s what I&#8217;ve collected so far. Please reply in the comments and let me know what we&#8217;re missing! I&#8217;ll keep adding to this post as I hear from more folks. You can help by spreading the word by amplifying my posts on <a rel="noreferrer noopener" href="https://twitter.com/sympmarc/status/1611469126156881920" data-type="URL" data-id="https://twitter.com/sympmarc/status/1611469126156881920" target="_blank">Twitter</a>, <a rel="noreferrer noopener" href="https://mas.to/@sympmarc/109644318306476256" data-type="URL" data-id="https://mas.to/@sympmarc/109644318306476256" target="_blank">Mastodon</a>, and/or <a rel="noreferrer noopener" href="https://www.facebook.com/marc.d.anderson/posts/pfbid02Yn7EMTiiDraPEHkzmMh32s2QxpstnChA2q6pxKknX2HK7vfFaahV3vT5KrVDZxy6l" data-type="URL" data-id="https://www.facebook.com/marc.d.anderson/posts/pfbid02Yn7EMTiiDraPEHkzmMh32s2QxpstnChA2q6pxKknX2HK7vfFaahV3vT5KrVDZxy6l" target="_blank">Facebook</a>. I&#8217;m consolidating and rewording for consistency &#8211; my apologies if I mangle what any of you said. Just let me know if I&#8217;ve missed anything!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">List Settings</h2>



<ul class="wp-block-list">
<li>Manage Content Types (Order, Field Hidden)</li>



<li>Access to field to see internal name in the url parameters</li>



<li>Manage View Settings</li>



<li>Reindexing List &#8220;if you want to include them in the Search&#8221;</li>



<li>Versioning</li>



<li>Item permission &#8220;Create items and edit items that were created by the user&#8221;</li>



<li>To deploy add-ins / command extensions to the app catalog. You can&#8217;t deploy these in the modern view.</li>



<li>Managing permissions &#8211; Permissions for the list/library are much clearer. The Shared/Shared With is too awkward.</li>



<li>Manage files with no checked in version</li>



<li>Setting Column Default Values</li>
</ul>



<h2 class="wp-block-heading">View Settings</h2>



<ul class="wp-block-list">
<li>Display the Title in libraries</li>



<li>Create a &#8220;folderless&#8221; view</li>



<li>Add the list ID field to a view</li>



<li>When I need to &#8220;Display items in batches of the specified size&#8221; and defeat the endless, maddening modern scroll-delay-scroll-delay nonsense for large libraries.</li>



<li>Easier to sort column order, filtering, grouping and sorting on one single screen, as opposed to clicking around on modern. Usually for when you setup a list which is more than a few columns.</li>



<li>You import from Excel anything more than 5 columns you are going to want to sort out without horizontal scrolling and dragging and dropping, etc.</li>



<li>For grouping/filtering, I find the classic UX easier than JSON editing [Several people have said something similar]</li>



<li>Classic for lots of reasons (reindex, permissions, versioning, open behavior, etc.)</li>



<li>Fields that are not displayed but are used in formulas. I find it more reliable to select them in the classic view settings.</li>



<li>Display items in batches of the specified size</li>



<li>Displaying the version number in the view</li>



<li>Getting the URL of the view [This one bugs me, too. When you switch views, you get a URL like /AllItems.aspx?viewid=97fbd6f4-82a9-4916-9a1b-65ce28328173. You can&#8217;t know what the actual view page is without editing the view &#8211; i.e., going into the classic view settings.]</li>



<li>Navigating up the content type hierarchy</li>



<li>Group by collapsed </li>



<li>Multiple group by</li>



<li>I think the docicon field is only available in classic</li>



<li>Adding a site field (perhaps my knowledge is outdated here)</li>



<li>Sums (Totals)</li>



<li>Calendar stuff for me. If I remember correctly (because I&#8217;ve moved to other stuff) surveys and task views are also better in classic</li>



<li>I don’t think I see “display the version number of a file.” Drives me nuts that I can add Promoted State to a view in “modern,” but not Version. I like to see both for the Site Pages library.</li>
</ul>



<h2 class="wp-block-heading">Other</h2>



<ul class="wp-block-list">
<li>Creating new Document Sets doesn&#8217;t work in modern interface.</li>



<li>Mapping a geolocation field in a list. Cannot be done in modern SPO</li>



<li>To deploy add-ins / command extensions to the app catalog.</li>



<li>Editing columns in a content type. SharePoint knows there&#8217;s a gap because it gives me a link to switch.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2023/01/06/sharepoint-lists-libraries-modern-vs-classic-view-settings/feed/</wfw:commentRss>
			<slash:comments>10</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">45998</post-id>	</item>
		<item>
		<title>An Unfortunate `API access` UI in the SharePoint Admin Center</title>
		<link>https://sympmarc.com/2022/12/12/an-unfortunate-api-access-ui-in-the-sharepoint-admin-center/</link>
					<comments>https://sympmarc.com/2022/12/12/an-unfortunate-api-access-ui-in-the-sharepoint-admin-center/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 12 Dec 2022 22:41:11 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Microsoft Graph]]></category>
		<category><![CDATA[Orchestry]]></category>
		<category><![CDATA[administration]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[user interface]]></category>
		<category><![CDATA[PnP]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=45819</guid>

					<description><![CDATA[Orchestry is a partner of ours at Sympraxis. (Ask us about them anytime!) We love their toolset and recommend them frequently to our clients to improve their governance and provisioning activities. The stuff they build is incredibly powerful &#8211; and reliable. That&#8217;s why I was really surprised when I added the Orchestry People List Web...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph"><a rel="noreferrer noopener" href="https://www.orchestry.com/" data-type="URL" data-id="https://www.orchestry.com/" target="_blank">Orchestry </a>is a partner of ours at Sympraxis. (Ask us about them anytime!) We love their toolset and recommend them frequently to our clients to improve their governance and provisioning activities. The stuff they build is incredibly powerful &#8211; and reliable.</p>



<p class="wp-block-paragraph">That&#8217;s why I was really surprised when I added the <strong>Orchestry People List Web Part</strong> to a site home page and I didn&#8217;t see the actual people, just what looked like placeholders for them. The counts were right, but no details. (This Web Part is better than the out of the box <strong>People Web Part</strong> because you can set it to show Site Owners and/or Site Members automagically.)</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="712" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-2.png?resize=1024%2C712&#038;ssl=1" alt="" class="wp-image-45824" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-2.png?resize=1024%2C712&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-2.png?resize=300%2C209&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-2.png?resize=768%2C534&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-2.png?w=1171&amp;ssl=1 1171w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">As I am wont to do, I asked my friends at Orchestry what the scoop was. Turns out, it wasn&#8217;t an Orchestry problem. The issue was rooted in a really bad user interface in the SharePoint Admin Center.</p>



<p class="wp-block-paragraph">Here&#8217;s what happened. Way back in March, I installed the <a rel="noreferrer noopener" href="https://microsoft-search.github.io/pnp-modern-search/" data-type="URL" data-id="https://microsoft-search.github.io/pnp-modern-search/" target="_blank">PnP Modern Search Web Parts</a>. They are just about my favorite tools to use with SharePoint, and I install them as soon as I start working in a tenant. In many cases, I don&#8217;t bother the Global Admin to approve the Microsoft Graph permissions for PnP Modern Search, because we can accomplish what we need just using SharePoint Search.</p>



<p class="wp-block-paragraph">In the screenshot below, you can see the pending request for PnP Modern Search (red box) as well as the Approved requests which Orchestry needed (green box).</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="809" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-4.png?resize=1024%2C809&#038;ssl=1" alt="" class="wp-image-45826" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-4.png?resize=1024%2C809&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-4.png?resize=300%2C237&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-4.png?resize=768%2C607&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-4.png?resize=1536%2C1214&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-4.png?w=1920&amp;ssl=1 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The unfortunate part of his UI is because PnP Modern Search &#8220;asked&#8221; for <strong>User.Read.All</strong> first, it still &#8220;owns&#8221; that request.</p>



<p class="wp-block-paragraph">What we should have seen in the UI was four requests for Orchestry, like so:</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="499" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-5.png?resize=1024%2C499&#038;ssl=1" alt="" class="wp-image-45827" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-5.png?resize=1024%2C499&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-5.png?resize=300%2C146&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-5.png?resize=768%2C375&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-5.png?resize=1536%2C749&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-5.png?resize=2048%2C999&amp;ssl=1 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Because PnP Modern Search had already asked for <strong>User.Read.All</strong>, there were only three. The Global Admin approved the three and we called it a day.</p>



<p class="wp-block-paragraph">Note what happens in that UI after the requests are approved. We lose all the info about which app needed the permissions and when they were granted. No bueno.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="190" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-9.png?resize=1024%2C190&#038;ssl=1" alt="" class="wp-image-45836" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-9.png?resize=1024%2C190&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-9.png?resize=300%2C56&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-9.png?resize=768%2C143&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-9.png?resize=1536%2C286&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-9.png?w=1920&amp;ssl=1 1920w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Leaving the security implications of all this aside (but keeping in mind this UI exists only for security purposes!), there&#8217;s no way for us to see what solution requested the API access, when it was requested, or who approved it after the fact.</p>



<p class="wp-block-paragraph">Believe it or not, the solution to fix the Orchestry Web Part issues was to approve the <strong>User.Read.All</strong> permission for PnP Moden Search. That makes sense, right? (No, no it doesn&#8217;t at all.)</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="412" height="24" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-10.png?resize=412%2C24&#038;ssl=1" alt="" class="wp-image-45845" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-10.png?w=412&amp;ssl=1 412w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/12/image-10.png?resize=300%2C17&amp;ssl=1 300w" sizes="auto, (max-width: 412px) 100vw, 412px" /></figure>



<p class="wp-block-paragraph">Final Score:</p>



<ul class="wp-block-list">
<li>Orchestry 1</li>



<li>Microsoft 0</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/12/12/an-unfortunate-api-access-ui-in-the-sharepoint-admin-center/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">45819</post-id>	</item>
		<item>
		<title>Find All the Stream (Classic) Web Parts During Migration to Stream in SharePoint</title>
		<link>https://sympmarc.com/2022/11/28/find-all-the-stream-classic-web-parts-during-migration-to-stream-in-sharepoint/</link>
					<comments>https://sympmarc.com/2022/11/28/find-all-the-stream-classic-web-parts-during-migration-to-stream-in-sharepoint/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 28 Nov 2022 19:32:07 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Web Parts]]></category>
		<category><![CDATA[PnP.PowerShell]]></category>
		<category><![CDATA[Stream in SharePoint]]></category>
		<category><![CDATA[Stream Classic]]></category>
		<category><![CDATA[Get-PnPPageComponent]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=45712</guid>

					<description><![CDATA[Another day, another opportunity to spackle the walls of SharePoint where there&#8217;s a hole. Wouldn&#8217;t it be great if you could go somewhere in the SharePoint Admin Center to see all the places you&#8217;ve used a particular Web Part in pages? Well, you can&#8217;t, so PowerShell. PnP.PowerShell, in fact. You may be considering migrating your...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Another day, another opportunity to spackle the walls of SharePoint where there&#8217;s a hole. Wouldn&#8217;t it be great if you could go somewhere in the SharePoint Admin Center to see all the places you&#8217;ve used a particular Web Part in pages? Well, you can&#8217;t, so PowerShell. <a href="https://pnp.github.io/powershell/index.html" data-type="URL" data-id="https://pnp.github.io/powershell/index.html" target="_blank" rel="noreferrer noopener">PnP.PowerShell,</a> in fact.</p>



<p class="wp-block-paragraph">You may be considering migrating your videos from <a rel="noreferrer noopener" href="https://learn.microsoft.com/en-us/stream/overview" data-type="URL" data-id="https://learn.microsoft.com/en-us/stream/overview" target="_blank">Stream Classic</a> to<a rel="noreferrer noopener" href="https://learn.microsoft.com/en-us/stream/streamnew/new-stream" data-type="URL" data-id="https://learn.microsoft.com/en-us/stream/streamnew/new-stream" target="_blank"> Stream in SharePoint</a>. After all, it&#8217;s got to happen sooner or later, and the migration tool is now available for everyone. At <a rel="noreferrer noopener" href="https://sympraxisconsulting.com/" data-type="URL" data-id="https://sympraxisconsulting.com/" target="_blank">Sympraxis</a>, we&#8217;ve started to help our clients with these migrations, usually in the context of other work.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1000" height="560" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-3.png?resize=1000%2C560&#038;ssl=1" alt="" class="wp-image-45718" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-3.png?w=1000&amp;ssl=1 1000w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-3.png?resize=300%2C168&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-3.png?resize=768%2C430&amp;ssl=1 768w" sizes="auto, (max-width: 1000px) 100vw, 1000px" /></figure>



<p class="wp-block-paragraph">One thing you&#8217;re likely to want to know is where you have used the <a rel="noreferrer noopener" data-type="URL" data-id="https://support.microsoft.com/en-us/office/use-the-stream-classic-web-part-b97fa87c-1337-4271-a059-17f0d2b26e8b" href="https://support.microsoft.com/en-us/office/use-the-stream-classic-web-part-b97fa87c-1337-4271-a059-17f0d2b26e8b" target="_blank">Stream (Classic) Web Part</a> in your pages. Depending on how you do the migration, it is likely going to be a good idea to visit many of those pages to either switch to the <a rel="noreferrer noopener" data-type="URL" data-id="https://support.microsoft.com/en-au/office/use-the-document-library-web-part-a9dfecc3-2050-4528-9f00-2c5afc5731b0" href="https://support.microsoft.com/en-au/office/use-the-document-library-web-part-a9dfecc3-2050-4528-9f00-2c5afc5731b0" target="_blank">Document Library Web Part</a> or at least validate the <strong>Stream (Classic) Web Parts </strong>are working.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="494" height="663" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-2.png?resize=494%2C663&#038;ssl=1" alt="" class="wp-image-45717" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-2.png?w=494&amp;ssl=1 494w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-2.png?resize=224%2C300&amp;ssl=1 224w" sizes="auto, (max-width: 494px) 100vw, 494px" /></figure>
</div>


<p class="wp-block-paragraph">Just as I did when I upgraded from the PnP Modern Search Web Parts v3 to v4 (See:  <a href="https://sympmarc.com/2021/04/06/upgrading-the-pnp-modern-search-web-parts-from-v3-to-v4-where-are-they/">Upgrading the PnP Modern Search Web Parts from v3 to v4: Where are they?)</a>, I turned to PowerShell. I grabbed that same script and buffed it up a bit to find the <strong>Stream (Classic) Web Parts</strong> this time.</p>



<p class="wp-block-paragraph">I took a bit of a different approach with this iteration, though. Rather than using search to find the pages with the Web Parts (I found it was missing some), I switched to using <a href="https://pnp.github.io/powershell/cmdlets/Get-PnPPageComponent.html">Get-PnPPageComponent | PnP PowerShell</a>. This allows me to get the Web Parts (aka Page Components) in a page directly.</p>



<p class="wp-block-paragraph">The script below is what I used. I&#8217;ve included some comments to indicate where you might choose to do things a bit differently, depending on your environment and your goals. I&#8217;m just outputting the info to the console, as the tenant where I&#8217;m working isn&#8217;t that dense. You may choose to output to a CSV file or something else.</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">Want to know more about migrating to Stream in SharePoint? Watch the recording of our <a data-type="URL" data-id="https://sympraxisconsulting.com/ask-sympraxis/" rel="noreferrer noopener" href="https://sympraxisconsulting.com/ask-sympraxis/" target="_blank">AskSympraxis</a> from November 30, 2022: <a rel="noreferrer noopener" href="https://sympraxisconsulting.com/2022/11/30/migrating-from-stream-classic/" target="_blank">Migrating from Stream Classic</a>.</p>
</blockquote>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell"># findStreamClassicWebParts.ps1 - Inventory Stream Classic Web Parts to ensure they still work after migration

# Connect to your tenant here. This should be the only change you need to make to use this script.
$tenant = "sympmarc"
$adminConnection = Connect-PnPOnline -Url "https://$($tenant)-admin.sharepoint.com" -Interactive  -ReturnConnection

# Get all the sites to check
# Checking all the Communication Sites and Team Sites
# $sites = Get-PnPTenantSite | Where-Object { $_.Template -eq "SITEPAGEPUBLISHING#0" -or $_.Template -eq "GROUP#0" }

# Checking sites associated with the Intranet (Home Site)
$sites = Get-PnPHubSiteChild -Connection $adminConnection -Identity "https://$($tenant).sharepoint.com" | Sort-Object

# You may choose to exclude some subsets of sites
$filteredSites = $sites | Where-Object { $_ -eq "https://$($tenant).sharepoint.com/sites/Exec-BoardRelations" }

foreach ($site in $filteredSites) {
    Write-Host -BackgroundColor White -ForegroundColor Black "Looking in $($site)"

    # Get the pages
    $siteConnection = Connect-PnPOnline -Url $site -Interactive -ReturnConnection
    $pages = Get-PnPListItem -Connection $siteConnection -List "Site Pages" | Where-Object { $_.FieldValues.File_x0020_Type -eq "aspx" }

    foreach($page in $pages) {
        #Write-Host -BackgroundColor White -ForegroundColor Black "Checking $($page.FieldValues.FileLeafRef)"
        $streamPage = Get-PnPPageComponent -Connection $siteConnection -Page $page.FieldValues.FileLeafRef | Where-Object { $_.Title -eq "Stream" } | Select-Object Title, WebPartId
        if($streamPage) {
            Write-Host -BackgroundColor Green -ForegroundColor Black "&gt;&gt;&gt; Found Stream Classic Web Parts in this page: $($page.FieldValues.Title) - $($page.FieldValues.FileDirRef)"
        }

    }

}</code></pre>



<h2 class="wp-block-heading">Addendum &#8211; 2023-07-20</h2>



<p class="wp-block-paragraph">I hot a ping from my friend Ivor Davies (<a rel="noreferrer noopener" href="https://twitter.com/IvorDavies5" data-type="URL" data-id="https://twitter.com/IvorDavies5" target="_blank">@IvorDavies5</a>) asking how to output these results to a CSV file. Here&#8217;s a version of the same script which outputs a CSV file called <code>ModernSearchWebPartsUpgradev3tov4.csv</code> containing the <code>SiteUrl</code> and <code>PageUrl</code> for each &#8220;hit&#8221;.</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell line-numbers"># ModernSearchWebPartsUpgradev3tov4.ps1 - Inventory PnP Modern Search Web Parts usage to upgrade from v3 to v4

# Connect to your tenant here. This should be the only change you need to make to use this script other than
# the output path for the CSV in the last line.
$tenant = "sympmarc"
Connect-PnPOnline -Url https://$($tenant)-admin.sharepoint.com -Interactive

# You can get the Ids for the v3 Web Parts by adding them to a page and running:
# Get-PnPClientSideComponent -Page "page-name" | Where-Object { Title -ne $null } | Select-Object Title, WebPartId

# Title            WebPartId
# -----            ---------
# Search Filters   e899ac12-9256-4c8d-a8ad-dbd20fc459c3
# Search Box       096b96cc-8a44-41fa-9b4d-c0ab2ab2a779
# Search Verticals 9d441773-f735-46a3-9ca0-9e2eb4bef203
# Search Results   42ad2740-3c60-49cf-971a-c44e33511b93

$webPartIds = @(
    "e899ac12-9256-4c8d-a8ad-dbd20fc459c3",
    "096b96cc-8a44-41fa-9b4d-c0ab2ab2a779",
    "9d441773-f735-46a3-9ca0-9e2eb4bef203",
    "42ad2740-3c60-49cf-971a-c44e33511b93"
    )

# Get all the sites in the tenant
$sites = Get-PnPTenantSite

# You may choose to exclude some subsets of sites
$filteredSites = $sites #| Where-Object { $_.Url -eq 'https://$($tenant).sharepoint.com/sites/DemoSite' } 

$output = @()

foreach ($site in $filteredSites) {

    # Build the query
    if($site.Url | Select-String "/sites/") {
        $query = "Path:$($site.Url) AND FileExtension:aspx AND ($($webPartIds -join " OR "))"
    } else {
        # Exclude /sites/* if looking in the root site
        $query = "Path:$($site.Url) -Path:$($site.Url)/sites/ AND FileExtension:aspx AND ($($webPartIds -join " OR "))"
    }
    #Write-Host -BackgroundColor White -ForegroundColor Black "Looking in $($site.Url)" # $($query)"

    # Submit the query
    $pages = Submit-PnPSearchQuery -Query $query -All -RelevantResults -ErrorAction SilentlyContinue | Select-Object OriginalPath 
    # If there are results, display them
    if ($pages) {
        Write-Host -BackgroundColor White -ForegroundColor Black "Found v3 Web Parts in this site: $($site.Url)" # $($query)"
        foreach ($page in $pages) {
            Write-Host -BackgroundColor Green -ForegroundColor Black ">>> Found Web Parts in this page: $($page.OriginalPath)"                
            $output += [PSCustomObject]@{
                SiteUrl = $site.Url
                PageUrl = $page.OriginalPath
            }
        }
    }

}

$output | Export-Csv -Path "./ModernSearchWebPartsUpgradev3tov4.csv" -NoTypeInformation
</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/11/28/find-all-the-stream-classic-web-parts-during-migration-to-stream-in-sharepoint/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">45712</post-id>	</item>
		<item>
		<title>Updating User Profile Properties with the `Date no year` Format</title>
		<link>https://sympmarc.com/2022/11/15/updating-user-profile-properties-with-the-date-no-year-format/</link>
					<comments>https://sympmarc.com/2022/11/15/updating-user-profile-properties-with-the-date-no-year-format/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Tue, 15 Nov 2022 22:23:23 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[User Profile]]></category>
		<category><![CDATA[PnP]]></category>
		<category><![CDATA[Modern Search Web Parts]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=45578</guid>

					<description><![CDATA[When you set a User Profile property with PowerShell, and it has a format of Date no year, how should you pass in the values? In other words, do you pass in the year, and it just gets lopped off or do you just pass in the day, like &#8220;November 10&#8221;? In many cases you...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">When you set a User Profile property with PowerShell, and it has a format of <code>Date no year</code>, how should you pass in the values? In other words, do you pass in the year, and it just gets lopped off or do you just pass in the day, like &#8220;November 10&#8221;?</p>



<p class="wp-block-paragraph">In many cases you won&#8217;t actually care that much. But you should want to know how the values are stored so it doesn&#8217;t bite you later.</p>



<p class="wp-block-paragraph">Out of the box, <code>SPS-Birthday</code> is the only User Profile property which uses the <code>Date no year</code> format. But you may decide to add others.</p>



<p class="wp-block-paragraph">When you run a line of PowerShell like this, the value stored in the <code>SPS-Birthday</code> field is &#8220;11/15/20<strong>01</strong> 12:00:00 AM&#8221;</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">Set-PnPUserProfileProperty `
  -Account "me@sympmarc.com" `
  -PropertyName "SPS-Birthday" `
  -Value "11/15/2001"</code></pre>



<p class="wp-block-paragraph">When you run this next line (today), the value stored is &#8220;11/15/20<strong>22</strong> 12:00:00 AM&#8221;</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">Set-PnPUserProfileProperty `
  -Account "me@sympmarc.com" `
  -PropertyName "SPS-Birthday" `
  -Value "November 15"</code></pre>



<p class="wp-block-paragraph">Note that the year stored is different in each case: 2001 vs. 2022.</p>



<p class="wp-block-paragraph">We can prove that by checking the values afterward with this line:</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">Export-PnPUserProfile -LoginName "me@sympmarc.com"</code></pre>



<p class="wp-block-paragraph">In the user interface (UI), in both the cases above, the result is:</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="632" height="51" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image.png?resize=632%2C51&#038;ssl=1" alt="" class="wp-image-45614" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image.png?w=632&amp;ssl=1 632w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image.png?resize=300%2C24&amp;ssl=1 300w" sizes="auto, (max-width: 632px) 100vw, 632px" /></figure>



<p class="wp-block-paragraph">What this proves in the <code>Date no year</code> format <strong><em>stores</em></strong> the value as a full date/time, but it is <strong><em>displayed</em></strong> without the year.</p>



<p class="wp-block-paragraph">The reason this mattered to me was I was trying to use the <a rel="noreferrer noopener" href="https://microsoft-search.github.io/pnp-modern-search/" data-type="URL" data-id="https://microsoft-search.github.io/pnp-modern-search/" target="_blank">PnP Modern Search Web Parts</a> to display people with birthdays today. To do that, I needed to filter on a Managed Property mapped to the <code>People:SPS-Birthday</code> Crawled Property.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="99" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-1.png?resize=1024%2C99&#038;ssl=1" alt="" class="wp-image-45615" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-1.png?resize=1024%2C99&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-1.png?resize=300%2C29&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-1.png?resize=768%2C74&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-1.png?resize=1536%2C148&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/11/image-1.png?w=1702&amp;ssl=1 1702w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">Once the <code>RefinableDate02</code> Managed Property was set up, I could add a query like this:</p>



<pre class="wp-block-code"><code lang="javascript" class="language-javascript">RefinableDate02:"2022-{CurrentMonth}-{CurrentDate}T00:00:00Z"</code></pre>



<p class="wp-block-paragraph">Note that the year needs to be a constant in order for the filter to work. We might have two people with birthdays on November 15, but in the years 1954 and 2001. If we store the actual year with in the <code>SPS-Birthday</code> property, then our filter can&#8217;t work: there&#8217;s no wildcard-type mechanism in KQL we can use to say &#8220;ignore the year&#8221;. In the old DOS days, we could do something like:<strong> </strong><code>????-{CurrentMonth}-{CurrentDate}T00:00:00Z</code> to say &#8220;any four characters&#8221;, but KQL doesn&#8217;t support that.</p>



<p class="wp-block-paragraph">So, the key here is to choose a year and set all the birthdays to have that constant year. In this case, we chose 2000. This also ensures data privacy, as someone with a little PowerShell knowledge could retrieve people&#8217;s &#8220;real&#8221; birthdays.</p>



<p class="wp-block-paragraph">If we didn&#8217;t choose a constant year, but instead passed in &#8220;November 15&#8221; and expected that the year wasn&#8217;t stored, our filter would break when 2023 rolls around.</p>



<p class="wp-block-paragraph">The filter ended up looking like this:</p>



<pre class="wp-block-code"><code lang="javascript" class="language-javascript">RefinableDate02:"2000-{CurrentMonth}-{CurrentDate}T00:00:00Z"</code></pre>



<p class="wp-block-paragraph">Now we&#8217;ve got a working solution which is robust enough to last over the years. A little detective work was well worth the effort.</p>



<h2 class="wp-block-heading">Resources</h2>



<ul class="wp-block-list">
<li><a href="https://sharepoint.stackexchange.com/questions/288831/is-it-possible-to-extract-and-or-set-users-birthday-with-a-powershell-script">sharepoint online &#8211; Is it possible to extract and/or set users&#8217; birthday with a PowerShell script? &#8211; SharePoint Stack Exchange</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/11/15/updating-user-profile-properties-with-the-date-no-year-format/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">45578</post-id>	</item>
		<item>
		<title>Taking Advantage of the Content Type Inheritance Model in SharePoint</title>
		<link>https://sympmarc.com/2022/10/26/taking-advantage-of-the-content-type-inheritance-model-in-sharepoint/</link>
					<comments>https://sympmarc.com/2022/10/26/taking-advantage-of-the-content-type-inheritance-model-in-sharepoint/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Wed, 26 Oct 2022 16:12:00 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Content Types]]></category>
		<category><![CDATA[information architecture]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=45450</guid>

					<description><![CDATA[In my recent post Using Content Types in SharePoint’s Site Pages Library, I mentioned using interstitial Content Types, but didn&#8217;t explain what I meant. Taking advantage of the Content Type hierarchy is an important part of a powerful information architecture, regardless whether you&#8217;re working with documents, list items, pages, etc. I&#8217;ve talked about this in...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">In my recent post <a href="https://sympmarc.com/2022/10/20/using-content-types-in-sharepoints-site-pages-library/">Using Content Types in SharePoint’s Site Pages Library</a>, I mentioned using interstitial Content Types, but didn&#8217;t explain what I meant.</p>



<p class="wp-block-paragraph">Taking advantage of the Content Type hierarchy is an important part of a powerful information architecture, regardless whether you&#8217;re working with documents, list items, pages, etc. I&#8217;ve talked about this in conference sessions for years, but it doesn&#8217;t seem like I have a blog post about it.</p>



<p class="wp-block-paragraph">Let&#8217;s use this slide from one of those sessions to illustrate the points.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="816" height="459" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/10/image-3.png?resize=816%2C459&#038;ssl=1" alt="" class="wp-image-45451" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/10/image-3.png?w=816&amp;ssl=1 816w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/10/image-3.png?resize=300%2C169&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/10/image-3.png?resize=768%2C432&amp;ssl=1 768w" sizes="auto, (max-width: 816px) 100vw, 816px" /></figure>



<p class="wp-block-paragraph">SharePoint gives us the <strong>Document </strong>Content Type &#8220;out of the box&#8221;. Every Document Library you create in SharePoint (assuming you don&#8217;t use some fancy template) has the <strong>Document </strong>Content Type enabled for it. So many people just start dumping their files into the Documents (aka Shared Documents) library with every file becoming a <strong>Document</strong> and then wonder why no magic is happening.</p>



<p class="wp-block-paragraph">In the example above, I have two <a rel="noreferrer noopener" href="https://www.dictionary.com/browse/interstice" data-type="URL" data-id="https://www.dictionary.com/browse/interstice" target="_blank">interstitial</a> Content Types. (Interstitial &#8211; or interstices &#8211; are spaces between things.) I create these interstitial Content Types, but never enable them in a Document Library; they generally only exist to create a strong hierarchy.</p>



<ul class="wp-block-list"><li><strong>Org Base Document</strong> &#8211; When I start setting up the information architecture in a tenant, I almost always create a Content Type like this, usually putting the name of the organization in place of &#8220;Org&#8221;. You may never touch this Content Type again after you create it, but I&#8217;ve had it save my bacon multiple times when someone says something like, &#8220;let&#8217;s add X to ALL our custom Content Types&#8221;. </li><li><strong>Contract </strong>&#8211; This is also a Content Type which I may not ever enable in a Document Library, but it allows me to search for Content Types which inherit from it.</li></ul>



<p class="wp-block-paragraph">These days, I&#8217;m most likely to create <strong>Org Base Document</strong> and <strong>Contract </strong>at the tenant level (in the Content Type Hub, via the Content Type Gallery in the SharePoint Admin Center). We use that enterprise level capability for Content Types which *may* be used in one or more sites. It gives us a central place to manage our information architecture &#8211; where it makes sense to do so. Since I&#8217;m going to inherit from <strong>Org Base Document</strong> for all my custom <strong>Document</strong>-derived Content Types, I create it at the tenant level.</p>



<p class="wp-block-paragraph">When we set up a custom Content Type and inherit from an existing Content Type, there&#8217;s a brilliant logic under the covers. The out of the box <strong>Document </strong>Content Type at the tenant level has its <code>ContentTypeId =0x0101</code>. <code>0x0101</code> represents a Document in every tenant. (See: <a href="https://learn.microsoft.com/en-us/previous-versions/office/developer/sharepoint-2010/ms452896(v=office.14)">Base Content Type Hierarchy | Microsoft Learn</a> for the full list of base Content Types in SharePoint.)</p>



<p class="wp-block-paragraph">When I create the <strong>Org Base Document</strong> Content Type in the Content Type Gallery, it gets a <code>ContentTypeId</code> which starts with <strong>0x0101</strong> and then has a unique GUID-like part. Here is the full hierarchy tree for the Content Types with their <code>ContentTypeIds</code> in my Sympmarc tenant:</p>



<figure class="wp-block-table"><table><thead><tr><th>Content Type</th><th>Inherits from</th><th>ContentTypeId</th></tr></thead><tbody><tr><td></td><td></td><td></td></tr><tr><td>Item</td><td>[System]</td><td><code>0x01</code></td></tr><tr><td>Document</td><td>Item</td><td><code>0x0101</code></td></tr><tr><td>Sympmarc Base Document</td><td>Document</td><td><code>0x0101002FBDBE6A1A315F438E41F10681463A61</code></td></tr><tr><td>Contract</td><td>Sympmarc Base Document</td><td><code>0x0101002FBDBE6A1A315F438E41F10681463A6101</code></td></tr><tr><td>Employment Contract</td><td>Contract</td><td><code>0x0101002FBDBE6A1A315F438E41F10681463A610101</code></td></tr><tr><td>Real Estate Contract</td><td>Contract</td><td><code>0x0101002FBDBE6A1A315F438E41F10681463A610102</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph">As you can see, the inheritance model makes a lot of sense. Each inheritance appends something unique to the <code>ContentTypeId</code>. Once I&#8217;ve enabled the appropriate Content Types in Document Libraries (in this case), I can take advantage of the hierarchy using queries like:</p>



<figure class="wp-block-table"><table><thead><tr><th>Intent</th><th>Query</th></tr></thead><tbody><tr><td>Show me all my custom Content Type -based documents</td><td><code>ContentTypeId:0x0101002FBDBE6A1A315F438E41F10681463A61*</code></td></tr><tr><td>Show me all the Contracts</td><td><code>ContentTypeId:0x0101002FBDBE6A1A315F438E41F10681463A6101*</code></td></tr><tr><td>Show me all the Employment Contracts</td><td><code>ContentTypeId:0x0101002FBDBE6A1A315F438E41F10681463A610101*</code></td></tr></tbody></table></figure>



<p class="wp-block-paragraph"><strong>Show me all the Contracts</strong> is the really powerful query here, IMO. By requesting all content with a <code>ContentTypeId</code> which <strong><em>starts with</em></strong> the <strong>Contract </strong>Content Type&#8217;s <code>ContentTypeId</code> (That&#8217;s what the asterisk does for us.), it doesn&#8217;t matter if I create a new Content Type inheriting from <strong>Contract</strong>. The query will automagically continue to do what I want because the next Content Type inheriting from <strong>Contract </strong>will have a <code>ContentTypeId</code> of <code>0x0101002FBDBE6A1A315F438E41F10681463A6101<strong>03</strong></code>. In other words, the <code>ContentTypeId:0x0101002FBDBE6A1A315F438E41F10681463A6101*</code> query will just pick that new content up for me without any adjustment.</p>



<p class="wp-block-paragraph">Pair this good information architecture with the <a rel="noreferrer noopener" href="https://microsoft-search.github.io/pnp-modern-search/" data-type="URL" data-id="https://microsoft-search.github.io/pnp-modern-search/" target="_blank">PnP Modern Search</a> Web Parts, and you can build search-driven experiences which are highly specific, easily maintained, and extremely reliable. This is NOT &#8220;just Google&#8221;. It&#8217;s you building solutions to match the user stories and content needs in YOUR organization.</p>



<p class="wp-block-paragraph">If you extrapolate from these examples, you probably can imagine some potential hierarchies in your information architecture which may help you create more powerful solutions for your end users. I&#8217;m curious about your thoughts, so please comment if you have examples.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/10/26/taking-advantage-of-the-content-type-inheritance-model-in-sharepoint/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">45450</post-id>	</item>
		<item>
		<title>Using Content Types in SharePoint&#8217;s Site Pages Library</title>
		<link>https://sympmarc.com/2022/10/20/using-content-types-in-sharepoints-site-pages-library/</link>
					<comments>https://sympmarc.com/2022/10/20/using-content-types-in-sharepoints-site-pages-library/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 20 Oct 2022 16:51:57 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[information architecture]]></category>
		<category><![CDATA[site pages]]></category>
		<category><![CDATA[Content Types]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44755</guid>

					<description><![CDATA[In a modern SharePoint site, we only get one Site Pages library. We can&#8217;t create additional libraries which contain aspx pages which act like that special Site Pages library. If we could, we could meet a whole lot of interesting use cases, but it&#8217;s not an option. One thing we *can* do is add additional...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">In a modern SharePoint site, we only get one Site Pages library. We can&#8217;t create additional libraries which contain aspx pages which act like that special Site Pages library. If we could, we could meet a whole lot of interesting use cases, but it&#8217;s not an option.</p>



<p class="wp-block-paragraph">One thing we *can* do is add additional Content Types to the Site Pages library. In many cases, I&#8217;ve seen people add a new column or two to the Site Pages library, but I don&#8217;t often see them adding additional Content Types. By using Content Types, you can take advantage of a richer information architecture which can span multiple sites, if needed.</p>



<p class="wp-block-paragraph">Content Types are one of the primary building blocks for SharePoint, and I can&#8217;t gush about them enough. I do entire conference sessions just about Content Types! If you&#8217;re not using Content Types, you&#8217;re not holding SharePoint right, if you ask me.</p>



<p class="wp-block-paragraph">I won&#8217;t go into how to create Content Types in general, but in this case, you&#8217;ll want to follow steps similar to this:</p>



<ul class="wp-block-list"><li>If the Content Type will be used only in the specific site (maybe a<strong> Benefits Overview</strong> in the HR site), then create the Content Type in the site. If there&#8217;s even a remote chance you&#8217;ll use the Content Type across sites (maybe <strong>Team Member Intro</strong>), then build it in the Content Type Hub in the SharePoint Admin Center.</li><li>To add a Content Type to the Site Pages library, you&#8217;ll most likely want to inherit from the out of the box Content Type called Site Page. This is the Content Type which is available in the Site Pages library by default. </li></ul>



<p class="wp-block-paragraph">In the example below, we&#8217;ve got three custom Content Types enabled on the Site Pages library: <strong>Productivity Tip</strong>, <strong>How To Guide</strong>, and <strong>Troubleshooting Guide</strong>. We&#8217;ve defined those Content Types at the tenant level: in the Content Type Gallery in the SharePoint Admin Center. Each of these Content Types inherits from an interstitial Content Type called <strong>Base [ClientName] Site Page</strong>, which inherits from <strong>Site Page</strong>. The reason we have the interstitial Content Type is so that we can say &#8220;show me all of the content which inherits from this Content Type&#8221;. That way, we can add additional peers to<strong> Productivity Tip</strong>, etc. without reconfiguring our result locations. We also have several Site Columns added to each of these Content Types so we can categorize the pages to improve findability.</p>



<p class="wp-block-paragraph">Here&#8217;s what the Site Pages library looks like in one of our sites:</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="525" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/10/image-2.png?resize=1024%2C525&#038;ssl=1" alt="" class="wp-image-45410" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/10/image-2.png?resize=1024%2C525&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/10/image-2.png?resize=300%2C154&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/10/image-2.png?resize=768%2C394&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/10/image-2.png?resize=1536%2C787&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/10/image-2.png?resize=2048%2C1049&amp;ssl=1 2048w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/10/image-2.png?w=2580&amp;ssl=1 2580w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">As you can see, the three custom Content Types are available there, and we can declare any Site Page as one of these special Content Types.</p>



<p class="wp-block-paragraph">From here, we can use the <a href="https://microsoft-search.github.io/pnp-modern-search/" data-type="URL" data-id="https://microsoft-search.github.io/pnp-modern-search/" target="_blank" rel="noreferrer noopener">PnP Modern Search Web Parts</a> (my favorites!) to build powerful and sophisticated &#8220;slicing and dicing&#8221; for the content here or across multiple Site Pages libraries. But that&#8217;s a post for another day&#8230;</p>



<h2 class="wp-block-heading">Caveats</h2>



<ul class="wp-block-list"><li>If you change the Content Type of a page or set a column value, you&#8217;ve tacitly edited the page. That means you need to republish the page in order to make the change(s) visible &#8211; and even more importantly, to get the search crawler to pick up the change.</li><li>Because you&#8217;re adding Content Types into the Site Pages library, you may need to get creative with views in the library. At the very least, I generally change the default view from <strong>By Author</strong> (which is rarely helpful, anyway) to <strong>By Content Type</strong>. But build views which represent the tasks you want to complete: <strong>Pages which haven&#8217;t been reviewed</strong>, <strong>By Hardware Type</strong>, etc.</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/10/20/using-content-types-in-sharepoints-site-pages-library/feed/</wfw:commentRss>
			<slash:comments>15</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44755</post-id>	</item>
		<item>
		<title>Creating Custom Content Types for Stream in SharePoint</title>
		<link>https://sympmarc.com/2022/09/27/creating-custom-content-types-for-stream-in-sharepoint/</link>
					<comments>https://sympmarc.com/2022/09/27/creating-custom-content-types-for-stream-in-sharepoint/#respond</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Tue, 27 Sep 2022 18:37:54 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[Stream in SharePoint]]></category>
		<category><![CDATA[Stream Classic]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44767</guid>

					<description><![CDATA[Recently, I wanted to create some new Content Types for videos in a SharePoint site. In the old days, we would inherit from the Video Content Type and create our own variations on that theme, maybe Company Meeting Recording, or Team Meeting, whatever &#8220;flavors&#8221; of Video we might have. I admit that thinking preceded the...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Recently, I wanted to create some new Content Types for videos in a SharePoint site. </p>



<p class="wp-block-paragraph">In the old days, we would inherit from the <strong>Video </strong>Content Type and create our own variations on that theme, maybe <strong>Company Meeting Recording</strong>, or <strong>Team Meeting</strong>, whatever &#8220;flavors&#8221; of <strong>Video </strong>we might have. I admit that thinking preceded the concept of Stream, nee Office 365 Videos.</p>



<p class="wp-block-paragraph">The <strong>Video </strong>Content Type has a number of Site Columns included in it to capture details about the Video. Useful enough, but not stuff most people would bother tracking.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="734" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/09/image-2.png?resize=1024%2C734&#038;ssl=1" alt="" class="wp-image-45258" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/09/image-2.png?resize=1024%2C734&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/09/image-2.png?resize=300%2C215&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/09/image-2.png?resize=768%2C551&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/09/image-2.png?resize=1536%2C1102&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/09/image-2.png?w=1952&amp;ssl=1 1952w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">As I am wont to do, I went straight to the source and pestered Marc Mroz (<a rel="noreferrer noopener" href="https://twitter.com/MarcMroz" data-type="URL" data-id="https://twitter.com/MarcMroz" target="_blank">@MarcMroz</a>) on Twitter.</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">YES! Just inherit from the normal Document CT! We aren&#39;t adding a new CT for Stream on SharePoint, everything we are adding works just from the normal document CT. The old &quot;Video set&quot; stuff is NOT being used going forward.</p>&mdash; marc (@MarcMroz) <a href="https://twitter.com/MarcMroz/status/1534621124306251776?ref_src=twsrc%5Etfw">June 8, 2022</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p class="wp-block-paragraph">As Marc pointed out, with Stream in SharePoint we can simply inherit from the Document Content Type and the magic happens with the Stream smarts right in the Document Library.</p>



<p class="wp-block-paragraph">Content Type inheritance is an important thing to learn more about, but the key message here is we no longer need to treat videos as special snowflakes; SharePoint understands what a video is and how to handle it. Videos are now first class Document Library citizens.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">I admit this post has been languishing in my drafts for a while now. What triggered me to finish it and get it posted is the announcement that the Stream Classic to Stream in SharePoint migration tool will soon by available to everyone as a Public Preview. Start planning for your migrations out of Stream Classic. Don&#8217;t be left behind!</p>



<p class="wp-block-paragraph"><a href="https://learn.microsoft.com/en-us/stream/streamnew/migrate-to-stream-with-mover">Migrate to Stream on SharePoint &#8211; Microsoft Stream | Microsoft Learn</a></p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">The Microsoft Stream (Classic) to SharePoint migration tool will be enabled for everyone the beginning of October as a Public Preview. Start preparing to migrate. We’ll announce the 1 year notice for retirement when tool switches to GA. <a href="https://t.co/7ROHHJTaOY">https://t.co/7ROHHJTaOY</a></p>&mdash; marc (@MarcMroz) <a href="https://twitter.com/MarcMroz/status/1574007781463580673?ref_src=twsrc%5Etfw">September 25, 2022</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/09/27/creating-custom-content-types-for-stream-in-sharepoint/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44767</post-id>	</item>
		<item>
		<title>Additional RefinableString* Managed Property Variants in the Search Schema in SharePoint Online</title>
		<link>https://sympmarc.com/2022/09/26/additional-refinablestring-managed-property-variants-in-the-search-schema-in-sharepoint-online/</link>
					<comments>https://sympmarc.com/2022/09/26/additional-refinablestring-managed-property-variants-in-the-search-schema-in-sharepoint-online/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 26 Sep 2022 15:36:19 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Modern Search Web Parts]]></category>
		<category><![CDATA[REfinableString]]></category>
		<category><![CDATA[schema]]></category>
		<category><![CDATA[search]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=45197</guid>

					<description><![CDATA[It would seem like the simplest thing in the world: show results in the PnP Modern Search Results Web Part in alphabetical order. My wanting to do this led to multiple conversations with my search guru Mikael Svenson (@mikaelsvenson) and the uncovering of some really useful variants on RefinableString in the SharePoint Online Managed Properties....]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">It would seem like the simplest thing in the world: show results in the <a rel="noreferrer noopener" href="https://microsoft-search.github.io/pnp-modern-search/" data-type="URL" data-id="https://microsoft-search.github.io/pnp-modern-search/" target="_blank">PnP Modern Search</a> Results Web Part in alphabetical order. My wanting to do this led to multiple conversations with my search guru Mikael Svenson (<a rel="noreferrer noopener" href="https://twitter.com/mikaelsvenson" data-type="URL" data-id="https://twitter.com/mikaelsvenson" target="_blank">@mikaelsvenson</a>) and the uncovering of some really useful variants on <code>RefinableString</code> in the SharePoint Online Managed Properties. </p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="106" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/09/image-1.png?resize=1024%2C106&#038;ssl=1" alt="" class="wp-image-45254" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/09/image-1.png?resize=1024%2C106&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/09/image-1.png?resize=300%2C31&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/09/image-1.png?resize=768%2C79&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/09/image-1.png?w=1403&amp;ssl=1 1403w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The new(ish? &#8211; it&#8217;s not clear how long they have been there) pre-created Managed Properties which are variants of <code>RefinableString</code> are now documented in <a href="https://learn.microsoft.com/en-us/sharepoint/manage-search-schema#default-unused-managed-properties" target="_blank" rel="noreferrer noopener">Manage the search schema in SharePoint &#8211; SharePoint in Microsoft 365 | Microsoft Learn</a>. Until I offered some updates recently, these variants weren&#8217;t in the article. I&#8217;m not sure I&#8217;d ever found this article before, but it seems to be the canonical list of Refinable Managed Properties, along with a lot of useful information about the Search Schema.</p>



<p class="wp-block-paragraph">The new (to me, anyway) ones are in the last four rows of the following table in that article:</p>



<figure class="wp-block-table"><table><thead><tr><th><strong>Managed property type</strong></th><th><strong>Count</strong></th><th><strong>Multi</strong></th><th><strong>Query</strong></th><th><strong>Search</strong></th><th><strong>Retrieve</strong></th><th><strong>Refine</strong></th><th><strong>Sort</strong></th><th><strong>Managed property name range</strong></th><th><strong>Notes</strong></th></tr></thead><tbody><tr><td>Date</td><td>10</td><td>&#8211;</td><td>Query</td><td>&#8211;</td><td>&#8211;</td><td>&#8211;</td><td>&#8211;</td><td>Date00 to Date09</td><td></td></tr><tr><td>Date</td><td>20</td><td>Multi</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td>RefinableDate00 to RefinableDate19</td><td></td></tr><tr><td>Date</td><td>2</td><td>&#8211;</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td>RefinableDateInvariant00 to RefinableDateInvariant01</td><td>*</td></tr><tr><td>Date</td><td>5</td><td>&#8211;</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td>RefinableDateSingle00 to RefinableDateSingle04</td><td></td></tr><tr><td>Decimal</td><td>10</td><td>&#8211;</td><td>Query</td><td>&#8211;</td><td>&#8211;</td><td>&#8211;</td><td>&#8211;</td><td>Decimal00 to Decimal09</td><td></td></tr><tr><td>Decimal</td><td>10</td><td>Multi</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td>RefinableDecimal00 to RefinableDecimal09</td><td></td></tr><tr><td>Double</td><td>10</td><td>&#8211;</td><td>Query</td><td>&#8211;</td><td>&#8211;</td><td>&#8211;</td><td>&#8211;</td><td>Double00 to Double09</td><td></td></tr><tr><td>Double</td><td>10</td><td>Multi</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td>RefinableDouble00 to RefinableDouble09</td><td></td></tr><tr><td>Integer</td><td>50</td><td>&#8211;</td><td>Query</td><td>&#8211;</td><td>&#8211;</td><td>&#8211;</td><td>&#8211;</td><td>Int00 to Int49</td><td></td></tr><tr><td>Integer</td><td>50</td><td>Multi</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td>RefinableInt00 to RefinableInt4</td><td></td></tr><tr><td>Yes/No</td><td>4</td><td>&#8211;</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td>RefinableYesNo00 to<br>RefinableYesNo04</td><td></td></tr><tr><td>String</td><td>200</td><td>Multi</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td>RefinableString00 to RefinableString199</td><td></td></tr><tr><td>String</td><td>40</td><td>Multi</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td><strong>RefinableStringFirst00 to RefinableStringFirst39</strong></td><td>*</td></tr><tr><td>String</td><td>10</td><td>Multi</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td><strong>RefinableStringLn00 to RefinableStringLn09</strong></td><td>**</td></tr><tr><td>String</td><td>50</td><td>&#8211;</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td><strong>RefinableStringWbOff00 to RefinableStringWbOff49</strong></td><td>***</td></tr><tr><td>String</td><td>50</td><td>Multi</td><td>Query</td><td>&#8211;</td><td>Retrieve</td><td>Refine</td><td>Sort</td><td><strong>RefinableStringWbOffFirst00 to RefinableStringWbOffFirst49</strong></td><td>*, ***</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">* Mappings to crawled properties &#8211; Include content from the first crawled property that is not empty, based on the specified order.<br>** Language neutral word breaker<br>*** Complete Matching</p>



<p class="wp-block-paragraph">As you can see, each of the additional <code>RefinableString*</code> Managed Properties has something a little different about it, as indicated in the Notes.</p>



<p class="wp-block-paragraph">Need to know more? Feel free to ask your questions in the comments.</p>



<h2 class="wp-block-heading">Resources</h2>



<ul class="wp-block-list">
<li><a href="https://learn.microsoft.com/en-us/sharepoint/manage-search-schema#default-unused-managed-properties">Manage the search schema in SharePoint &#8211; SharePoint in Microsoft 365 | Microsoft Learn</a></li>



<li><a href="https://learn.microsoft.com/en-us/microsoft-365/community/how-do-site-columns-become-managed-properties-thus-available-for-search">How Do Site Columns Become Managed Properties &#8211; Thus Available for Search? | Microsoft Learn</a></li>



<li><a href="https://microsoft-search.github.io/pnp-modern-search/">Introduction &#8211; PnP Modern Search (v4) (microsoft-search.github.io)</a></li>



<li><a href="https://github.com/microsoft-search/pnp-modern-search/issues/2351">Sort by Filename · Issue #2351 · microsoft-search/pnp-modern-search (github.com)</a></li>
</ul>



<h2 class="wp-block-heading">Updates</h2>



<ul class="wp-block-list">
<li>2024-11-21 &#8211; Added Yes/No row for RefinableYesNo00 to RefinableYesNo04</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/09/26/additional-refinablestring-managed-property-variants-in-the-search-schema-in-sharepoint-online/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">45197</post-id>	</item>
		<item>
		<title>SharePoint-Based Intranets &#8211; Leave the Designers at Home</title>
		<link>https://sympmarc.com/2022/07/27/sharepoint-based-intranets-leave-the-designers-at-home/</link>
					<comments>https://sympmarc.com/2022/07/27/sharepoint-based-intranets-leave-the-designers-at-home/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Wed, 27 Jul 2022 20:58:09 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[responsive design]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=45040</guid>

					<description><![CDATA[Modern SharePoint gives us few options from a design perspective. That sounds horrible, right? Actually, I see it as a very positive thing. By taking the pixel-pushing out of the mix, we can get people to focus on CONTENT, which is the do or die part of any Intranet. Over the years, I was able...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Modern SharePoint gives us few options from a design perspective. That sounds horrible, right? Actually, I see it as a very positive thing. By taking the pixel-pushing out of the mix, we can get people to focus on CONTENT, which is the do or die part of any Intranet.</p>



<p class="wp-block-paragraph">Over the years, I was able to do a LOT of business (as <a href="https://sympraxisconsulting.com/" data-type="URL" data-id="https://sympraxisconsulting.com/" target="_blank" rel="noreferrer noopener">Sympraxis</a>) making &#8220;SharePoint not look like SharePoint&#8221;. But that came at a cost on several levels:</p>



<ul class="wp-block-list"><li>My clients had to pay me to implement a design, which often wasn&#8217;t well-suited to SharePoint in the first place. Anyone remember the agony of getting rounded corners on Web Parts in the old days with just CSS?</li><li>We focused a lot on that design, and far less on the content which we&#8217;d pour into it. Oftentimes, after we finally got the pixels in the right place, the content wouldn&#8217;t even fit into the pages very well!</li></ul>



<p class="wp-block-paragraph">Modern SharePoint gives us a clean, responsive, open user experience (UI) which few people quibble with. Years ago, many people driving Web site development had come from the print world, so there was a lot of that paper-perfect thinking in the mix. These days &#8211; a statistical generation later &#8211; most people driving the projects have always worked in the Web. The scales have tipped.</p>



<p class="wp-block-paragraph">If you look at the <a href="https://lookbook.microsoft.com/">SharePoint look book</a>, virtually every one of the designs you see can be accomplished with out of the box settings. That&#8217;s a lot of power. </p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="732" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/07/image-1.png?resize=1024%2C732&#038;ssl=1" alt="" class="wp-image-45038" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/07/image-1.png?resize=1024%2C732&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/07/image-1.png?resize=300%2C214&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/07/image-1.png?resize=768%2C549&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/07/image-1.png?w=1080&amp;ssl=1 1080w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">In modern SharePoint, there are several &#8220;design surfaces&#8221; we can work with:</p>



<ul class="wp-block-list"><li><strong>Theme(s) </strong>&#8211; We can devise a theme base on the organization&#8217;s primary color palette which can be applied to the Intranet site. We can have multiple themes, but they can only impact the main color palette on the sites. See: <a rel="noreferrer noopener" href="https://docs.microsoft.com/en-us/sharepoint/dev/declarative-customization/site-theming/sharepoint-site-theming-overview" target="_blank">SharePoint site theming | Microsoft Docs</a> and <a rel="noreferrer noopener" href="https://fluentuipr.z22.web.core.windows.net/heads/master/theming-designer/index.html" target="_blank">Fluent UI Theme Designer (windows.net)</a></li><li><strong>Imagery </strong>&#8211; We can create one or more Organizational Assets libraries to contain organizational imagery. These libraries might contain logos, product images, paid stock images, etc., and are available to all Site Owners when they build their sites. See: <a rel="noreferrer noopener" href="https://docs.microsoft.com/en-us/sharepoint/organization-assets-library" target="_blank">Create an organization assets library &#8211; SharePoint in Microsoft 365 | Microsoft Docs</a></li><li><strong>Iconography </strong>&#8211; SharePoint gives us a set of icons we can use for things like Quick Links, but we can also use custom images. For consistency, and simplicity, the out of the box set usually suffices. See: <a rel="noreferrer noopener" href="https://developer.microsoft.com/en-us/fluentui#/styles/web/icons" target="_blank">Fluent UI &#8211; Styles &#8211; React &#8211; Fluent UI Icons (microsoft.com)</a> (Scroll down to see the icon set.) The <a rel="noreferrer noopener" href="https://flicon.io/" target="_blank">Flicon &#8211; Fluent UI Icon Search</a> site makes it easier to search that icon set (maintained by fellow MVP Chris Kent [<a href="https://twitter.com/theChrisKent"></a><a href="https://twitter.com/theChrisKent" target="_blank" rel="noreferrer noopener">@theChrisKent</a>]).</li><li><strong>Site Icons</strong> &#8211; If your department or working group has a logo, the site icon can be that logo. The Intranet itself can have a logo, too. These logos are best created as square images which look good reduced to a fairly small size. In other words, not a lot of fancy details. See: <a href="https://support.microsoft.com/en-us/office/change-the-look-of-your-sharepoint-site-06bbadc3-6b04-4a60-9d14-894f6a170818">Change the look of your SharePoint site (microsoft.com)</a></li><li><strong>Page Layouts </strong>&#8211; This starts to get more into content, but page layouts can be preconfigured for specific types of content, to ensure consistency and familiarity. See: <a rel="noreferrer noopener" href="https://support.microsoft.com/en-us/office/page-templates-in-sharepoint-faa92408-0c84-4e3d-8460-3c28065e7873#:~:text=Page%20templates%20in%20SharePoint%201%20Use%20a%20template.,delete%20custom%20templates%20using%20the%20Pages%20library.%20" target="_blank">Page templates in SharePoint (microsoft.com)</a></li></ul>



<p class="wp-block-paragraph">Anything beyond these design options usually would require custom coding and frankly often isn&#8217;t worth the effort. Having a designer available to make suggestions doesn&#8217;t hurt, but sometimes they get frustrated by the lack of options! These aren&#8217;t old-fashioned Web sites which required us to create an HTML template and CSS in order to get rolling. We can create a site and start working on the content right away, shortening the path to success immensely.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/07/27/sharepoint-based-intranets-leave-the-designers-at-home/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">45040</post-id>	</item>
		<item>
		<title>SharePoint Location Columns &#8211; Too Meh for Recommendation</title>
		<link>https://sympmarc.com/2022/07/05/sharepoint-location-columns-too-meh-for-recommendation/</link>
					<comments>https://sympmarc.com/2022/07/05/sharepoint-location-columns-too-meh-for-recommendation/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Tue, 05 Jul 2022 21:29:21 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[Location column]]></category>
		<category><![CDATA[Bing Maps]]></category>
		<category><![CDATA[Bing]]></category>
		<category><![CDATA[geolocation]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44801</guid>

					<description><![CDATA[SharePoint Location columns have some issues which are pervasive and repeatable. One of the purportedly biggest benefits of using one of these columns is we can type in an address, and it&#8217;s looked up in Bing Maps. What&#8217;s supposed to happen is the details of that location are then parsed out and made available for...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">SharePoint Location columns have some issues which are pervasive and repeatable. One of the purportedly biggest benefits of using one of these columns is we can type in an address, and it&#8217;s looked up in <a rel="noreferrer noopener" href="https://www.bing.com/maps" data-type="URL" data-id="https://www.bing.com/maps" target="_blank">Bing Maps</a>. What&#8217;s supposed to happen is the details of that location are then parsed out and made available for use as separate &#8220;pseudo-columns&#8221;. For example, we might type in &#8216;111 Coleman Blvd, Savan&#8217; and then select the corresponding location.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="419" height="94" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-14.png?resize=419%2C94&#038;ssl=1" alt="" class="wp-image-44803" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-14.png?w=419&amp;ssl=1 419w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-14.png?resize=300%2C67&amp;ssl=1 300w" sizes="auto, (max-width: 419px) 100vw, 419px" /></figure>
</div>


<p class="wp-block-paragraph">Then in the list where we have the column, we can choose to display the <strong>City</strong>, <strong>State</strong>, <strong>Postal Code</strong>, etc. without ever entering them.</p>



<p class="wp-block-paragraph">All well and good. Many addresses, though, come back with missing parts of their data. In this case, there is no latitude/longitude, which we&#8217;d like to have for mapping. This is one if the big benefits of using a Location column! There&#8217;s no way to discern in the UI whether the variants one might see for an address is &#8220;better&#8221; than another. In this case, choosing &#8216;111 Coleman Blvd, Pooler, GA 31408&#8217;, which is the exact same building, yields the latitude/longitude.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="403" height="92" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-15.png?resize=403%2C92&#038;ssl=1" alt="" class="wp-image-44804" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-15.png?w=403&amp;ssl=1 403w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-15.png?resize=300%2C68&amp;ssl=1 300w" sizes="auto, (max-width: 403px) 100vw, 403px" /></figure>
</div>


<p class="wp-block-paragraph">But there&#8217;s no way in the UI to discern this as we are making the selection. I can only figure it out if I go to the Bing Maps UI and look for the latitude/longitude at the bottom of the left panel.</p>



<p class="wp-block-paragraph">Alas, my excitement at realizing this variant on the address has a lat/long was short-lived, as the values are not pulled into the list on selection. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="492" height="494" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/07/image.png?resize=492%2C494&#038;ssl=1" alt="" class="wp-image-44843" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/07/image.png?w=492&amp;ssl=1 492w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/07/image.png?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/07/image.png?resize=150%2C150&amp;ssl=1 150w" sizes="auto, (max-width: 492px) 100vw, 492px" /><figcaption>Want to <a href="https://www.bing.com/maps?osid=01473fcb-7f4a-4ba0-aed8-e361a8a86bf3&amp;cp=32.11299~-81.230957&amp;lvl=16&amp;v=2&amp;sV=2&amp;form=S00027" data-type="URL" data-id="https://www.bing.com/maps?osid=01473fcb-7f4a-4ba0-aed8-e361a8a86bf3&amp;cp=32.11299~-81.230957&amp;lvl=16&amp;v=2&amp;sV=2&amp;form=S00027" target="_blank" rel="noreferrer noopener">see this live</a>?</figcaption></figure>
</div>


<p class="wp-block-paragraph">As you can see below, even though I have selected an address which has all the values in Bing Maps, only a few of the pseudo-columns are populated. The lat/long are missing as well as the <strong>Postal Code</strong>.</p>



<figure class="wp-block-image size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-16.png?resize=840%2C32&#038;ssl=1" alt="" class="wp-image-44806" width="840" height="32" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-16.png?resize=1024%2C40&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-16.png?resize=300%2C12&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-16.png?resize=768%2C30&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-16.png?resize=1536%2C61&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-16.png?w=1619&amp;ssl=1 1619w" sizes="auto, (max-width: 840px) 100vw, 840px" /></figure>



<p class="wp-block-paragraph">It&#8217;s also very easy to &#8220;select&#8221; a value which isn&#8217;t even coming from Bing Maps. In other words, I can type &#8216;111 Coleman Blvd&#8217; and hit enter, and that value is stored in the column with no warning that it isn&#8217;t &#8220;connected&#8221; to Bing Maps. Or, even worse, one of the values from the dropdown is selected, and may well be wrong. Here, I&#8217;ve mistakenly typed &#8216;1111 Coleman Blvd&#8217; and I just get that untethered value and there&#8217;s nothing in the UI to make that clear. (Yes, the second line is blank, but you only see that if you edit the column.)</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="423" height="93" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-13.png?resize=423%2C93&#038;ssl=1" alt="" class="wp-image-44802" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-13.png?w=423&amp;ssl=1 423w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-13.png?resize=300%2C66&amp;ssl=1 300w" sizes="auto, (max-width: 423px) 100vw, 423px" /></figure>
</div>


<p class="wp-block-paragraph">Another small annoyance is once an address is selected, we can&#8217;t copy it from the field in edit mode. We can&#8217;t highlight the address anywhere in the UI I can find. So, if we want to grab that address, there&#8217;s no way to do so.</p>



<p class="wp-block-paragraph">And so forth&#8230;</p>



<p class="wp-block-paragraph">What&#8217;s your luck been with Location columns? Do you find you consistently get valid &#8211; and useful &#8211; data back from Bing Maps?</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/07/05/sharepoint-location-columns-too-meh-for-recommendation/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44801</post-id>	</item>
		<item>
		<title>Using PnP.PowerShell in Visual Studio Code</title>
		<link>https://sympmarc.com/2022/06/30/using-pnp-powershell-in-visual-studio-code/</link>
					<comments>https://sympmarc.com/2022/06/30/using-pnp-powershell-in-visual-studio-code/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 30 Jun 2022 21:28:58 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[PnP.PowerShell]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Visual Studio Code]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44826</guid>

					<description><![CDATA[PnP.PowerShell is one of my favorite tools of the trade. I&#8217;ve had to set up multiple machines for myself or others for this lately, and I always find myself looking for the fastest path to glory. Usually, it takes about 9 articles and 15 blind alleys, so I figured I&#8217;d capture what seems to work...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph"><a rel="noreferrer noopener" href="https://pnp.github.io/powershell/" data-type="URL" data-id="https://pnp.github.io/powershell/" target="_blank">PnP.PowerShell</a> is one of my favorite tools of the trade. I&#8217;ve had to set up multiple machines for myself or others for this lately, and I always find myself looking for the fastest path to glory. Usually, it takes about 9 articles and 15 blind alleys, so I figured I&#8217;d capture what seems to work for me. Hopefully I can keep this up to date if things change.</p>



<h2 class="wp-block-heading">Install Visual Studio Code</h2>



<p class="wp-block-paragraph"><strong>Visual Studio Code</strong> aka <strong>VS Code</strong> aka <strong>VSCode</strong> aka <strong>Code</strong> (which I&#8217;ll use in the rest of this post) is the &#8220;modern&#8221;, free code editor from Microsoft. I&#8217;ve used dozens of code editors over the years and Code is one of the best. Plus, everyone else is using it!</p>



<p class="wp-block-paragraph">Obviously, you need to have VS Code installed to start. You can download it from <a rel="noreferrer noopener" href="https://code.visualstudio.com/Download" target="_blank">Download Visual Studio Visual Studio Code &#8211; Mac, Linux, Windows</a>.</p>



<h2 class="wp-block-heading">Set Execution Policy</h2>



<p class="wp-block-paragraph">This one gets me every time. You&#8217;ll want your Execution Policies set like this:</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="604" height="332" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-23.png?resize=604%2C332&#038;ssl=1" alt="" class="wp-image-44827" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-23.png?w=604&amp;ssl=1 604w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-23.png?resize=300%2C165&amp;ssl=1 300w" sizes="auto, (max-width: 604px) 100vw, 604px" /></figure>



<p class="wp-block-paragraph">This allows you to install PowerShell modules with less friction. It&#8217;s possible your organization won&#8217;t let you make this change. You can see your current settings by typing </p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">Get-ExecutionPolicy -List</code></pre>



<p class="wp-block-paragraph">in a terminal window. To open things up, run this cmdlet:</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine</code></pre>



<p class="wp-block-paragraph">I&#8217;m sure there are reasons to set this in different ways based on your organization&#8217;s view of security. I&#8217;m not going to get into that here: heed your governance rules.</p>



<h2 class="wp-block-heading">Install PowerShell 7</h2>



<p class="wp-block-paragraph">If you&#8217;re running a Windows machine, you&#8217;ve most likely got <strong>PowerShell 5</strong> (PS5) installed by default. <strong>PowerShell 7</strong> (PS7) has more capabilities and is required for <strong>PnP.PowerShell</strong> to run successfully. Some cmdlets may run just fine with PS5, but don&#8217;t be fooled: you want PS7.)</p>



<p class="wp-block-paragraph"><a href="https://docs.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-windows?WT.mc_id=THOMASMAURER-blog-thmaure&amp;view=powershell-7">Installing PowerShell on Windows &#8211; PowerShell | Microsoft Docs</a></p>



<h2 class="wp-block-heading">Install the PowerShell Extension</h2>



<p class="wp-block-paragraph">One of the great things about Code is the rich ecosystem of extensions. The <strong>PowerShell</strong> extension from Microsoft makes Code smart about PowerShell. You want it.</p>



<p class="wp-block-paragraph"><a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.PowerShell" target="_blank" rel="noreferrer noopener">PowerShell &#8211; Visual Studio Marketplace</a></p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="667" height="185" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-28.png?resize=667%2C185&#038;ssl=1" alt="" class="wp-image-44837" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-28.png?w=667&amp;ssl=1 667w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-28.png?resize=300%2C83&amp;ssl=1 300w" sizes="auto, (max-width: 667px) 100vw, 667px" /></figure>



<h2 class="wp-block-heading">Switch Code to PS7</h2>



<p class="wp-block-paragraph">I find the instructions for this confusing. PS5 is also called <strong>Windows PowerShell (x64)</strong> and PS7 is also called <strong>PowerShell (x64)</strong>. In other words, the 5 and 7 don&#8217;t show un in the instructions in <a rel="noreferrer noopener" href="https://docs.microsoft.com/en-us/powershell/scripting/dev-cross-plat/vscode/using-vscode?view=powershell-7.2#choosing-a-version-of-powershell-to-use-with-the-extension" target="_blank">Using Visual Studio Code for PowerShell Development &#8211; PowerShell | Microsoft Docs</a>.</p>



<p class="wp-block-paragraph">This part is clear:</p>



<p class="wp-block-paragraph"><em>Use the following steps to choose the version:</em></p>



<ol class="wp-block-list"><li><em>Open the <strong>Command Palette</strong> on Windows or Linux with <kbd>Ctrl</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd>. On macOS, use <kbd>Cmd</kbd>+<kbd>Shift</kbd>+<kbd>P</kbd>.</em></li><li><em>Search for <strong>Session</strong>.</em></li><li><em>Click on <strong>PowerShell: Show Session Menu</strong>.</em></li><li><em>Choose the version of PowerShell you want to use from the list.</em></li></ol>



<p class="wp-block-paragraph">You&#8217;ll want to choose <strong>PowerShell (x64)</strong>, if it isn&#8217;t already selected.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="281" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-24.png?resize=1024%2C281&#038;ssl=1" alt="" class="wp-image-44829" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-24.png?resize=1024%2C281&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-24.png?resize=300%2C82&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-24.png?resize=768%2C211&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-24.png?w=1498&amp;ssl=1 1498w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph"><strong>Pro tip</strong>: When you&#8217;ve got a PowerShell file (.ps1, .psm1, etc.) open, you can also get to the <strong>PowerShell Session Menu</strong> by clicking on the squiggly brackets next to <strong>PowerShell </strong>in the bottom toolbar. Plus, the version is there! </p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="146" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-25.png?resize=1024%2C146&#038;ssl=1" alt="" class="wp-image-44831" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-25.png?resize=1024%2C146&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-25.png?resize=300%2C43&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-25.png?resize=768%2C110&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-25.png?w=1170&amp;ssl=1 1170w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">Install PnP.PowerShell</h2>



<p class="wp-block-paragraph">Finally, the piece de resistance: <a href="https://pnp.github.io/powershell/index.html" data-type="URL" data-id="https://pnp.github.io/powershell/index.html" target="_blank" rel="noreferrer noopener">PnP.PowerShell</a>. This is the module that lets us do so much with Microsoft 365. If you&#8217;re using the SPO module instead, I say switch.</p>



<p class="wp-block-paragraph">You need to run Code as an administrator if you want to install modules. To do this, I usually just type <strong>Code </strong>in the search box in Windows 11, right click the result, and choose <strong>Run as administrator</strong>.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="544" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-26.png?resize=1024%2C544&#038;ssl=1" alt="" class="wp-image-44835" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-26.png?resize=1024%2C544&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-26.png?resize=300%2C159&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-26.png?resize=768%2C408&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-26.png?resize=1536%2C815&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-26.png?w=1882&amp;ssl=1 1882w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">From here, follow the instruction on the <a href="https://pnp.github.io/powershell/articles/installation.html" target="_blank" rel="noreferrer noopener">Installing PnP PowerShell | PnP PowerShell</a> page.</p>



<p class="wp-block-paragraph">Happy PowerShelling!</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">This article is for those of you on a Windows machine. I don&#8217;t have a Mac, nor do I want a Mac. I also don&#8217;t run Linux. Or a Sinclair Z-80 (though I loved the one I had way back when, it wouldn&#8217;t run PowerShell).</p>



<p class="wp-block-paragraph">I expect I&#8217;ve missed a few little bits here. Feel free to tell me so in the comments, and I&#8217;ll make updates. Also, let me know if this is helpful!</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list"><li><a href="https://docs.microsoft.com/en-us/powershell/scripting/whats-new/migrating-from-windows-powershell-51-to-powershell-7?view=powershell-7.2">Migrating from Windows PowerShell 5.1 to PowerShell 7 &#8211; PowerShell | Microsoft Docs</a></li><li><a href="https://docs.microsoft.com/en-us/powershell/scripting/dev-cross-plat/vscode/using-vscode?view=powershell-7.2">Using Visual Studio Code for PowerShell Development &#8211; PowerShell | Microsoft Docs</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/06/30/using-pnp-powershell-in-visual-studio-code/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44826</post-id>	</item>
		<item>
		<title>Fixes for a Washed-Out Screen While Sharing in Teams Meetings</title>
		<link>https://sympmarc.com/2022/06/27/fixes-for-a-washed-out-screen-while-sharing-in-teams-meetings/</link>
					<comments>https://sympmarc.com/2022/06/27/fixes-for-a-washed-out-screen-while-sharing-in-teams-meetings/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 27 Jun 2022 20:48:57 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Microsoft Teams]]></category>
		<category><![CDATA[HDR]]></category>
		<category><![CDATA[Windows 11]]></category>
		<category><![CDATA[screen]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44810</guid>

					<description><![CDATA[Lately, every time I have shared my screen on a Teams Meeting with other Sympraxians, they have told me my screen looks awful and I should stop sharing. It sounded unpleasant, but I couldn&#8217;t see what they were seeing. Today, with help from the awesome Emily Mancini (@eemancini), I figured out the issue. From a...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Lately, every time I have shared my screen on a Teams Meeting with other Sympraxians, they have told me my screen looks awful and I should stop sharing. It sounded unpleasant, but I couldn&#8217;t see what they were seeing. </p>



<p class="wp-block-paragraph">Today, with help from the awesome Emily Mancini (<a rel="noreferrer noopener" href="http://twitter.com/eemancini" data-type="URL" data-id="twitter.com/eemancini" target="_blank">@eemancini</a>), I figured out the issue. From a few searches, we found there are several suggested fixes out there.</p>



<p class="wp-block-paragraph"><strong>Disable GPU hardware acceleration</strong> &#8211; This tells Teams not to use the Graphics Processing Unit (GPU) to speed up stuff on the screen. To do this, you click on the ellipses in the upper right of Teams / Settings. </p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-21.png?resize=512%2C512&#038;ssl=1" alt="" class="wp-image-44814" width="512" height="512" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-21.png?resize=1024%2C1024&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-21.png?resize=300%2C300&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-21.png?resize=150%2C150&amp;ssl=1 150w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-21.png?resize=768%2C768&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-21.png?w=1178&amp;ssl=1 1178w" sizes="auto, (max-width: 512px) 100vw, 512px" /></figure>
</div>


<p class="wp-block-paragraph">Note that you must restart Teams for this to take effect. This means right clicking on the Teams icon in the system tray and then <strong>Quit</strong>. This seems to fix a similar issue for many people out there.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-22.png?resize=337%2C384&#038;ssl=1" alt="" class="wp-image-44815" width="337" height="384" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-22.png?w=673&amp;ssl=1 673w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-22.png?resize=263%2C300&amp;ssl=1 263w" sizes="auto, (max-width: 337px) 100vw, 337px" /></figure>
</div>


<p class="wp-block-paragraph"><strong>Delete the Teams cache</strong> &#8211; This takes a little more fortitude, and I&#8217;m not positive it would help, but the instructions are in the article below.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">But neither of these approaches solved the problem for me. Each time I would do a test call with Emily, I would get the equivalent of the vomit emoji. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f92e.png" alt="🤮" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<p class="wp-block-paragraph">I thought back over the timeframe when they had been telling me things were ugly. I recently reconfigured my screens, so I had been fiddling with the settings for each of them: my laptop screen and two external monitors.</p>



<p class="wp-block-paragraph">As I poked around in those settings, I remembered I&#8217;d enabled an appealing-sounding setting called HDR for my laptop screen. This is a setting in Windows 11 that purports the following:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>HDR content on Windows offers better brightness and color capabilities compared to traditional content (sometimes called standard dynamic range [SDR] content). Traditional content typically shows details in a bright part of a scene or a darker part of a scene, but not in both parts at the same time. For example, if the shot focuses on a bright window in the scene, details in the shadow are lost. </p></blockquote>



<p class="wp-block-paragraph"><a href="https://support.microsoft.com/en-us/windows/what-is-hdr-in-windows-11-f5fbf5cb-149d-4a0d-8be1-9ed78c68d3b4">What is HDR in Windows 11? (microsoft.com)</a></p>



<p class="wp-block-paragraph">Sounds nice, right? Well, that was a change, and it had to do with my screen. I disabled HDR and pinged Emily &#8211; one last time as it turned out.</p>



<p class="wp-block-paragraph">Moral of the story: Teams doesn&#8217;t seem to play well with this HDR setting. Don&#8217;t turn it on for a screen you&#8217;d like to share in Teams (my other two screens had been fine for sharing). Thanks, Emily!</p>


<div class="wp-block-image">
<figure class="aligncenter size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-19.png?resize=512%2C305&#038;ssl=1" alt="" class="wp-image-44812" width="512" height="305" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-19.png?resize=1024%2C609&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-19.png?resize=300%2C179&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-19.png?resize=768%2C457&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-19.png?resize=1536%2C914&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-19.png?w=1754&amp;ssl=1 1754w" sizes="auto, (max-width: 512px) 100vw, 512px" /></figure>
</div>


<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list"><li><a href="https://answers.microsoft.com/en-us/msteams/forum/all/teams-desktop-sharing-screen-colour-washed-out/305bbc12-1ccb-4ea5-a866-27bbec69cc23">Teams Desktop Sharing Screen Colour Washed out &#8211; Microsoft Community</a></li><li><a href="https://www.reddit.com/r/MicrosoftTeams/comments/krpasa/teams_video_showing_colors_very_washed_out_or/">Teams video showing colors very washed out or black and white : MicrosoftTeams (reddit.com)</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/06/27/fixes-for-a-washed-out-screen-while-sharing-in-teams-meetings/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44810</post-id>	</item>
		<item>
		<title>Replace that Classic SharePoint Root Site</title>
		<link>https://sympmarc.com/2022/06/23/replace-that-classic-sharepoint-root-site/</link>
					<comments>https://sympmarc.com/2022/06/23/replace-that-classic-sharepoint-root-site/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 23 Jun 2022 17:24:49 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[Invoke-SPOSiteSwap]]></category>
		<category><![CDATA[PnP.PowerShell]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44789</guid>

					<description><![CDATA[Working in a client tenant today, I noticed a new suggestion in the SharePoint Admin Center I hadn&#8217;t seen before. It&#8217;s certainly possible it&#8217;s been around for a while, but it was new to me. The tenant where I&#8217;m working has been around since at least 2015. That means it was created with a classic...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Working in a client tenant today, I noticed a new suggestion in the SharePoint Admin Center I hadn&#8217;t seen before. It&#8217;s certainly possible it&#8217;s been around for a while, but it was new to me. </p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="378" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-12.png?resize=1024%2C378&#038;ssl=1" alt="" class="wp-image-44797" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-12.png?resize=1024%2C378&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-12.png?resize=300%2C111&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-12.png?resize=768%2C283&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-12.png?w=1187&amp;ssl=1 1187w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">The tenant where I&#8217;m working has been around since at least 2015. That means it was created with a classic SharePoint site as the root site. Back then there was no such thing as a modern SharePoint site, and Microsoft hasn&#8217;t forced us to replace what we got when we created the tenant. In the message above, they are suggesting site modernization. Interesting, I thought.</p>



<p class="wp-block-paragraph">We do this modernization all the time as we help people build new Intranets or try to get more from their investment in the Microsoft 365 platform. It&#8217;s not at all unusual for an organization to have been using Microsoft 365 for years but maybe only using it for Exchange. Or maybe using one Document Library in the root site to store ALL the organization&#8217;s documents. Believe me, we&#8217;ve seen all sorts of things which would surprise you. It&#8217;s one of the reasons we&#8217;re so passionate about the <a href="https://symp.info/MM4M365" data-type="URL" data-id="https://symp.info/MM4M365" target="_blank" rel="noreferrer noopener">Microsoft 365 Maturity Model</a>.</p>



<p class="wp-block-paragraph">The great thing about this recommendation is it actually steps you through the process. I figured it might be useful to know how it works for those of you who aren&#8217;t into the platform up to your elbows like we are.</p>



<p class="wp-block-paragraph">When you click the<strong> View recommendation</strong> button, you get a nice set of suggested steps to follow to set up and configure a new modern site for the root.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="886" height="782" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-11.png?resize=886%2C782&#038;ssl=1" alt="" class="wp-image-44796" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-11.png?w=886&amp;ssl=1 886w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-11.png?resize=300%2C265&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-11.png?resize=768%2C678&amp;ssl=1 768w" sizes="auto, (max-width: 886px) 100vw, 886px" /></figure>
</div>


<p class="wp-block-paragraph">Here are those steps and links. Generally, organizations will want a modern Communication Site in the root of their tenant. This site tends to be the launchpad for the organization&#8217;s Intranet. At the very least, it can be a launchpad into Team Sites where people do their work.</p>



<ol class="wp-block-list"><li><strong>Plan the site content. </strong>This step includes understanding the goals of stakeholders and the needs of users. <a rel="noreferrer noopener" href="https://support.microsoft.com/en-US/office/35d9adfe-d5cc-462f-a63a-bae7f2529182?WT.mc_id=365AdminCSH_spo" target="_blank">Learn more</a></li><li><strong>Build the site. </strong>Create a communication site, customize the design, and add your content. <a rel="noreferrer noopener" href="https://support.microsoft.com/en-US/office/adfdd689-235f-4edb-bdf7-60eddeb78a45?WT.mc_id=365AdminCSH_spo" target="_blank">Learn more</a></li><li><strong>Prepare to launch. </strong>Set site permissions and test the site. <a rel="noreferrer noopener" href="https://support.microsoft.com/en-US/office/21761aac-f7f7-4499-b0ca-cf283477c32f?WT.mc_id=365AdminCSH_spo" target="_blank">Learn more</a></li></ol>



<p class="wp-block-paragraph">The process of building out the new Communication Site need not be complex, but usually you&#8217;re planning an entirely new Intranet or set of access paths for folks to get their work done. Thus, while building the new site isn&#8217;t complex (you can create a new Communication Site in about 7 seconds!), deciding how it should look, what navigation it should have, what content it should house, etc. can take some real planning. Let&#8217;s gloss over all that, shall we? </p>



<p class="wp-block-paragraph">Once you have the new Communication Site &#8211; we tend to build it in a location like <code>/sites/NEWIntranet</code> &#8211; you&#8217;ll come back and click the <strong>Replace root site</strong> button. On the following screen, you simply provide the URL to the Communication Site you&#8217;ve just built. Note the caveats: the new site can be a Communication Site or a Team Site, but it can&#8217;t be a Hub Site or connected to a Microsoft 365 Group. This is because swapping a site into the root means fixing up a lot of links and other stuff under the covers.</p>



<p class="wp-block-paragraph">Also note the existing root site will be moved to an archive location. You won&#8217;t lose the site or its contents &#8211; but it won&#8217;t be in the same spot anymore.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="885" height="724" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-10.png?resize=885%2C724&#038;ssl=1" alt="" class="wp-image-44794" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-10.png?w=885&amp;ssl=1 885w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-10.png?resize=300%2C245&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-10.png?resize=768%2C628&amp;ssl=1 768w" sizes="auto, (max-width: 885px) 100vw, 885px" /></figure>
</div>


<p class="wp-block-paragraph">At this point, I&#8217;ve stopped my exploration because clicking that <strong>Save </strong>button is going to initiate what we call a &#8220;site swap&#8221;. Once it&#8217;s done, your new site will be in the root location, the old site will be in the archive location, and everything should work just great. You&#8217;ve put a whole communication plan about this is place before you click the button, right?</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">If you want more control over this process, you can do what some of us have been doing for several years now: you can use the <a rel="noreferrer noopener" href="https://pnp.github.io/powershell/" data-type="URL" data-id="https://pnp.github.io/powershell/" target="_blank">PnP.PowerShell</a> <a rel="noreferrer noopener" href="https://pnp.github.io/powershell/cmdlets/Invoke-PnPSiteSwap.html" data-type="URL" data-id="https://pnp.github.io/powershell/cmdlets/Invoke-PnPSiteSwap.html" target="_blank">Invoke-PnPSiteSwap</a> cmdlet. You still build the new site in a new location, but when it comes time to do the site swap, you simply call the cmdlet, something like this:</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">$tenant = "mytenant"
$adminSiteUrl = "https://$($tenant)-admin.sharepoint.com"

Connect-PnPOnline $adminSiteUrl -Interactive

Invoke-PnPSiteSwap `
    -SourceUrl "https://$($tenant).sharepoint.com/sites/Intranet" `
    -TargetUrl "https://$($tenant).sharepoint.com/" `
    -ArchiveUrl "https://$($tenant).sharepoint.com/sites/Archive"</code></pre>



<p class="wp-block-paragraph">This may appeal to you because you can specify the archive destination, but the net effect is exactly the same. Note that you can only use this cmdlet to swap a site into the root; you can&#8217;t arbitrarily swap two other sites. (You can however, rename them.)</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">It&#8217;s great to see suggestions like this coming into the admin UIs. It&#8217;ll help a lot of organizations with a support staff of one &#8211; and there are more of those than most people think!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/06/23/replace-that-classic-sharepoint-root-site/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44789</post-id>	</item>
		<item>
		<title>Missing Site Nav Edit Link and Extraneous Icons</title>
		<link>https://sympmarc.com/2022/06/22/missing-site-nav-edit-link-and-extraneous-icons/</link>
					<comments>https://sympmarc.com/2022/06/22/missing-site-nav-edit-link-and-extraneous-icons/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Wed, 22 Jun 2022 20:59:56 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[localStorage]]></category>
		<category><![CDATA[Viva Connections]]></category>
		<category><![CDATA[Site Nav]]></category>
		<category><![CDATA[Edge]]></category>
		<category><![CDATA[Developer Tools]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44776</guid>

					<description><![CDATA[Another day, another weird SharePoint problem. We&#8217;re working on a client Intranet, and just launched it yesterday. Everything works great and the client is happy. But, as is often the case, we needed to make a few tweaks to the Site Nav based on user feedback. (An Intranet is never done, folks.) If you look...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Another day, another weird SharePoint problem. We&#8217;re working on a client Intranet, and just launched it yesterday. Everything works great and the client is happy. But, as is often the case, we needed to make a few tweaks to the Site Nav based on user feedback. (An Intranet is never done, folks.)</p>



<p class="wp-block-paragraph">If you look at the screenshot of the site banner below, you can see the issue. There are extraneous icons on the far right, and the <strong>Edit </strong>link is missing for the Site Nav. That means we can&#8217;t make any changes to the Site Nav. There&#8217;s no settings page for it and there&#8217;s no workaround that I could find.</p>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="113" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image.png?resize=1024%2C113&#038;ssl=1" alt="" class="wp-image-44777" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image.png?resize=1024%2C113&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image.png?resize=300%2C33&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image.png?resize=768%2C85&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image.png?resize=1536%2C170&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image.png?resize=2048%2C226&amp;ssl=1 2048w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image.png?w=2580&amp;ssl=1 2580w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">That is, until I posted the quandary to my MVP channels and Cathy Dew (<a rel="noreferrer noopener" href="https://twitter.com/catpaint1" data-type="URL" data-id="https://twitter.com/catpaint1" target="_blank">@catpaint1</a>) gave me an obscure fix. (I shouldn&#8217;t need to know exactly who on the Product Team to contact when something like this happens. It&#8217;s a bug and it should be fixed. I feel for all of you out there who must go into support ticket hell to resolve these things.)</p>



<p class="wp-block-paragraph">If you ever get yourself into this state &#8211; and if you use Edge, you may well get here &#8211; this will fix things for you. (Another option is to switch to Chrome, but that feels wrong.)</p>



<p class="wp-block-paragraph">This may happen to you if the following things are true:</p>



<ul class="wp-block-list"><li>You use Edge as your browser</li><li><span style="color: initial;">You&#8217;ve enabled Viva Connections</span></li><li>You&#8217;ve opened the Intranet in Microsoft Teams <em>in the browser</em></li><li>You&#8217;re in any SharePoint site and want to edit the Site Nav</li></ul>



<p class="wp-block-paragraph">The people who manage the Intranet are the most likely to do all of these things, and in the sequence that causes the problem.</p>



<p class="wp-block-paragraph">The fix is simple if you&#8217;re used to the tooling but may not be familiar to you if you haven&#8217;t used the Developer Tools. Trust me, it&#8217;s not as bad as it looks. Here are the steps.</p>



<ul class="wp-block-list"><li>Open the Developer tools in your browser by hitting the F12 key</li><li>If you haven&#8217;t ever done this before, you&#8217;ll get this dialog:</li></ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="313" height="394" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-1.png?resize=313%2C394&#038;ssl=1" alt="" class="wp-image-44778" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-1.png?w=313&amp;ssl=1 313w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-1.png?resize=238%2C300&amp;ssl=1 238w" sizes="auto, (max-width: 313px) 100vw, 313px" /></figure>
</div>


<ul class="wp-block-list"><li>Click the <strong>Open DevTools</strong> button. If you&#8217;d like to avoid this dialog in the future, check the <strong>Remember my decision</strong> box first.</li><li>The Developer Tools will open on the right side of the screen (by default &#8211; if you&#8217;ve used them before, they will be wherever you last docked them).</li><li>Click the <strong>Console</strong> tab. If your screen isn&#8217;t very big, you may need to click on the <strong>&gt;&gt;</strong> to see the tab.</li></ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="551" height="103" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-2.png?resize=551%2C103&#038;ssl=1" alt="" class="wp-image-44779" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-2.png?w=551&amp;ssl=1 551w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-2.png?resize=300%2C56&amp;ssl=1 300w" sizes="auto, (max-width: 551px) 100vw, 551px" /></figure>
</div>


<ul class="wp-block-list"><li>At the bottom of the panel, you&#8217;ll have a command prompt. (You may well see a whole bunch of errors and other junk in that panel. To be honest, Microsoft does a horrible job cleaning up their debugging messages and spurious errors. But that&#8217;s a diatribe for another day.)</li><li>Type <code>localStorage.hostedApp</code> and hit <strong>Enter</strong>. If you see the <code>'viva1p'</code> value like I do below, that&#8217;s the culprit.</li></ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="290" height="65" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-3.png?resize=290%2C65&#038;ssl=1" alt="" class="wp-image-44780"/></figure>
</div>


<ul class="wp-block-list"><li>Type <code>localStorage.hostedApp = null</code> and hit <strong>Enter</strong>. You&#8217;ll see the value is now <code>null</code>.</li></ul>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="326" height="59" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-4.png?resize=326%2C59&#038;ssl=1" alt="" class="wp-image-44781" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-4.png?w=326&amp;ssl=1 326w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-4.png?resize=300%2C54&amp;ssl=1 300w" sizes="auto, (max-width: 326px) 100vw, 326px" /></figure>
</div>


<ul class="wp-block-list"><li>Refresh the browser and all shall be good with the world &#8211; until the next time you open Microsoft Teams<em> in the browser</em> and navigate to the Intranet. (I&#8217;ve been sitting here toggling this back and forth to test it.)</li></ul>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="74" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-5.png?resize=1024%2C74&#038;ssl=1" alt="" class="wp-image-44783" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-5.png?resize=1024%2C74&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-5.png?resize=300%2C22&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-5.png?resize=768%2C55&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-5.png?resize=1536%2C111&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/06/image-5.png?resize=2048%2C147&amp;ssl=1 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">What&#8217;s happening here is Microsoft Teams &#8211; the Viva Connections app in Teams, actually &#8211; is setting a value in the <code>localStorage</code> of your browser. That value for <code>hostedApp</code> tells SharePoint to render the page in a Teams-friendly way, with those extra icons on the right. When we go to the site in SharePoint instead, that value is still set, and the page renders with those icons. It also happens to break the <strong>Edit </strong>link for the Site Nav.</p>



<p class="wp-block-paragraph">This fix ONLY sets the <code>localStorage.hostedApp</code> value in your browser to null. It doesn&#8217;t do anything dangerous or scary.</p>



<p class="wp-block-paragraph">Note that this is a BUG. Microsoft knows about it, and one might hope they will fix it &#8211; soon. Until then, we have this fix.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/06/22/missing-site-nav-edit-link-and-extraneous-icons/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44776</post-id>	</item>
		<item>
		<title>Adding an Embed Web Part in a Modern SharePoint Online Page</title>
		<link>https://sympmarc.com/2022/05/17/adding-an-embed-web-part-in-a-modern-sharepoint-online-page/</link>
					<comments>https://sympmarc.com/2022/05/17/adding-an-embed-web-part-in-a-modern-sharepoint-online-page/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Tue, 17 May 2022 17:39:22 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[embed code]]></category>
		<category><![CDATA[HTML Field Security]]></category>
		<category><![CDATA[iframe]]></category>
		<category><![CDATA[CustomScriptSafeDomains]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44687</guid>

					<description><![CDATA[This is something which has come up in several contexts in the last few months, so I figured I&#8217;d put virtual pen to virtual paper and record it for future me and all of you. If you&#8217;ve ever tried to embed content from an external source in a SharePoint page using the Embed Web Part,...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">This is something which has come up in several contexts in the last few months, so I figured I&#8217;d put virtual pen to virtual paper and record it for future me and all of you.</p>



<p class="wp-block-paragraph">If you&#8217;ve ever tried to embed content from an external source in a SharePoint page using the Embed Web Part, you may have gotten an error similar to this:</p>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p><em>Embedding content from this website isn&#8217;t allowed, but your admin can change this setting. They will need to add &#8216;&lt;specific URL&gt;&#8217; to the list of sites that are allowed.</em></p><p><a rel="noreferrer noopener" href="https://go.microsoft.com/fwlink/p/?linkid=837500" target="_blank">Guidance on changing site settings</a></p><p><a rel="noreferrer noopener" href="https://go.microsoft.com/fwlink/?LinkId=809078" target="_blank">Learn more</a></p></blockquote>



<p class="wp-block-paragraph">It looks something like the screenshot below. It doesn&#8217;t matter if it&#8217;s a &#8220;bare&#8221; URL or you&#8217;ve encased the URL in an <code>iframe</code> explicitly, like I have below.</p>


<div class="wp-block-image size-full">
<figure class="aligncenter"><img data-recalc-dims="1" loading="lazy" decoding="async" width="473" height="748" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/05/Embed.png?resize=473%2C748&#038;ssl=1" alt="" class="wp-image-44690" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/05/Embed.png?w=473&amp;ssl=1 473w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/05/Embed.png?resize=190%2C300&amp;ssl=1 190w" sizes="auto, (max-width: 473px) 100vw, 473px" /></figure>
</div>


<p class="wp-block-paragraph">When you use the Embed Web Part, SharePoint takes the URL you provide and wraps it in an <code>iframe</code>. An <a rel="noreferrer noopener" href="https://en.wikipedia.org/wiki/HTML_element#Frames" target="_blank">iframe</a> is a way for the browser to display the content inline but protect the page from any malicious actions the embedded site might try to take when it loads. Think of it like displaying a scorpion in a glass box. The scorpion may not have any venom, but since you don&#8217;t really know, you leave it in the box. You can see it just fine, but it can&#8217;t hurt you.</p>



<p class="wp-block-paragraph">It turns out the links below the error explain the solution, but I had never clicked those links and read the details! In fact, unless it was years ago, I&#8217;ve just ignored the setting we need to solve this.</p>



<p class="wp-block-paragraph">If you&#8217;d like to embed content from a URL, you&#8217;ll need to make sure you&#8217;ve added the <a rel="noreferrer noopener" href="https://en.wikipedia.org/wiki/Domain_name" target="_blank">domain name</a> in the site settings. To do this, click on the <strong>cog</strong> / <strong>Site information</strong> / <strong>View all site settings</strong> / <strong>HTML Field Security</strong>. Here, you can add the domains you&#8217;d like to allow to be embedded.</p>



<p class="wp-block-paragraph">Microsoft provides a default set of common domains, which as of this writing and in my tenant is the following. It&#8217;s a bit of an archeology lesson to read through them all!</p>



<ul class="wp-block-list"><li>youtube.com</li><li>youtube-nocookie.com</li><li>player.vimeo.com</li><li>bing.com</li><li>office.microsoft.com</li><li>officeclient.microsoft.com</li><li>store.office.com</li><li>skydrive.live.com</li><li>powerbi.com</li><li>powerbigov.us</li><li>sway.com</li><li>docs.com</li><li>microsoftstream.com</li><li>powerapps.com</li><li>flow.microsoft.com</li><li>powerapps.us</li><li>flow.microsoft.us</li><li>app.smartsheet.com</li><li>publish.smartsheet.com</li><li>www.slideshare.net</li><li>youtu.be</li><li>read.amazon.com</li><li>onedrive.live.com</li><li>www.microsoft.com</li><li>forms.office365.us</li><li>support.office.com</li><li>embed.ted.com</li><li>channel9.msdn.com</li><li>forms.office.com</li><li>videoplayercdn.osi.office.net</li><li>sway.office.com</li><li>linkedin.com</li><li>web.yammer.com</li><li>customervoice.microsoft.com</li></ul>



<p class="wp-block-paragraph">You can add the domain you&#8217;d like to use in the settings. Once you&#8217;d added it to the site, you can embed content from that domain &#8211; including its subdomains &#8211; in the site with the Embed Web Part.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="808" height="384" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/05/image.png?resize=808%2C384&#038;ssl=1" alt="" class="wp-image-44693" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/05/image.png?w=808&amp;ssl=1 808w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/05/image.png?resize=300%2C143&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/05/image.png?resize=768%2C365&amp;ssl=1 768w" sizes="auto, (max-width: 808px) 100vw, 808px" /></figure>



<p class="wp-block-paragraph">Note that this is a <em>per site</em> setting. If you want to embed content from the same domain in multiple sites, you&#8217;ll need to add it to each site. As far as I know, there&#8217;s no programmatic way to add a domain across sites, but I could be mistaken about this.</p>



<p class="wp-block-paragraph">If you&#8217;re feeling loosey-goosey, you <strong><em>could</em></strong> change the setting to allow embeds from any domain, but you may not want to do that for security reasons.</p>



<p class="wp-block-paragraph">Finally, you must be a <strong>Site Owner</strong> to change these settings. If you don&#8217;t have access to this setting, you&#8217;ll need to get help from someone who does.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p class="wp-block-paragraph">Update 2022-06-07 &#8211; Thanks to <strong>El_Topo</strong> for the <a href="https://sympmarc.com/2022/05/17/adding-an-embed-web-part-in-a-modern-sharepoint-online-page/#comment-168595">comment</a> that we can programmatically update these settings. It led me to an article from Chris Kent (<a rel="noreferrer noopener" href="https://twitter.com/theChrisKent" data-type="URL" data-id="https://twitter.com/theChrisKent" target="_blank">@theChrisKent</a>) entitled <a href="https://thechriskent.com/2019/11/11/extending-the-list-of-sites-you-can-embed-from-in-sharepoint-using-powershell/">Extending the List of Sites You Can Embed From in SharePoint Using PowerShell</a> which explains how to do so. Sometimes I&#8217;m the last to know!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/05/17/adding-an-embed-web-part-in-a-modern-sharepoint-online-page/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44687</post-id>	</item>
		<item>
		<title>News Post Stuck in Hub Site&#8217;s News Web Part Even After Deletion</title>
		<link>https://sympmarc.com/2022/03/22/news-post-stuck-in-hub-sites-news-web-part-even-after-deletion/</link>
					<comments>https://sympmarc.com/2022/03/22/news-post-stuck-in-hub-sites-news-web-part-even-after-deletion/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Tue, 22 Mar 2022 20:31:02 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[News posts]]></category>
		<category><![CDATA[PromotedState]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44583</guid>

					<description><![CDATA[This is something that&#8217;s happened to me in multiple tenants recently. When I delete a News Post which I&#8217;ve created in a Hub Site, the post never goes away in the News Web Part. It always seems to be a post we&#8217;ve created as some sort of point-proving demo, too. You know, with a title...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">This is something that&#8217;s happened to me in multiple tenants recently. When I delete a News Post which I&#8217;ve created in a Hub Site, the post never goes away in the News Web Part. It always seems to be a post we&#8217;ve created as some sort of point-proving demo, too. You know, with a title like: &#8220;This would be a really helpful news post&#8221; or &#8220;Be sure to delete me.&#8221;</p>



<p class="wp-block-paragraph">Was there a trick was missing? I&#8217;ve tried reindexing, emptying the recycle bin, everything I could think of, but no joy.</p>



<p class="wp-block-paragraph">The light finally came on when I posted to #SPHelp on Twitter and got this response from my pal Sharon Weaver (<a href="https://twitter.com/shareoneweaver" data-type="URL" data-id="https://twitter.com/shareoneweaver" target="_blank" rel="noreferrer noopener">@shareoneweaver</a>).</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">I solved this problem by changing the promoted state to 0. Show promoted state field in view, edit and save it with no changes, and then change the value from 2 to 0. Voila. Then just hide the field again. Need to make a blog post but haven’t had a chance. <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>&mdash; Sharon Weaver (@sharoneweaver) <a href="https://twitter.com/sharoneweaver/status/1506356808180539405?ref_src=twsrc%5Etfw">March 22, 2022</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p class="wp-block-paragraph">When <code>PromotedState</code> is 2, the page is a News Post. When it&#8217;s 0, the page is just a page. So, in effect, you want to remove the &#8220;newsiness&#8221; from the page. Then you can get rid of it with impunity. </p>



<p class="wp-block-paragraph">Thing is, you can&#8217;t edit <code>PromotedState</code> through the UI anymore. But I had a solution!</p>



<p class="wp-block-paragraph">No surprise, but ShareGate to the rescue. I exported the metadata for the page, edited <code>PromotedState</code> value from 2 to 0 in Excel, imported the change to <code>PromotedState</code>, manually kicked off a reindex of the library &#8211; and the pesky News Post is gone from the News Web Part!</p>



<p class="wp-block-paragraph">Not trivial, but it worked. It&#8217;s a bug.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/03/22/news-post-stuck-in-hub-sites-news-web-part-even-after-deletion/feed/</wfw:commentRss>
			<slash:comments>11</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44583</post-id>	</item>
		<item>
		<title>SharePoint Site Lock and Remove from Search Results</title>
		<link>https://sympmarc.com/2022/03/10/sharepoint-site-lock-and-remove-from-search-results/</link>
					<comments>https://sympmarc.com/2022/03/10/sharepoint-site-lock-and-remove-from-search-results/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 10 Mar 2022 23:05:03 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[migration]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=43966</guid>

					<description><![CDATA[At Sympraxis, we often work with clients who have been using SharePoint for a long time. In many of these cases, they have been using SharePoint basically as a cloud-based file server. At some point in the past, they have done a lift and shift from &#8220;on premises&#8221; servers (wherever they may live) into SharePoint...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">At Sympraxis, we often work with clients who have been using SharePoint for a long time. In many of these cases, they have been using SharePoint basically as a cloud-based file server. At some point in the past, they have done a lift and shift from &#8220;on premises&#8221; servers (wherever they may live) into SharePoint on premises or SharePoint Online. They are getting little value for their use of the platform, and they want to move up the <a href="https://docs.microsoft.com/en-us/microsoft-365/community/microsoft365-maturity-model--intro?WT.mc_id=M365-MVP-4030555">Microsoft 365 Maturity Model</a>.</p>



<p class="wp-block-paragraph">One of the things we often need to do is migrate content from its current location into a more refined and purpose-built site topology and information architecture.</p>



<p class="wp-block-paragraph">When we do that migration, we don&#8217;t want to delete the old site(s). Instead, we want to lock them from accidental updates and remove them from the search index. Since we&#8217;re migrating the content into new locations, we don&#8217;t want to old content to show up in search results.</p>



<p class="wp-block-paragraph">The PowerShell below is useful in that it allows us to take care of those two steps easily. It&#8217;s meant as an example, but it is working code. You might more realistically wrap this in a <code>foreach</code> to apply to multiple sites at the same time.</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">$tenantName&nbsp;=&nbsp;"your&nbsp;tenant&nbsp;name&nbsp;here"
$spRoot&nbsp;=&nbsp;"https://$($tenantName).sharepoint.com"
$siteCollectionUrlFragment&nbsp;=&nbsp;"foo"&nbsp;#&nbsp;Part&nbsp;of&nbsp;the&nbsp;URL&nbsp;after&nbsp;/sites/,&nbsp;e.g.,&nbsp;HRTeam,&nbsp;Marketing,&nbsp;etc.

#&nbsp;Work&nbsp;on&nbsp;this&nbsp;Site&nbsp;Collection
$siteCollection&nbsp;=&nbsp;"$(spRoot)/sites/$($siteCollectionUrlFragment)"

#&nbsp;Connect&nbsp;to&nbsp;Admin&nbsp;Center
$adminSiteUrl&nbsp;=&nbsp;"https://$($tenantName)-admin.sharepoint.com/"
$adminConnection&nbsp;=&nbsp;Connect-PnPOnline&nbsp;-Url&nbsp;$AdminSiteUrl&nbsp;-Interactive
&nbsp;
#&nbsp;Connect&nbsp;to&nbsp;Site&nbsp;Collection
$siteCollectionConnection&nbsp;=&nbsp;Connect-PnPOnline&nbsp;-Url&nbsp;$siteCollection&nbsp;-Interactive

#&nbsp;Needed&nbsp;to&nbsp;set&nbsp;NoCrawl
Set-PnPSite&nbsp;-Identity&nbsp;$siteCollection&nbsp;-DenyAndAddCustomizePages&nbsp;$false
&nbsp;
#&nbsp;Exclude&nbsp;Site&nbsp;Collection&nbsp;from&nbsp;Search&nbsp;Index
$Web&nbsp;=&nbsp;Get-PnPWeb&nbsp;-Connection&nbsp;$siteCollectionConnection
$Web.NoCrawl&nbsp;=&nbsp;$true
$Web.Update()
Invoke-PnPQuery

#&nbsp;Lock&nbsp;the&nbsp;site
Set-PnPSite&nbsp;-Identity&nbsp;$siteCollection&nbsp;-LockState&nbsp;ReadOnly</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/03/10/sharepoint-site-lock-and-remove-from-search-results/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">43966</post-id>	</item>
		<item>
		<title>Dear Microsoft: Please Fix the Search &#038; Intelligence Center, Which Gives Us Only Minimal Insights</title>
		<link>https://sympmarc.com/2022/03/01/dear-microsoft-please-fix-the-search-intelligence-center-which-gives-us-only-minimal-insights/</link>
					<comments>https://sympmarc.com/2022/03/01/dear-microsoft-please-fix-the-search-intelligence-center-which-gives-us-only-minimal-insights/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Tue, 01 Mar 2022 20:35:18 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Microsoft Search]]></category>
		<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Search Results]]></category>
		<category><![CDATA[search]]></category>
		<category><![CDATA[Microsoft 365]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44535</guid>

					<description><![CDATA[Last week, we had a client wondering why they saw this in the Search &#38; Intelligence Admin Center. Not only was Top queries showing &#8220;No data&#8221;, but there was &#8220;No data&#8221; for No results queries and Abandoned queries, too. This was the case even when we changed the filter from the last 31 days to...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">Last week, we had a client wondering why they saw this in the Search &amp; Intelligence Admin Center.</p>



<div class="wp-block-image"><figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="327" height="254" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/03/image.png?resize=327%2C254&#038;ssl=1" alt="" class="wp-image-44536" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/03/image.png?w=327&amp;ssl=1 327w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/03/image.png?resize=300%2C233&amp;ssl=1 300w" sizes="auto, (max-width: 327px) 100vw, 327px" /></figure></div>



<p class="wp-block-paragraph">Not only was <strong>Top queries</strong> showing &#8220;No data&#8221;, but there was &#8220;No data&#8221; for <strong>No results queries</strong> and <strong>Abandoned queries</strong>, too. This was the case even when we changed the filter from the last 31 days to the last 12 months. Surely people were searching for <strong><em>something</em></strong>!</p>



<p class="wp-block-paragraph">We decided to try putting in a ticket with Microsoft to find out why it wasn&#8217;t working. At least it wasn&#8217;t working in such a way where we could get any &#8220;intelligence&#8221; from it.</p>



<p class="wp-block-paragraph">After about a week, I finally got past the first line of defense at Microsoft (who told me to try a different account, etc. &#8211; nothing useful) to find out why we weren’t seeing much in the <strong>Search &amp; intelligence</strong> stats. Unfortunately, the answer isn’t a good one.</p>



<figure class="wp-block-pullquote"><blockquote><p>It seems like the search queries are generated only when the searches are made on the Sharepoint Landing Page and not within the Sharepoint site search. Here is the information for your reference.</p><p>&#8220;You can get the tenant level usage analytics reports in Microsoft Admin center under Settings&gt; Search and Intelligence&gt; Insights to access the 5 usage analytics reports (top queries, abandoned queries, no result queries, query volume, and Impression distribution) aggregated over SharePoint home (This only covers searches made from the SharePoint landing page) and office.com workloads.&#8221;</p></blockquote></figure>



<p class="wp-block-paragraph">(And yes, he spelled SharePoint wrong.) I vaguely remember learning this from Mikael Svenson (<a rel="noreferrer noopener" href="https://twitter.com/mikaelsvenson" data-type="URL" data-id="https://twitter.com/mikaelsvenson" target="_blank">@mikaelsvenson</a>) long ago. I probably blocked it out of my mind.</p>



<p class="wp-block-paragraph">Rereading the articles in the References section below &#8211; with a fine-toothed comb- I see the answer was there, too.</p>



<p class="wp-block-paragraph">With data only coming from &#8220;SharePoint Home (the site with URL ending in /SharePoint.aspx), Office.com, and Microsoft Search in Bing work tab search boxes&#8221;, we get barely a slice of the searches people actually do, and there&#8217;s very little intelligence we can get from such narrowly scoped analytics. Now that the Microsoft 365 search box is at the top of almost every page in Microsoft 365, I&#8217;d expect we could see all the search queries people do. I&#8217;m hoping this isn&#8217;t a permanent state.</p>



<p class="wp-block-paragraph">As an Intranet manager, one of the most valuable things you can know is what people are searching for. It tells you what content is missing or where you haven&#8217;t done a good job in building the navigation or other parts of the information architecture. Unfulfilled searches mean content is missing entirely or maybe the permissions aren&#8217;t set right on content which <em>is</em> available. Setting up search isn&#8217;t a &#8220;one and done&#8221; thing. Monitoring and mining search should be a role at every organization with electronic content. Without good tools to do so, we&#8217;re driving blind.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list"><li><a href="https://docs.microsoft.com/en-us/microsoftsearch/setup-microsoft-search">Set up Microsoft Search | Microsoft Docs</a></li><li><a href="https://docs.microsoft.com/en-us/microsoftsearch/usage-reports">Search Usage Reports | Microsoft Docs</a></li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/03/01/dear-microsoft-please-fix-the-search-intelligence-center-which-gives-us-only-minimal-insights/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44535</post-id>	</item>
		<item>
		<title>SharePoint Content Management: Distributed vs. Centralized</title>
		<link>https://sympmarc.com/2022/02/17/sharepoint-content-management-distributed-vs-centralized/</link>
					<comments>https://sympmarc.com/2022/02/17/sharepoint-content-management-distributed-vs-centralized/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 17 Feb 2022 22:52:34 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Content Types]]></category>
		<category><![CDATA[Site Templates]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[information architecture]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44393</guid>

					<description><![CDATA[In modern SharePoint, we have content management tools which have been honed over decades of SharePoint use. At the same time, our ideas about content management have evolved over that time. People are far more comfortable maintaining content on the Web than they were when SharePoint first was released. Back then, we were often transitioning...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">In modern SharePoint, we have content management tools which have been honed over decades of SharePoint use. At the same time, our ideas about content management have evolved over that time. People are far more comfortable maintaining content on the Web than they were when SharePoint first was released. Back then, we were often transitioning from a printed content mindset, so many organizations simply tried to apply the same sort of processes and logic to Web content that they had been using with physical content for the prior decades. This often led to quite convoluted &#8220;requirements&#8221; in order to support that traditional way of thinking about content management.</p>



<p class="wp-block-paragraph">These days most people are very comfortable with the Web. For many people in the workplace now, it&#8217;s the only thing they have known. Binders like this on bookshelves above desks would be an anathema to most of them.</p>



<div class="wp-block-image is-style-default"><figure class="aligncenter is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/i.pinimg.com/originals/15/db/f2/15dbf2916ad774e446db0801789c2d0f.jpg?resize=400%2C252&#038;ssl=1" alt="See the source image" width="400" height="252"/></figure></div>



<p class="wp-block-paragraph">So, cutting to today, we can instantiate simpler content management rules, and we can also rethink content ownership.</p>



<h2 class="wp-block-heading">Centralized Content Management</h2>



<p class="wp-block-paragraph">In a centralized content management scenario, a particular content type &#8211; and you should think about this on a content type level &#8211; is fully managed by a central group of people. Some examples might include:</p>



<ul class="wp-block-list"><li>All Policies are managed by the Human Resources department</li><li>Operations is the only department which can issue a Standard Operating Procedure</li><li>Any Standard having to do with money or timekeeping must be written by Finance</li></ul>



<p class="wp-block-paragraph">These are perfectly legitimate scenarios. However, they require a &#8220;pinch point&#8221; in that anyone in the organization who wants to issue a policy, for example, must work with Human Resources to create and publish it. It puts the policy content management egg into one basket.</p>



<p class="wp-block-paragraph">In many cases, centralized content management has been the norm for many years. Some of this harks back to the print-to-Web transition and some of it harks back to the ways SharePoint and the Web worked in their earlier days.</p>



<h2 class="wp-block-heading">Distributed Content Management</h2>



<p class="wp-block-paragraph">In a distributed content management scenario, we allow the people who understand the content best to manage it where they manage the rest of their content. Some common scenarios include:</p>



<ul class="wp-block-list"><li>All departments can publish Policies based on their operational oversight</li><li>Standard Operating Procedures are certainly published by Operations, but other departments can also publish them, as needed</li><li>While Finance controls all financial Standards, other groups can publish them as well</li></ul>



<p class="wp-block-paragraph">For this distributed publishing to work well, we need several things in place:</p>



<ul class="wp-block-list"><li>Each group (usually departments, but it can vary based on the Content Type) creates and vets the content in their own Team Site.</li><li>Team Site Owners can publish content from their Team Site to their Intranet site, simply using <code>Copy to</code> or, if a more rigid process is required, with that process implemented with appropriate tools.</li><li>Each site where a specific business object will be published has the proper information architecture (Site Columns, Content Types, Document Libraries) for that business object instantiated in it.</li><li>The metadata used in each Content Type should provide enough information &#8211; and not much more &#8211; that&#8217;s required to display the content in several different ways:<ul><li>In a &#8220;content center&#8221; for that Content Type or family of Content Types</li><li>In search-driven experiences embedded in specific pages</li><li>Natively in the Document Library where the content is actually stored</li></ul></li></ul>



<h2 class="wp-block-heading">Distributed Publishing Example</h2>



<p class="wp-block-paragraph">When we work with clients, we almost always use the example of <strong>Policies </strong>to illustrate distributed publishing. <strong>Policies </strong>are a common business object which is well-understood by most people in an organization. Some organizations have many policies, some have just a few. In most cases, each department has its own set of policies which it has created.</p>



<p class="wp-block-paragraph">We choose a site to use as the starting point. Usually, it&#8217;s the first group which has said they need to post <strong>Policies</strong>. n almost all cases, we first create a &#8220;base document&#8221; content type &#8211; something like <strong>Base ClientName Document</strong>. All the custom Content Types we create for the organization inherit directly or indirectly from this <strong>Base ClientName Document</strong> Content Type. In that site, we create a Content Type called <strong>Policy</strong>, which either inherits from <strong>Base ClientName Document</strong> or another parent Content Type that makes sense for hierarchy.</p>



<p class="wp-block-paragraph">For a <strong>Policy</strong>, the metadata may vary from organization to organization, but we usually hove some columns like:</p>



<ul class="wp-block-list"><li>Effective Date</li><li>Expiration Date</li><li>Applies To (maybe a set of geographies or departments) </li></ul>



<p class="wp-block-paragraph">Next, we create a Document Library called <strong>Policies</strong> and enable the <strong>Policy </strong>Content Type in it, removing the default Document Content Type. We create a <strong>Policy </strong>in the <strong>Policies </strong>library &#8211; singular and plural. At this point, there&#8217;s usually a little iteration on the metadata, etc. This is a good pause to take, so we can be sure we understand how best to construct <strong>Policy </strong>to serve its purposes.</p>



<p class="wp-block-paragraph">Now that we have a Content Type and it is enabled in a library, we turn to <code>PnP.PowerShell</code>. With PowerShell, we can export the definition on the library as a Site Script unisng <a href="https://pnp.github.io/powershell/cmdlets/Get-PnPSiteScriptFromList.html">Get-PnPSiteScriptFromList</a>, like so:</p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">Get-PnPSiteScriptFromList -Url $fullPath | Out-File "./ListName.json"</code></pre>



<p class="wp-block-paragraph">where <code>$fullPath</code> is the full URL to the list, like &#8220;https://contoso.sharepoint.com/sites/teamsite/lists/MyList&#8221;. Note that <code>PnP.PowerShell</code> doesn&#8217;t care if we&#8217;re working with a list or library: under the covers, they are basically the same thing.</p>



<p class="wp-block-paragraph">This gives us a JSON file which can be instantiated as a Site Script using <a href="https://pnp.github.io/powershell/cmdlets/Add-PnPSiteScript.html" data-type="URL" data-id="https://pnp.github.io/powershell/cmdlets/Add-PnPSiteScript.html">Add-PnPSiteScript</a>. Then we can bundle that one Site Script into a Site Template (nee Site Design) or include additional Site Scripts if we want with <a href="https://pnp.github.io/powershell/cmdlets/Add-PnPSiteDesign.html">Add-PnPSiteDesign</a>. I&#8217;m going to gloss over this a little bit and come back to it in a future post.</p>



<p class="wp-block-paragraph">Now we have a Site Template we can apply to any site where we want to store <strong>Policies</strong>. Even if I&#8217;m going to include the Site Script in larger Site Templates, I may set up this simple Site Template to just instantiate the Policies library. I like the atomic approach to this.</p>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="845" height="513" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/image.png?resize=845%2C513&#038;ssl=1" alt="" class="wp-image-44501" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/image.png?w=845&amp;ssl=1 845w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/image.png?resize=300%2C182&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/image.png?resize=768%2C466&amp;ssl=1 768w" sizes="auto, (max-width: 845px) 100vw, 845px" /></figure>



<p class="wp-block-paragraph">When we choose to apply this Site Template to a site, we get the <strong>Policy </strong>Content Type (defined consistently, so to SharePoint it&#8217;s the same Content Type in each site) and a Policies library with it enabled.</p>



<p class="wp-block-paragraph">Now each group of people with a site can create a <strong>Policy </strong>in their library &#8211; following their processes &#8211; and we can roll all the <strong>Policies </strong>up across the tenant or across sites associated with a Hub Site very easily. Most of the time this means a custom page built using the <a rel="noreferrer noopener" href="https://microsoft-search.github.io/pnp-modern-search/" data-type="URL" data-id="https://microsoft-search.github.io/pnp-modern-search/" target="_blank">PnP Modern Search Web Parts</a> (just about my favorite Web Parts!). We often call this something like the <strong>Policy Center</strong>.</p>



<p class="wp-block-paragraph">End users can find a <strong>Policy </strong>where it&#8217;s published, perhaps by navigating into the HR site, or go to the <strong>Policy Center</strong> page we created above. We can also expose specific sets of <strong>Policies </strong>&#8211; maybe <strong>Policies </strong>which will expire in the next month &#8211; in experiences to help with central oversight.</p>



<p class="wp-block-paragraph">If you&#8217;re thinking that this is a lot of work, it really isn&#8217;t. I do it all the time &#8211; with many more Content Types in each tenant in which I work &#8211; and this whole process can be as little as a few hours of effort. Compare that to the dreadful user experience you might have if you&#8217;re just dumping <strong>Policies</strong> into libraries as a Document Content Type, wherever you might choose. And believe me, it&#8217;s more work to clean all this up <strong>after </strong>you have a lot of content in SharePoint than it is up front, or at least early on.</p>



<p class="wp-block-paragraph">Also note that starting at this level doesn&#8217;t mean you can&#8217;t layer more complex processes on top later. In fact, it makes it far easier when you get to that point; everything is neatly assorted so a <strong>Policy </strong>is a <strong>Policy </strong>is a <strong>Policy</strong>.</p>



<hr class="wp-block-separator"/>



<p class="wp-block-paragraph">Taking this approach is also one important part of moving up the maturity model for Microsoft 365. Check out the <a href="https://docs.microsoft.com/en-us/microsoft-365/community/microsoft365-maturity-model--management-of-content">Maturity Model for Microsoft 365 – Management of Content Competency</a> in the Microsoft 365 Community Docs.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/02/17/sharepoint-content-management-distributed-vs-centralized/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44393</post-id>	</item>
		<item>
		<title>Changing a SharePoint Site URL When Connected to Microsoft Teams</title>
		<link>https://sympmarc.com/2022/02/14/changing-a-sharepoint-site-url-when-connected-to-microsoft-teams/</link>
					<comments>https://sympmarc.com/2022/02/14/changing-a-sharepoint-site-url-when-connected-to-microsoft-teams/#respond</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Mon, 14 Feb 2022 13:53:49 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Microsoft Teams]]></category>
		<category><![CDATA[Redirect Site]]></category>
		<category><![CDATA[PnP.PowerShell]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44478</guid>

					<description><![CDATA[I shot myself in the foot today and I figured I&#8217;d share how I bandaged it back up. In actual fact, the healing was automagical. We had a Microsoft Team with its usual backing SharePoint site, and we wanted to reclaim the URL from that SharePoint site. This isn&#8217;t an unusual occurrence when there isn&#8217;t...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">I shot myself in the foot today and I figured I&#8217;d share how I bandaged it back up. In actual fact, the healing was automagical.</p>



<p class="wp-block-paragraph">We had a Microsoft Team with its usual backing SharePoint site, and we wanted to reclaim the URL from that SharePoint site. This isn&#8217;t an unusual occurrence when there isn&#8217;t much governance around Team or site creation. People create Teams with whatever names &#8211; and thus URLs &#8211; makes sense to them. Retrofitting some governance can take some renaming.</p>



<p class="wp-block-paragraph">Changing a SharePoint site&#8217;s URL isn&#8217;t that hard these days. I changed the URL in the SharePoint Admin Center easily. See <a href="https://docs.microsoft.com/en-us/sharepoint/change-site-address">Change a site address &#8211; SharePoint in Microsoft 365 | Microsoft Docs</a> for the steps.</p>



<p class="wp-block-paragraph">Since we wanted to reuse the URL, the next step was to delete the redirect site which is left behind for the old URL <code>PnP.Powershell</code>. See my post <a href="https://sympmarc.com/2021/10/27/cleaning-up-redirect-sites-in-sharepoint-online/">Cleaning Up Redirect Sites in SharePoint Online</a> for how and why you might want to do this.</p>



<p class="wp-block-paragraph">After the deletion of the redirect site, we realized the team had been accessing the SharePoint site exclusively in Microsoft Teams, so we went to check that the files were still available in Teams. Uh-oh. No, they weren&#8217;t.</p>



<p class="wp-block-paragraph">In Microsoft Teams, the Files tab in each channel was now broken, which is understandable &#8211; in retrospect. When we clicked into a Files tab, we got one of the standard &#8220;cute&#8221; error messages for a Document Library.</p>



<div class="wp-block-image is-style-default"><figure class="aligncenter size-full is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/Broken.png?resize=506%2C496&#038;ssl=1" alt="" class="wp-image-44480" width="506" height="496" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/Broken.png?w=1012&amp;ssl=1 1012w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/Broken.png?resize=300%2C294&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/Broken.png?resize=768%2C752&amp;ssl=1 768w" sizes="auto, (max-width: 506px) 100vw, 506px" /></figure></div>



<p class="wp-block-paragraph">Panic ensued, at least on my end. I don&#8217;t like it when I break stuff. </p>



<p class="wp-block-paragraph">I talked to my very smart colleagues at Sympraxis and we couldn&#8217;t come up with a reasonable fix for this. It was a good discussion, though, and showed the breadth of knowledge we have among us. I spent some time in Binglage, too, of course.</p>



<p class="wp-block-paragraph">After a while, I was looking at the Files tabs again, and I noticed the in the General channel&#8217;s Files tab was working fine. Hmm. I tried another channel (this Team has 13 channels), and it was broken. I tried another Files tab &#8211; also broken. I went back to the first non-General Files tab, quite by accident, and it was working fine again.</p>



<p class="wp-block-paragraph">Turns out, Teams was able to heal each Files tab by itself. By navigating to each of the Files tabs, navigating to another tab, and navigating back to the Files tab, Teams &#8220;fixed up&#8221; its connection to the corresponding folder in the SharePoint site&#8217;s Documents library. If I caught it right, on a few of the clicks into a Files tab, I saw the following message screen, showing that Teams was working on it.</p>



<div class="wp-block-image"><figure class="aligncenter size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/Fixing.png?resize=512%2C349&#038;ssl=1" alt="" class="wp-image-44481" width="512" height="349" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/Fixing.png?resize=1024%2C697&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/Fixing.png?resize=300%2C204&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/Fixing.png?resize=768%2C523&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/02/Fixing.png?w=1149&amp;ssl=1 1149w" sizes="auto, (max-width: 512px) 100vw, 512px" /></figure></div>



<p class="wp-block-paragraph">I&#8217;m extremely relieved that Teams was able to self-heal in this situation. While I was incautious in my actions, Teams was smart enough to fix itself for me. This is a sign of the good stuff Microsoft is doing these days, realizing end users make mistakes, and so do people like me, even with a lot of experience.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/02/14/changing-a-sharepoint-site-url-when-connected-to-microsoft-teams/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44478</post-id>	</item>
		<item>
		<title>Get All the Public or Private Team Sites in SharePoint with PnP.PowerShell</title>
		<link>https://sympmarc.com/2022/01/27/get-all-the-public-or-private-team-sites-in-sharepoint-with-pnp-powershell/</link>
					<comments>https://sympmarc.com/2022/01/27/get-all-the-public-or-private-team-sites-in-sharepoint-with-pnp-powershell/#respond</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Thu, 27 Jan 2022 21:15:45 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[Microsoft 365 Groups]]></category>
		<category><![CDATA[SharePoint Online]]></category>
		<category><![CDATA[PowerShell]]></category>
		<category><![CDATA[Team Site]]></category>
		<category><![CDATA[PnP.PowerShell]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44443</guid>

					<description><![CDATA[When you create a Team Site in SharePoint, you have an option to set the Team Site as: Public &#8211; anyone in the organization can access this site, or Private &#8211; only members can access this site Many people don&#8217;t know what the effect this setting has &#8211; I need to remind myself from time...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">When you create a Team Site in SharePoint, you have an option to set the Team Site as:</p>



<ul class="wp-block-list"><li><strong>Public </strong>&#8211; anyone in the organization can access this site, or</li><li><strong>Private</strong> &#8211; only members can access this site</li></ul>



<figure class="wp-block-image size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="881" height="686" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/01/image-4.png?resize=881%2C686&#038;ssl=1" alt="" class="wp-image-44444" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/01/image-4.png?w=881&amp;ssl=1 881w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/01/image-4.png?resize=300%2C234&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/01/image-4.png?resize=768%2C598&amp;ssl=1 768w" sizes="auto, (max-width: 881px) 100vw, 881px" /></figure>



<p class="wp-block-paragraph">Many people don&#8217;t know what the effect this setting has &#8211; I need to remind myself from time to time.</p>



<p class="wp-block-paragraph"><strong>P<strong>rivate </strong></strong>means the site is not discoverable; only people who are assigned specific permissions for the site can find it &#8211; even if they happen to guess the URL. Private Team Sites make sense when even knowing the name of the Team Site might be problematic. &#8220;Surprise Birthday Party&#8221; or &#8220;Firing People&#8221; come to mind.</p>



<p class="wp-block-paragraph"><strong>Public </strong>means the site is discoverable; anyone in the organization can find the site using search or even just guessing the URL. More important, when you create a site as Public, the <strong>Everyone except external users</strong> pseudogroup is added to the <strong>Members </strong>for the site. This means every licensed user can add and edit content &#8211; unless you change the permission settings.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="321" height="568" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/01/image-8.png?resize=321%2C568&#038;ssl=1" alt="" class="wp-image-44448" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/01/image-8.png?w=321&amp;ssl=1 321w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/01/image-8.png?resize=170%2C300&amp;ssl=1 170w" sizes="auto, (max-width: 321px) 100vw, 321px" /></figure>
</div>


<p class="wp-block-paragraph">If any of the above is a surprise to you, well I&#8217;m not surprised by that. I don&#8217;t think the wording on the <strong>Create site</strong> dialog is all that clear, and unless I&#8217;m missing something, I can&#8217;t find a Microsoft article which explains it in the amount of detail I give above.</p>



<p class="wp-block-paragraph">If you&#8217;d like to know what the setting is for any particular site, here&#8217;s how you&#8217;ll know. As of this writing (it&#8217;s moved around a bit in the past and can vary based on your header settings for the site), you can tell if a site you&#8217;re visiting is Public or Private by looking in the upper right on the home page:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="300" height="169" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/01/image-5.png?resize=300%2C169&#038;ssl=1" alt="" class="wp-image-44445"/></figure>
</div>

<div class="wp-block-image">
<figure class="aligncenter size-full"><img data-recalc-dims="1" loading="lazy" decoding="async" width="331" height="166" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/01/image-6.png?resize=331%2C166&#038;ssl=1" alt="" class="wp-image-44446" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/01/image-6.png?w=331&amp;ssl=1 331w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2022/01/image-6.png?resize=300%2C150&amp;ssl=1 300w" sizes="auto, (max-width: 331px) 100vw, 331px" /></figure>
</div>


<p class="wp-block-paragraph">That&#8217;s well and good if you have a site or two to check. But what if you&#8217;d like to know how <strong><em>all</em></strong> your sites are set up? Time to turn to trusty <code>PnP.PowerShell</code>. I needed to do this today and it was really hard to figure out where the setting was available. Turns out, it&#8217;s not a setting on the site itself, but on the underlying <strong>Microsoft 365 Group</strong>.</p>



<p class="wp-block-paragraph">Once I knew that, easy-peasy.</p>



<p class="wp-block-paragraph">This single line of <code>PnP.PowerShell</code> will retrieve all the Microsoft 365 Groups where the <code>Visibility</code> property is set to <strong>Private</strong>. If you want the <strong>Public</strong> sites, well I&#8217;ll leave that to you, dear reader. </p>



<pre class="wp-block-code"><code lang="powershell" class="language-powershell">Get-PnPMicrosoft365Group -IncludeSiteUrl | Where-Object { $_.Visibility -eq "Private"}</code></pre>



<p class="wp-block-paragraph">Of course, you&#8217;ll need the appropriate permissions and you&#8217;ll need to have connected to the SharePoint Admin site with <code>Connect-PnPOnline</code> first.</p>



<hr class="wp-block-separator has-css-opacity"/>



<p class="wp-block-paragraph">If you&#8217;d rather not use PowerShell (and Todd will be offended of you don&#8217;t!), you can also see this setting in the <a href="https://admin.exchange.microsoft.com/#/groups">Exchange admin center (microsoft.com)</a> in the Groups listing. That listing can be exported to Excel if you&#8217;d like to do more slicing and dicing.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list"><li><a href="https://support.microsoft.com/en-us/office/create-a-team-site-in-sharepoint-ef10c1e7-15f3-42a3-98aa-b5972711777d#:~:text=1%20Click%20%2B%20Create%20site.%202%20Give%20your,the%20permission%20settings%20or%20navigation%20of%20other%20sites.">Create a team site in SharePoint (microsoft.com)</a></li><li><a href="https://docs.microsoft.com/en-us/microsoft-365/community/changing-microsoft-teams-from-private-to-public-what-to-expect-in-sharepoint#:~:text=Private%20means%20only%20the%20members%20added%20will%20be,Microsoft%20Teams%20will%20automatically%20provision%2Fcreate%20a%20SharePoint%20site.">Changing Microsoft Teams from Private to Public, what to expect in SharePoint? | Microsoft Docs</a> &#8211; Veronique Lengelle (<a rel="noreferrer noopener" href="https://twitter.com/veronicageek" data-type="URL" data-id="https://twitter.com/veronicageek" target="_blank">@veronicageek</a>)</li><li><a href="https://sharepointmaven.com/public-vs-private-office-365-groups/">Public vs. Private Office 365 Groups &#8211; SharePoint Maven</a> &#8211; Greg Zelfond (<a rel="noreferrer noopener" href="https://twitter.com/gregoryzelfond" data-type="URL" data-id="https://twitter.com/gregoryzelfond" target="_blank">@gregoryzelfond</a>)</li></ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2022/01/27/get-all-the-public-or-private-team-sites-in-sharepoint-with-pnp-powershell/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44443</post-id>	</item>
		<item>
		<title>Fixing the `InvokerConnectionOverrideFailed` Error When a Power App Calls a Power Automate Flow</title>
		<link>https://sympmarc.com/2021/11/26/fixing-the-invokerconnectionoverridefailed-error-when-a-power-app-calls-a-flow/</link>
					<comments>https://sympmarc.com/2021/11/26/fixing-the-invokerconnectionoverridefailed-error-when-a-power-app-calls-a-flow/#comments</comments>
		
		<dc:creator><![CDATA[Marc D Anderson]]></dc:creator>
		<pubDate>Fri, 26 Nov 2021 19:15:18 +0000</pubDate>
				<category><![CDATA[SharePoint]]></category>
		<category><![CDATA[PowerApps]]></category>
		<category><![CDATA[Power App]]></category>
		<category><![CDATA[Power Automate]]></category>
		<category><![CDATA[flow]]></category>
		<guid isPermaLink="false">https://sympmarc.com/?p=44341</guid>

					<description><![CDATA[One of the cool things you can do from a canvas Power App is call a Power Automate flow. This is a great way to do something simple &#8211; like sending an email &#8211; or many more complex things you might want to trigger from the Power App. Many have written about how to implement...]]></description>
										<content:encoded><![CDATA[<div id="bsf_rt_marker"></div>
<p class="wp-block-paragraph">One of the cool things you can do from a canvas Power App is call a Power Automate flow. This is a great way to do something simple &#8211; like sending an email &#8211; or many more complex things you might want to trigger from the Power App. Many have written about how to implement these sorts of things, so I won&#8217;t cover that ground here.</p>



<p class="wp-block-paragraph">Once you&#8217;ve got it set up and time goes by, your users may start to see an error message similar to this when they take the action to trigger the flow in the Power App. It might be a button click, changing a number in a field &#8211; it can really be anything where you can connect to an event in the Power App.</p>



<figure class="wp-block-image size-large is-resized"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="47" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2021/11/image-5.png?resize=1024%2C47&#038;ssl=1" alt="" class="wp-image-44342" style="width:862px;height:39px" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2021/11/image-5.png?resize=1024%2C47&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2021/11/image-5.png?resize=300%2C14&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2021/11/image-5.png?resize=768%2C35&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2021/11/image-5.png?resize=1536%2C70&amp;ssl=1 1536w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2021/11/image-5.png?w=1660&amp;ssl=1 1660w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">That&#8217;s:</p>



<pre class="wp-block-code"><code lang="json" class="language-json">{"code": "InvokerConnectionOverrideFailed", "message": "Failed to parse invoker connections from trigger 'manual' outputs. Exception: Could not find any valid connection for connection reference name 'shared_office365_1' in APIM tokens header."}</code></pre>



<p class="wp-block-paragraph">The contents of the error you see may be a little bit different, but every report I saw mentioned <code> InvokerConnectionOverrideFailed</code>.</p>



<p class="wp-block-paragraph">This is a post which shouldn&#8217;t need to exist, in my opinion. Once we have the connection between the Power App and the Power Automate flow, it should just work going forward. But after some indeterminate amount of time has passed, you may start to see the error above. The two tools somehow lose their connection.</p>



<p class="wp-block-paragraph">We had this happen at a client recently, so I went off to the InterWebs to see if I could find an answer. There are multiple posts about it with multiple answers. I&#8217;ll summarize the one I found that worked for me here.</p>



<p class="wp-block-paragraph">In my particular case, the Power App enables event signups. Each event has one or more available time slots with a maximum number of registrations. When the event is coming up, the admins may need to provide a roster for each time slot to the event organizers, who are often outside the organization. We have a button in the Power App visible only to the admins which triggers a flow. That flow creates an export of a set of the specific event&#8217;s signup data in an Excel spreadsheet and the admin is notified via an email with a link to the Excel file when it is complete.</p>



<p class="wp-block-paragraph">Here&#8217;s the sequence that solved the issue for me:</p>



<ul class="wp-block-list">
<li>Export the existing flow. The old flow was named <code>CSRRosterExport1</code>.</li>



<li>Import the exported flow&#8217;s ZIP file with a new name, but everything else exactly the same. The new flow&#8217;s name was <code>ExportEventRoster</code>.</li>



<li>In the Power App, add the newly instantiated flow as a connection. To do this, from the top menu, choose Action/ Power Automate and specify the Flow you&#8217;d like to call.<br /></li>
</ul>



<figure class="wp-block-image size-large"><img data-recalc-dims="1" loading="lazy" decoding="async" width="1024" height="111" src="https://i0.wp.com/sympmarc.com/wp-content/uploads/2021/11/image-6.png?resize=1024%2C111&#038;ssl=1" alt="" class="wp-image-44348" srcset="https://i0.wp.com/sympmarc.com/wp-content/uploads/2021/11/image-6.png?resize=1024%2C111&amp;ssl=1 1024w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2021/11/image-6.png?resize=300%2C33&amp;ssl=1 300w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2021/11/image-6.png?resize=768%2C83&amp;ssl=1 768w, https://i0.wp.com/sympmarc.com/wp-content/uploads/2021/11/image-6.png?w=1078&amp;ssl=1 1078w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Replace all calls to the old flow with calls to the new flow. In this case, it was the <code>onSelect</code> events for two buttons, each of which passed slightly different parameters to the flow. It amounted to changing the <code>CSRRosterExport1.Run()</code> instances with <code><code>ExportEventRoster</code>.Run().</code> </li>
</ul>



<p class="wp-block-paragraph">Now that I know the fix, it probably takes about 10 mins &#8211; at most. When our users see the error message, we can easily Band-Aid the problem. Of course, this issuE shouldn&#8217;t happen in the first place, so let&#8217;s hope Microsoft fixes it before we ever see the error again.</p>



<h2 class="wp-block-heading">References</h2>



<ul class="wp-block-list">
<li><a href="https://powerusers.microsoft.com/t5/Building-Power-Apps/InvokerConnectionOverrideFailed/td-p/855656">Solved: InvokerConnectionOverrideFailed &#8211; Power Platform Community (microsoft.com)</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://sympmarc.com/2021/11/26/fixing-the-invokerconnectionoverridefailed-error-when-a-power-app-calls-a-flow/feed/</wfw:commentRss>
			<slash:comments>13</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">44341</post-id>	</item>
	</channel>
</rss>
