Microsoft has released a new version of the set of visio stencils with icons for Office 365 and the corresponding server products:

This set of stencils contains more than 300 icons to help you create visual representations of Microsoft Office or Microsoft Office 365 deployments including Microsoft Exchange Server 2013, Microsoft Lync Server 2013, and Microsoft SharePoint Server 2013.

While the previous versions contained all stencils in a single file, this time they have separated them into 10 different sets.  Here’s an overview of all icons in those sets:











My family and myself moved from Singapore to Switzerland in May last year, and I had the opportunity to work as a SharePoint and Office 365 consultant in a small, but aspiring consultancy. And while the initially expected possibility to work with Office 365 turned out to be fairly small in the end, I was still able to learn quite a lot – be it preparing proposals, creating documentation, investigating server issues, or creating solutions. Earlier this year, another job opportunity came up, and for the first time in my life I had to choose between two really interesting and challenging roles. As the post title suggest, I chose the new role in the end. Thus, since the beginning of July, I’ve been working as a Collaboration & SharePoint Applications Teamlead for a large MNC. As the long job title implies, I’m leading a small team of SharePoint (and generally, collaboration applications) specialists. Our team focuses on the applications side of SharePoint, meaning we’re working closely with the business to deliver valuable solutions, while the platform team helps to provide a stable and performing infrastructure.

This move has brought a few changes with it for me personally. For one, while I was previously quite busy with a lot of things that kept me from blogging, I’ve been spending even less time on my blog ever since I changed roles. Part of this is due to a change in what I’m doing (see above), partially also because I tend to spent more time with my family after work (seeing your small daughter grow up is simply something that I wouldn’t want to miss for anything in the world) instead of “exploring the latest and greatest in technology”. The scope of my work has also changed from a nearly purely technical nature with a bit of “other stuff” (project involvement, documentation, governance, …) to one where I’m working more on the “softer side of SharePoint” and spend more time with developing a governance plan, contributing to or leading projects, and generally shaping the future of SharePoint within the organization. This also means that during the past few months, my community involvement has been extremely little. I hope to be able to pick up the pace again, but quite likely I’ll be contributing less actively than previously.

Nevertheless, there are a few smaller things that I want to write about soon, and some smaller projects that I am running on the side at the moment. So while there has been nothing new here for a while, you can look forward to at least a bit more content soon!

Over at the SharePoint Community, Balamurugan Kailasam posted that he was able to download the DLLs from SharePoint Online. While it is unclear at the moment why this is possible (maybe required by some tools?), or if this might be deactivated at some point, I decided nevertheless to write a small PowerShell script to download all DLLs that I’m aware of.

The code below create a subfolder with the current time as the name (in case you want to run it regularly and keep the older versions), and then downloads all the files into it. Additionally, it creates a file called info.txt with the version information of all DLLs

[Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath
#replace contoso with your own tenant
$spUrl = ""

$dllsVTI = @("Microsoft.BusinessData.dll", "Microsoft.Office.Client.Policy.dll", "Microsoft.Office.Client.TranslationServices.dll", 
		"Microsoft.Office.DocumentManagement.dll", "Microsoft.Office.Excel.Server.Udf.dll", "Microsoft.Office.Excel.Server.WebServices.dll", 
		"Microsoft.Office.Policy.dll", "Microsoft.Office.SecureStoreService.Server.Security.dll", "Microsoft.Office.Server.dll", 
		"Microsoft.Office.Server.Search.Applications.dll", "Microsoft.Office.Server.Search.Connector.dll", "Microsoft.Office.Server.Search.dll", 
		"Microsoft.Office.Server.Search.ExchangeAdapter.dll", "Microsoft.Office.Server.UserProfiles.dll", 
		"", "Microsoft.Office.Word.Server.dll", "Microsoft.Office.Workflow.Actions.dll", 
		"", "Microsoft.SharePoint.Client.dll", "Microsoft.SharePoint.Client.DocumentManagement.dll", 
		"Microsoft.SharePoint.Client.Publishing.dll", "Microsoft.SharePoint.Client.Runtime.dll", "Microsoft.SharePoint.Client.Search.Applications.dll", 
		"Microsoft.SharePoint.Client.Search.dll", "Microsoft.SharePoint.Client.ServerRuntime.dll", "Microsoft.SharePoint.Client.Taxonomy.dll", 
		"Microsoft.SharePoint.Client.UserProfiles.dll", "Microsoft.SharePoint.Client.WorkflowServices.dll", "Microsoft.SharePoint.dll", 
		"Microsoft.SharePoint.Linq.dll", "Microsoft.SharePoint.Portal.dll", "Microsoft.SharePoint.Publishing.dll", "Microsoft.SharePoint.Search.dll", 
		"Microsoft.SharePoint.Search.Extended.Administration.Common.dll", "Microsoft.SharePoint.Search.Extended.Administration.dll", 
		"Microsoft.SharePoint.Search.Extended.Administration.ResourceStorage.dll", "Microsoft.SharePoint.Security.dll", "Microsoft.SharePoint.Taxonomy.dll", 
		"Microsoft.SharePoint.Taxonomy.Intl.dll", "microsoft.sharepoint.WorkflowActions.dll", "Microsoft.SharePoint.WorkManagement.Client.dll", 
		"Microsoft.Web.CommandUI.dll", "SHTML.dll", "spnativerequestmodule.dll")
$dllsAPP= @("Microsoft.Office.Discovery.Soap.dll", "Microsoft.Office.DocumentManagement.Pages.dll", 
 "Microsoft.Office.officialfileSoap.dll", "Microsoft.Office.Policy.Pages.dll", 
 "Microsoft.Office.Server.Search.Applications.ServerProxy.dll", "Microsoft.Office.Server.Search.ServerProxy.dll", 
 "Microsoft.Office.Server.UserProfiles.ServerStub.dll", "Microsoft.Office.Server.WorkManagement.ServerProxy.dll", "Microsoft.Office.SlideLibrarySoap.dll", 
 "Microsoft.Office.TranslationServices.ServerStub.dll", "Microsoft.Office.Workflow.Pages.dll", "Microsoft.Office.WorkflowSoap.dll", 
 "Microsoft.SharePoint.ApplicationPages.dll", "Microsoft.SharePoint.AppMonitoring.ApplicationPages.dll", "Microsoft.SharePoint.OfficeExtension.ApplicationPages.dll", 
 "Microsoft.SharePoint.Portal.Proxy.dll", "Microsoft.SharePoint.Taxonomy.ServerStub.dll", "Microsoft.SharePoint.WorkflowServices.ApplicationPages.dll", 
 "Microsoft.SharePoint.WorkflowServices.ServerProxy.dll", "STSSOAP.DLL")

$folder = new-item -type directory $(get-date -f yyyy-MM-dd_HH_mm_ss) 

function GetDll([string]$dll, [string]$path) {
	$file = $folder.FullName+"\"+$dll
	$wc = (New-Object System.Net.WebClient)
	write-host "Downloading ",$spUrl,$path,$dll
    	$wc.DownloadFile($spUrl + $path + $dll, $file)
	$item = get-item $file
	if($item) {
		add-content "$($folder)\info.txt" "$($item.Name) - $($Item.VersionInfo.ProductVersion)"

foreach($dll in $dllsVTI) {
	GetDll $dll "_vti_bin/"

foreach($dll in $dllsAPP) {
	GetDll $dll "_app_bin/"


During a meeting with a customer yesterday, they spotted something amusing that I hadn’t noticed until they pointed it out. Have a look at the following screenshot from Office 365 and see if you can spot the issue as well:



And, did you discover it? The Edit Item button isn’t using it’s regular icon, but uses the same as the Delete Item button! Here’s how it should look like usually:

Now, the issue isn’t caused by Office 365 directly. In this case, we have some  JavaScript that does some smaller DOM manipulations, and replaces the Edit Item button with a different one (but which looks just the same). The code that gets inserted into the DOM contains the image as follows: <img style=”left: -511px; top: -103px;” src=”/_layouts/15/1033/images/formatmap32x32.png?rev=23″ unselectable=”on”>

This works perfectly fine in older versions of SharePoint as well as SharePoint 2013, but in Office 365 you get the Delete icon for the position left: -511px; top: -103px. The correct position in Office 365 is left: -511px; top: -137px. What SharePoint actually does is not to use a separate image file for each icon, put rather “store” all icons in a single image to save on bandwidth and increase performance (to learn more about this, visit your preferred search engine and look for “CSS sprites”). And exactly this image (formatmap32x32.png) is different in SharePoint 2013 (the same for RTM all the way to SP1) and Office 365. How different? Have a look at the animation which shows both version for a second each:



So, what does all this mean?

Just recently, changes to the DOM of Office 365 pages that made it different from the one in SharePoint 2013 were made by Microsoft, see e.g. the blog posts “Office 365 Update Changes ‘Display Name’ on Required Fields” by Marc D Anderson and “Office 365 Needs to Treat the UX as an API if Our Customizations are to Stay Off the Server” by Andrew Connell (ok, I just have to make a Star Wars reference here: “I am altering the DOM, pray I don’t alter it any further”). In my opinion, this change here falls into a similar category, with Microsoft making a small change in the background that can have a negative effect on customizations that rely on the icons. For example, if you want to use the same icons as default SharePoint, and thus make use of the same code, you now need to be careful that things like the issue I mentioned at the top of this blog post don’t occur in your solutions. So don’t just simply rely on the fact that it may have worked before, but make sure that if you’re using SharePoint icons, the correct one is indeed used.

And as final words,

A few days ago, Microsoft released a new version of their SharePoint Online Management Shell (the PowerShell cmdlets that can be used to manage SharePoint Online). In this blog post, I will briefly explain what was changed and what you can do now with the new options. Note: The new internal version number for the cmdlets is : 15.0.4569.1506


The first new attribute that is available is for Site Collections and is called SharingCapability. Basically, this attribute tells you if sharing has been enabled for a site collection or not. The three possible values are Disabled, ExternalUserSharingOnly, and ExternalUserAndGuestSharing (see also

When you run Get-SPOSite  | select Url, SharingCapability you’ll get a list of all site collections and the corresponding Sharing Capability.

You can also set the values, so if you want to enable sharing for a site collection for authenticated users only, run Set-SPOSite -Identity <YourSiteUrl> -SharingCapability ExternalUserSharingOnly:


For tenants, there are three new attributes: DisplayStartASiteOptionSharingCapabilityStartASiteFormUrl

You can get the current settings by simply running Get-SPOTenant:

SharingCapability simply shows you which settings have been set for your tenant in general.

DisplayStartASiteOption and StartASiteFormUrl can help you with allowing users to create new site collections, and which form to use. For example, there’s a sample app from Richard diZerega from Microsoft that you could customise for this purpose.

DisplayStartASiteOption controls if the “new site” link is available when you click on Websites in the Ribbon. If it’s deactivated, you don’t get to see such an option:

Turning it on (Set-SPOTenant -DisplayStartASiteOption $true) will provide you with the link:

If you don’t want to use the default form, you can then also specifiy your custom form via Set-SPOTenant -StartASiteFormUrl  <FormUrl>.

Please note that these two options are also available through the UI.  These two options can be found in the SharePoint Admin Center under Settings:

If DisplayStartASiteOption  is set to false, “Hide the link” is activated for Start a Site:


Setting it to true, “Show the link” becomes active:


Lastly, if you set a URL for StartASiteFormUrl, the corresponding field is set:


 External Users

The last changes in the new version of the cmdlets offer a few new attributes for external users: InvitedByWhenCreatedAcceptedAs

When you run Get-SPOExternalUser, you can see who invited the external user, when he accepted, and with which email address:

Additionally, you also have the option to get the external users of a single site collection only, and not the whole tenant, by running Get-SPOExternalUser with the -SiteURL parameter:


In two weeks, the 24-Hour SharePoint Conference (SP24) will take place. With 106 sessions, there are surely also a few that might be interesting to you, so go and register asap!

I’ll be presenting on “SharePoint Online vs On-Premises vs Hosted – Making the Right Choice”

April 17th 6:00 - April 17th 7:00 SharePoint Online vs On-Premises vs Hosted - Making the Right Choice  Business - Beginner Rene Modery You're planning to implement SharePoint, but do you need to host it in-house, or is a move to the cloud a valid option? Is an on-premises SharePoint farm a better choice than SharePoint Online? Or should you host SharePoint somewhere else in the cloud, for example on Azure? This session will give you an overview of your options, their respective benefits and drawbacks, and will show you how you can make an informed decision on which platform to choose.


On 1 April 2012, I was awarded as Office 365 MVP from Microsoft for the first time. Today, just as last year, I received the confirmation that I have been reawarded for another year.

I am truely honored to be both recognised for my efforts for the community as well as being part of an amazing group of people, who deliver a lot of great content, share their knowledge, and help the community grow and advance.

This article has been published originally in German on the 1stQuad company blog.

With server-side code, it is fairly easy to create OneNote notebooks in SharePoint. In this article, I want to explain briefly how to achieve this with the  JavaScript Object Model (JSOM).

In a current project, one of the requirements was to create OneNote notebooks automatically in Office 365. This had to happen either with out-of-the-box functionality or via API calls (REST or JSOM). After a few tries, it turned out that doing it via JSOM seems to be the best (and only?) option.

Generally speaking, a OneNote notebook in SharePoint is nothing else but a folder that is handled in a very specific way. With server-side code, you can “turn” a regular folder into a OneNote notebook by setting the ProgId property of the corresponding SPListItem to “OneNote.Notebook”. As you can’t access ProgId via JSOM, a different way to implement this functionality has to be found. Luckily, you can achieve the same thing by setting the property “HTML File Type” of a folder.

The following code snippet shows a short example

//common variables
var context=SP.ClientContext.get_current(); 
var web=context.get_web();
var lists=web.get_lists();
var list=lists.getByTitle("Documents");

//create a new folder
var itemCreationInfo=new SP.ListItemCreationInformation();
itemCreationInfo.set_leafName("Name of the new Notebook");

//modify the folder to convert it into a OneNote notebook
var onenoteNotebook=list.addItem(itemCreationInfo);
onenoteNotebook.set_item("HTML_x0020_File_x0020_Type" ,"OneNote.Notebook");

//send the request
 //created successfully, do stuff if needed 
 //something went wrong, do stuff if needed

All sessions of the SharePoint Conference 2014 have been posted already on Channel 9! If you plan to watch a lot or even all of them, here’s a little PowerShell script that will help to download them. The original is from 2012 and was created by Vlad Catrinescu, with some very minor modifications (basically added one [xml] and changed the RSS feed) it’s also working this. year.

[Environment]::CurrentDirectory=(Get-Location -PSProvider FileSystem).ProviderPath
$rss = (new-object net.webclient)

$a = [xml]($rss.downloadstring(""))

$ | foreach{
 $code = $_.comments.split("/") | select -last 1

 $url = New-Object System.Uri($_.enclosure.url)

 $file = $code + "-" + $_.creator + "-" + $_.title.Replace(":", "-").Replace("?", "").Replace("/", "-").Replace("<", "") + ".mp4"

 if (!(test-path $file))
    $wc = (New-Object System.Net.WebClient)
    $wc.DownloadFile($url, $file)

During the past few months, I presented a few times online, at conferences, and at user groups. All those presentations were uploaded to my SlideShare account recently.

I uploaded multiple presentations on the topic of SharePoint Online management with PowerShell due to the fact that, depending on audience, I sometimes included infos on Exchange Online / Lync Online as well. Also, I constantly update that presentation with new information, such as newly available cmdlets.