Possible uses for the PowerShell loop through each site script

A few posts ago I created a script that loops through each site in a site collection. The script is located at https://www.sharepointfire.com/2016/05/powershell-script-to-loop-through-each-sharepoint-online-site/. I’ll use this post to add all the commands I’ve used with this script. The below commands are specially created for SharePoint Online and it’s using the CSOM.

Changing Locale ID for each site

The below commands are there to change the locale ID for each site and to change the time to 24h in stead of 12h

$web.RegionalSettings.LocaleId = 1043
$web.RegionalSettings.time24 = $true

SharePoint birthday and anniversary web part using search results

This blog will show you in detail how you can create a birthday and anniversary web part using a search results web part with a custom Display Template and CSS. This web part uses the user profile birthday property which people can fill in their self. I’ve started testing with display templates and decided to try and create a display template to show upcoming birthdays. You will get the following output when you follow this blog correctly:


You can find the display template and css file at the end of this blog.

Start creating your birthday and anniversary web part

Mapping the birthday property to a managed property

The birthday property can be filled in on users profiles but they can’t be used in Search Result web parts out of the box.
Go to the Search Center in the Office 365 SharePoint Admin Center


Go to Manage Search Schema -> crawled properties and search for birthday


You can see that it hasn’t been mapped to a managed property.
Click on the property


Add a mapping


Map this property to a RefinableDate which is available and click twice on OK


It can take up to 8 or 16 hours for this property to be available in your site.

Set up search results web part

Go to the site where you want to add the birthday webpart


Add Web Part




Edit Web Part and first change the following settings



And the following appearance


Click on apply and change the search query

There is 1 problem with this query. The full date of a user’s birthday is based on the year 2000. This means that my birthday is 22 december 2000 according to Microsoft. I was unable to create a search query which looks to the next 5 anniversaries based on the current date alone so I used the following command to count the number of days to the year 2000.

new-timespan -start “1/6/2000” -end $(get-date)

which gives me the following result


So my search query will look like “*   RefinableDate00>{Today-5845}”
Note that I added 1 more day so the current date will also be listed!
You will need to change the days every year for the webpart to find the correct birthdays (let me know if you have a better search query 🙂 )


Go to the sorting tab


Click on OK and Save the web part

Upload display template files

Upload birthday.html

First change all the refinabledate properties in the birthday.html to the property you have specified:


Go to site settings


Go to Master pages


Go to Display Templates


Go to Search


Enable the publishing features if you only see .js files


Upload the master page at this location with the default settings.

Don’t forget to publish and approve this document!

Upload birthday.css

Go to the style library


Create a new folder


Upload the css document to this location.

Don’t forget to publish this version!

Set the css so it will be used at site settings -> Master Page (beneath Look and Feel) or add this using a script editor web part.


Set the display template for the search web part

Edit the Search Result Web Part


And use the Birthday Template


Download the birthday.html and .css