SharePoint is exciting again!

If you’ve been paying attention for the last few years, you’ve probably noticed (like I have) that SharePoint has taken a bit of a back seat in terms of excitement. That’s not to say SharePoint isn’t an exciting product/platform, it certainly is. Just that most of the big, exciting announcements have related to other products (e.g. Teams, OneDrive). SharePoint is the underlying infrastructure for a lot of things now, and as the infrastructure has been continuously improved – there simply haven’t been many exciting announcements. Until Microsoft Ignite 2017 in Orlando, Florida…

If you haven’t seen Jeff Teper’s keynote, do yourself a favor and watch that first!

His session, titled Accelerate your digital transformation with SharePoint and OneDrive, dissected several key announcements and improvements on SharePoint. While each of them is worthy of its own post, the following announcements stuck with me as huge improvements which are not only exciting in and of themselves, but display that SharePoint isn’t dead – and on the contrary, is as innovative as ever!

  • Multi-geography support for OneDrive for Business (store your data where your users are, regardless of tenant location)
  • New and improved SharePoint web parts for easy and intuitive content authoring
  • New mobile-ready Yammer web part (no longer have to use embed, cool!)
  • New and improved integration for Power Apps and Flow
  • New functionality for displaying Microsoft Forms on SharePoint pages
  • Huge performance improvements for large lists and libraries (the demo had over 20k list items in the view with zero delay!)
  • New personalized Search experiences, including LinkedIn integration
  • An updated SharePoint Online admin center, coming soon
  • End-user self-service file recovery in OneDrive for Business
  • A new product cycle in 2019, including Exchange, Office, SharePoint, and Skype
  • SharePoint Hub Sites, a new way to easily adjust the way in which sites are grouped and presented, regardless of physical location (more below)

My single favorite announcement has to be Hub Sites, which put simply, allow organizations to maintain a flexible, agile information architecture for their sites and portals. One of the biggest philosophical discussions you will ever have with an Information Architect, in my experience, is the concept of building an intranet to match the organizational structure, or to implement a ‘flat’ architecture.

SharePoint Hub Sites provide a means for groupifying (new word as of Ignite!) similar sites together, via the use of a new navigation bar, as well as consistent branding and content focus. What this means is that you can define your SharePoint site structure one way, and then completely change the way the sites are presented later. While this hub site functionality will be IT-driven, which is to say that an IT administrator must create the hubs, this provides great business value by giving organizations the agility they need to build intranets not just for today, but for years to come.

While this functionality is slated for the first half of calendar year 2018, I for one am excited to see this in practice – as this has the ability to become a fantastic value add for dynamic, ever-changing organizations. No longer do you have to sweat the details of where sites ‘live’, you can focus more on the strategic implementation of your sites and portals to ensure that users are getting the content they need, when they need it, on any device. This to me defines the modern workplace, and is something I personally can’t wait to see and use.


Now contributing to the Blue Chip Blog!

As you may know, I work for Blue Chip Consulting Group – a Microsoft Managed Partner based out of Cleveland, Ohio. The Blue Chip website has been updated quite a bit over the last few months, and we’ve now launched the Blue Chip Blog as well. My first post on the Blue Chip blog site is now live, please feel free to check it out!

In the post, titled Automate Your Way to SharePoint Online Using Windows PowerShell, I discuss the history of PowerShell as it relates to SharePoint Server, and now SharePoint Online. I also include some details on a Blue Chip-developed tool, called BluePrint, which helps to automate SharePoint Online deployments by providing additional PowerShell Cmdlets beyond the native SPO cmdlets.

Happy Scripting!

Determine SharePoint 2013 My Site Usage with PowerShell

As a SharePoint consultant, I frequently encounter situations where a client / customer has My Sites deployed. However, nearly as frequently I’ll come across situations where they’re really not sure how many they have, who is actually using them, or if anybody is using them. While there are certainly GUI approaches to determining usage, PowerShell is a great, quick way to analyze an environment. Using the SharePoint Server Object Model, we can easily obtain this information.

Without further ado, here is a quick and dirty PowerShell function which can be used to determine My Site usage. Note: this will only tell you about My Sites with documents, feel free to tweak it for your usage:

function Get-SPMySitesWithData {
Add-PSSnapin microsoft.sharepoint.powershell -ErrorAction stop;
[Object[]] $MySites = New-Object PSObject
$webapp = Get-SPWebApplication $MySiteHostUrl
$webapp.Sites | ForEach-Object {
$spweb = $_.RootWeb
$docsLib = $spweb.Lists["Documents"]
$siteSize = $spweb.Site.Usage.Storage/1MB
$siteSizeInMb = "{0:N2}" -f $siteSize
if($docsLib.Items.Count -gt 0)
[Object] $mysite = New-Object Management.Automation.PSObject;
$mysite | Add-Member -MemberType NoteProperty -Name SiteUrl -Value $spweb.Url
$mysite | Add-Member -MemberType NoteProperty -Name ItemCount -Value $docsLib.Items.Count.ToString()
$mysite | Add-Member -MemberType NoteProperty -Name "SiteSize(MB)" -Value $siteSizeInMb
$MySites += $mysite;
#Skipping my sites with 0 items, but if you wanted to do something with them here's where you'd do it!
Write-Output $MySites

To run it, simply treat it like a normal SharePoint PowerShell Cmdlet:

Get-SPMySitesWithData -MySiteHostUrl

And here’s what the object looks like once the function is complete: