Monthly Archives: April 2015

Come see me at the Microsoft Ignite Conference!

I’ll be at Microsoft Ignite the week of May 4th-May 8th. Mainly as an attendee, but I do have a few “public appearances” scheduled:

Scripting Guys Booth

This year at Ignite the Scripting Guys will have a booth, and have a schedule up on their blog showing when various PowerShell people will be there.

I’m honored to be invited to spend some time in the booth and will be there Monday Night from 7-7:30 if you’d like to say hello.

There are lots of other big names stopping by the booth throughout the conference including Todd Klindt, Mark Minasi, Jeff Hicks, Jeffrey Snover and others!

The full Schedule of guest appearances is being maintained at the Scripting guys blog:

Community Theater

On Wednesday from 11:35-11:55 I’m part of CSPUG’s PowerShell Q&A Live in the Community Theater, which I believe is in the expo hall.

I’ll be Joining PowerShell MVP’s Michael Blumenthal and Jeff Hicks to help answer any questions you  have.

These are all really great people in the community, and it’s a huge honor to be sharing the stage with Michael and Jeff in the Q&A panel, and sharing the booth with Ed and Teresa Wilson, along with their rock star cast of PowerShell Super Heroes who will be stopping by the booth throughout the event.

– Jack


O365 Sites/SharePoint Online tip: Save time editing Search settings

You can edit the url manually and avoid using the Filter UI to find the property you need to edit

If you’ve tried customizing search in Office 365, Specifically in dealing with Managed properties, you know it can take a lot of time going back and forth to the managed Properties page, and then using the filter to search for the property you need.

This is even more grating when you have to customize the “Refinable”s because there are so many of them (you can’t just filter  on ref, you have to type in RefinableStringxx)

This time saver might fall under the ‘obvious’ category, but have a quick look at the URL – you can easily jump from one Managed Property to another, by just altering the URL:

Note that you still need to click OK, which takes you back to the main screen, so I just copied the URL before I did that, then pasted it in, and typed over the property name to get the one I wanted.


Script for Auto-Adjusting Site quotas in SharePoint Online / O365 based on current useage

** IMPORTANT UPDATE #2 -this is no longer needed.

As of September 2015, Site Quotas are no longer needed!

The screenshot below came from our tenant settings screen – Set it to Automatic and forget about site quotas!



If you use the script below, you may want to put in a filter to prevent the script from working on any site with the managed path of /portals/


Microsoft recently added Video portals to office 365.

Ours was added this morning.

I looked at it in the admin screen because I was curious what site collections had been created.

I noticed something peculiar: The Storage Quota was 0.


You can’t set a quota to zero. Not in the UI, not in PowerShell.

Well tonight my script ran and guess what, it reset my quote on the Video portal.

Originally, Video portal storage was supposed to come out of the overall SPOnline allotment, so this may not be a big deal, maybe we needed to set it anyways?

But, since it’s not possible to set zero manually, I wonder if this was one site you didn’t have to manage/pre-allocate storage too? Or maybe MS decided to make storage unlimited?

I’m not really sure, but in the short term, I thought I’d best warn people that there are some unknowns here as it relates to using the below script with Office Video.


AND NOW BACK TO OUR ORIGINAL ARTICLE, as it was published on April 15th:

The year is 2015, You’ve just been given “TONS” of storage on SharePoint online, and someone says “Lets give everyone a 200GB site quota”.

Seems like a great idea, you’ll never run out of space, so why not set the limit high?

Well, it turns out, the word “Quota” has a different meaning in SharePoint Online / Office 365 than it did in SP on Premise.

In the On Premise version of SharePoint, the quota was a limit.
In SharePoint Online, it’s an Allocation.

What’s the difference you ask?

Say you have a 1000GB of storage on SharePoint on premise.

With On premise SharePoint, you can allocate a 200gb quota to 10 sites, “over committing” what you actually have. It works because space isn’t ‘reserved’ for that site, it’s just a limit. You’re telling on premise sharepoint “Don’t let any site get bigger than 200gb”.

Take a similar situation on SharePoint Online:

Say you have 1000GB of storage on SPO

You can only allocate 200GB quotas 5 times – each time you do, your total available drops by 200GB so by the 5th one, you have nothing left to give. This is true, even if the sites are empty!

So SharePoint online works a little differently, at least in 2015 it does – maybe one day this article won’t be relevant, but it is today.

What are we to do if we want to give users basically unlimited sized site collections

Now the question: What are we to do if we want to give users basically unlimited sized site collections, but we can’t allocate large numbers to EACH site collection?

Well, here’s what I did – I wrote a script that looks at how much storage each site collection is using, then adjusts it so there is a certain amount of ‘headroom’.

I run the script daily via a scheduled task.

I also have another script that sets up the connection to SharePoint Online which runs first, if you need that part, it’s elsewhere on this site.

The logic is fairly straightforward, but lets do an example:

All sites should be 4GB or more over the size used:

  • An empty site would have 4gb allocated
  • A site using 3gb would have 7gb allocated
  • A site using 10gb would have 14gb allocated.

Make sense?

That logic is pretty simple, take the size of the site, add 4gb to it, that’s it’s allocation.

For performance reasons, it would be great if we weren’t constantly adjusting each and every site, every time we run the script, the $slack setting helps with that.

Here’s the script:

(If you need help scheduling a task, I have a blog post and video here about that. )

write-host "Be sure to connect to SPO first" -foregroundcolor yellow

$headroom = 4000;
$slack = 500;

#this could really be one line, but it's broken out into two for readability
#first, we get all the sites that we need to change the quota for.
# we do this by the formula Site size must be > the quota, minus the headroom
# now if we just did this, we'd likely have to increase every site every time. so we also factor in a slack amount.
#if the desired headroom is say 4000, we'll allow the site to come within 3500 of being full, then make an adjustment to 
# ensure we have 4000 free.

#this first line gets the list of sites we need to work with
$sites = get-sposite -detailed | where {$_.StorageUsageCurrent -gt $($_.StorageQuota - $headroom + $slack)}

#this lets us see what we're doing...
write-host "$($sites.count) sites to work on"
foreach ($site in $sites)
 write-host "$($site.url) : $($site.StorageUsageCurrent) of $($site.StorageQuota)"

#This line allocates the storage quota, based on the storage in use
#this was timing out
#$sites | set-sposite -StorageQuota $($_.StorageUsageCurrent + $headroom)
foreach ($site in $sites)
 $newquota = $site.StorageUsageCurrent + $headroom
 write-host "altering: $($Site.url) used: $($site.StorageUsageCurrent), old Quota: $($site.StorageQuota), new Quota: $newquota"
 $site | set-sposite -StorageQuota $newquota

write-host "Done"

– Jack