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.

In case you missed it, the European SharePoint Conference 2014 programme is now available and I’m delighted to announce that I am speaking at Europe’s largest SharePoint event in Barcelona, Spain from the 5-8th May 2014.

I will be conducting two sessions on “Implementing a Hybrid SharePoint 2013 and Office 365 environment” and “SharePoint Online vs On-Premises vs Hosted – Making the Right Choice”.

“Implementing a Hybrid SharePoint 2013 and Office 365 environment”

“What are the requirements to setup a hybrid SharePoint 2013 and Office 365 environment? What functionality is available in a hybrid, what is not possible, and how exactly can the two systems be integrated with each other? And how exactly do you set one up? In this session, you will get to hear about this and much more!”


“SharePoint Online vs On-Premises vs Hosted – Making the Right Choice”

“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.”


The European SharePoint Conference will be run over four days and will feature over 100 informative SharePoint sessions and 6 preconference tutorials providing you with a fantastic opportunity for learning and building your SharePoint skills. Check out the full Conference Programme to see all sessions and topics that are being covered by myself and world renowned SharePoint experts.

If you want to deepen your SharePoint expertise, to understand the trend of the SharePoint market, and to learn how to leverage Microsoft Office 365 for your business, including the revolutionary Enterprise Social wave, the European SharePoint Conference is the best place to be in 2014!


Prices start as low as €995! There is also special group discounts for bookings of 3 or more people.


Book Now and I’ll see you in Barcelona in May

As an Office 365 MVP, I’m an active member of the SharePoint and Office 365 community. I blog, I write articles and books, I hold webinars, and sometimes I also present at conferences. I’m happy to announce that I’ll be speaking twice in the Netherlands, once in November at SharePoint Connections 2013, and in January at the first European Office 365 connect.

SharePoint Connections Amsterdam 2013 – 19.-21.November 2013

I’ll be presenting alongside a whole lot of other great people, among them some MVPs and even MCSMs. If you intend to come as well, you can get a 10% discount with thede SP288 when you register!

My presentations are:
Hybrid SharePoint 2013 and Office 365 Environments for Decision Makers
What value does hybrid SharePoint 2013 and Office 365 environments offer, which drawbacks do they have? Why do companies use them? How do you plan them, and which governance aspects need to be considered? And which resource requirements do they impose? These and many more questions will be answered in this session, targeted at IT Managers and other decision makers who want to learn more about hybrid environments. Come see!

Automating Office 365 with PowerShell
With the new Office 365, there are many more possibilities for administrators to manage Office 365 with PowerShell, especially regarding SharePoint Online. In this session, you will get an overview of the existing cmdlets and learn how common tasks such as creating a mailbox and granting access to a SharePoint site can be automated.


European Office 365 connect – 28.-30.January 2014

I’ll be back in the Netherlands in January, when I’ll present at the very first European Office 365 connect. The code for a 10% discount during registration is GB274.
My 2 presentations are:

Real-Life Use Cases for SharePoint Online
You’ve got SharePoint Online, but you think you’re not really leveraging it yet to get maximum value out of it? Or you’re looking generally for ideas on how it could be used? In this session, you will get to see how other companies use SharePoint Online, how they integrate it effectively into their IT architecture, and what kind of solutions they build on it.

Migrating to SharePoint Online
Companies that start using Office 365 usually have a lot of information and solutions already in their organisation. How can they move their data to SharePoint Online? Can all solutions be easily moved as well, or are there restrictions to consider? Who needs to be involved in a migration, which resources are required, and which steps need to be undertaken at which time? Get answers to these questions in this session!


This announcement is also available in German / Diese Ankündigung ist auch auf Deutsch verfügbar