SharePoint changes files during CU installation

You might think, I’m drunk, but I’m not.

SharePoint, as a document management system, should never ever modify files without any notice. However, it seems that we found a bug, where it does modify files.


We have a lot of CSS files in SharePoint. They are used for some custom apps in SharePoint or were just uploaded to OneDrive for Business. All in a SharePoint 2013 OnPrem environment. The CSS files contain base64 encoded data URIs.


.myClass {
    background-image: url(‘data:image/png;base64,MY_IMAGE_AS_A_BASE64_ENCODED_STRING’) !important;

Then we installed a Cumulative Update and ran PSCONFIG.

And then?

What happened then is a really strange thing. The CSS files seem to be the same as before. The “Last Modified” date has not changed. However the content of the CSS file changed a little bit:

.myClass {
    background-image: url(‘data:image/png;base64,MY_IMAGE_AS_A_…_HERE_NOW_SOME_OTHER_STRING’) !important;

The base64 string before was about 600 characters. After installing the CU it is now 234 characters and only the first about 100 are the same. The rest is some garbage. That leads to broken images and icon-fonts all over the place.
The worst thing here is: What else did the CU installation?
We reproduced the behavior with 2 different CU installations on different sites and it seems, that only the base64 string is modified. Everything else is untouched.

We’ve filed a case at Microsoft and I will update the post when we will have an official statement.

SharePoint 2013: Profile synchronization does not delete user profiles

We have configured AD Import in SharePoint 2013 with an LDAP filter set. After some time we discovered, that accounts deleted from AD are not automatically deleted from SharePoint.

After a lot of debugging and testing I found the solution:

The LDAP filter is an "Include" filter so you have to define which accounts should be imported. The filter looked like:

(&(objectCategory=person)(objectClass=user)(!(title=*Service Account*))(|(company=MyCompany1)(company=MyCompany2)))

(Import all accounts which are not service accounts and belong to MyCompany1 or MyCompany2)

You see the issue? Deleted accounts are not included in the filter, so I had to change the filter to include "isDeleted":

(|(isDeleted=TRUE)(&(objectCategory=person)(objectClass=user)(!(title=*Service Account*))(|(company=MyCompany1)(company=MyCompany2))))

Now also deleted accounts are included and SharePoint will delete the profiles correctly.

Maybe Microsoft should mention this in the documentation. Currently there is only one sentence regarding the LDAP filter:

If you want to filter the objects that you import from the directory service, in the Filter in LDAP syntax for Active Directory Import box, type a standard LDAP query expression to define the filter.

SPSync 0.9.8

Ok, here we go. The sync engine got a major refactoring. It is now a lot faster to get the changes from SharePoint and to iterate over the local files. That means it is now just a matter of seconds to “analyze” the changes even for more than 1000 files and 1 GB. It should therefore also be able to sync your libraries with thousands of files in a reasonable time.

The other big news is the complete new setup experience. Just click here to download and execute the setup. It takes just a few seconds and SPSync should start. That’s it. No “Next”, “Next”, “Finish”, nearly no time and no local admin rights required. Even better: Updates gets automatically installed in the background and on next restart of the app you are up-to-date.

Please report all bugs to

SPSync 0.9.7 including CLI

SPSync is approaching version 1.0. Today I’m happy to announce that SPSync now works more stable and also includes a new command-line interface.

It should work now with all SharePoint 2013 on-prem and Office 365 sites without any issues during connecting or displaying the “select folder” dialog. As the “SharePoint Url” you can now use more formats and SPSync will try to figure out the site, the library and the authentication method automatically. For example, these formats are all fine:


The most requested new feature is the command-line interface. You can find SPSyncCli.exe in the install folder.
It accepts two parameters. The local folder and a “preview” mode parameter.

You have to configure a sync connection like before with the GUI. After that, you can sync a folder with the following command:

SPSyncCli.exe “C:\Your\Sync\Folder”

If you just want to see, which files will be modified (but don’t want to do it now) you can sync in a “what if” or “preview” mode:

SPSyncCli.exe “C:\Your\Sync\Folder” true

The result looks like this:


SPSync now uses a different location for the metadata. It is now directly within the local folder under “\.spsync”. Therefore you might get a conflict message the first time you sync with the new version.

Download the new version here:

Selective folder sync for SPSync

I’m happy to announce that the top requested feature on UserVoice is now available for testing.

Now you can select which folders in your document library you want to sync. Just click “Edit” on your configuration and then “Save & Select Folders”:

image image

Download version 0.9.6 here:

SPSync - The OneDrive for Business alternative

I know, the last update is almost a year old... But yes, I’m trying to work on it when I find some free time. So this update brings some important changes.

What's new?

First of all, to add a new sync configuration, the dialog has only a few fields left. SPSync will try to find every other setting automatically for you. Here is the new dialog:


As you can see, the advanced configuration dialog can be opened via the link. The automatic detection will only work if you are using NTLM/Basic (On-Premises) authentication or Office 365. For ADFS you need to enter some more info on the advanced dialog.

Another new feature is that you can now configure, whether you want to sync in both directions or only one of them (Local->Remote or Remote->Local) which was a suggestion on UserVoice with a high vote. Also deleted files (local or remote) are now always send to the recycle bin and never get automatically deleted for ever.

With this new version I’ve decided to drop the support for SharePoint 2010 (and before), because of some missing features for the upload/download handling. This is to make the development much easier and better to maintain. That’s also why SPSync requires now .NET 4.5.1.

Last but not least, a lot of bugs are now hopefully fixed. If you find something, please send me an error report and attach the DebugLog.txt from C:\Users\%username%\AppData\Local\SPSync

Download the new version 0.9.5 here: and leave a comment or drop me a line at: support (at) spsync(dot) net

PS: The next new feature will be to be able to sync sub-folders within a document library as it has already 20 votes on UserVoice.

New Microsoft certifications

As I’ve mentioned here, Microsoft recently had a promotion to get up to 5 free vouchers for some specific exams for Prometric because after 31th of December, Pearson Vue will be the only exam provider.
I decided to try three of them:

I’ve passed all of them, which is especially great for the Azure exam, because that one was really hard.
With the two Office 365 exams I’m now a ”Microsoft Certified Solutions Associate for Office 365” (MCSA: Office 365).

You can find the details how to access my transcript here.

Simple SharePoint Forms Solution

You knew InfoPath? It's dead. So what is your current solution to just create a small/simple form in SharePoint to let users enter some information into a SharePoint list?

The default list forms are not a very good answer if it should be end user friendly or you want to style it.

So I've created a super simple solution and it is open source.

Just create an HTML form with your favorite editor and attach some special "data-" attributes, add a line of JavaScript and put everything into a Content Editor Web Part on your page.

You can find a complete guide at the GitHub project site.

Load Testing SharePoint with Visual Studio Online

I recently discovered that Visual Studio Online includes 15000 "Virtual User Minutes" for load testing each month for free. I've never used the load test feature of Visual Studio before, so I decided to try it to simulate high user loads on our SharePoint farm. Here is a step-by-step guide.


  • A Visual Studio Online account
  • Visual Studio 2013 Ultimate (Performance and Load Testing is not included in any other edition)
  • SharePoint Site which is accessible via Internet


In Visual Studio 2013 go to File->New->Project and select "Web Performance and Load Test Project" in category "Test":


This will create an empty "Web Performance Test". To start recording what the test should do, click "Record" and an IE Browser window will open.

image image

Now open your SharePoint site and click around to simulate some browsing. After that click "Stop" to come back to Visual Studio where you will see all requests in your Web Performance Test.

You might not want to record some "SharePoint" noise, so there is a settings page to exclude some stuff. Go to Visual Studio Tools->Options->Web Performance Test Tools->SharePoint:


To execute this Web Performance Test as a load test with simulated users, you have to add a "Load Test" to your project:


The wizard will guide you through some configuration options. Set the load to 250 users as shown below for a test running one minute will cost you 2500 virtual user minutes. So keep in mind that the free plan of Visual Studio Online gives you 15000 virtual user minutes per month. Be careful with the constant loads settings, because all virtual users will submit the first request as fast as possible, so the result may not reflect real usage scenarios. For more users use the "Step" pattern to start with a few users. They will automatically increase over time.


I set the test mix model to "Based on sequential test order" because there is only one test in my project which every virtual user should run. In the next step add the existing test to the load test.

I leave Network Mix, Browser Mix and Counter Sets untouched. In Run Settings I set the "Load test duration" to 10 which means, every virtual user will execute the test in a loop for 10 minutes.


With these settings, your "Virtual User Minute" budget of 15000 in Visual Studio Online will decrease by 2500 (250 user * 10 minutes).

Run in the Cloud

Now add a .testsettings file (Local.testsettings already exists) via Add->New Item and search for test:


Give it a name like "CloudTestSettings". A wizard will open where you can select "Run tests using Visual Studio Team Foundation Service" (what is now "Visual Studio Online" as of November '13).


Make sure, your newly created .testsettings file is the active one by right click on it and select "Active Load and Web Test Settings":


Ok, that's basically all you have to do. If you already know some values and want to visualize threshold violations, you can open the load test and add threshold rules to one ore more counters. For example to the average page load time.


To run the load test, just click "Run Load Test":


After the test is completed the result panel show all the details about the test. You can add counters to graphs and see a summary and details. I'm interested in the page response times, so I switch to only one graph layout. Here you can see all the different pages and there response times.


You can download the report to Excel to analyze it even further.

Can't connect to SharePoint on Windows Phone 8

I have just installed a new SharePoint 2013 machine and restored an existing (2013) ContentDb to this machine. Everything works fine except: I cannot connect to it on my Windows Phone 8 anymore.


However, this worked perfectly well before the move. I tried a lot to figure out, what the problem was. Result: The Certificate Authority (or better the issued certificate) is the reason.





The new CA I've also created is on Windows Server 2012 R2. The old CA was on Windows Server 2012. And R2 adds automatically a "CRL Distribution Point" extension to all issued certificates. My CA is private so Windows Phone had no chance to connect to any URL specified within the extension.


Disabling the CRL Distribution Point extension for all issued certificates (or make the URLs available for your phone). Here are the steps:

Open your CA, edit the properties of the root node, go to the "Extensions" tab and uncheck "Include in the CDP extension of issued certificates: