Change Office 365 portal language for synced users

Users cannot change the display language of the Office 365 portal themselves if they are synced users, and they’ll receive an error. If you attempt to do this as an administrator using a Powershell command to set the PreferredLanguage attribute directly like this:

set-msoluser -userprincipalname "xxx" -PreferredLanguage "en-US"

You will see this error:

set-msoluser : Unable to update parameter. Parameter name: PreferredLanguage.
At line:1 char:1
+ set-msoluser -userprincipalname xxx -preferredlanguage "en-US"
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~
+ CategoryInfo          : OperationStopped: (:) [Set-MsolUser], MicrosoftOnlineException
+ FullyQualifiedErrorId : Microsoft.Online.Administration.Automation.PropertyNotSettableException,Microsoft.Online.Administration.Automation.SetUser

You can only set the PreferredLanguage attribute on non-synced users because this property is managed by dirsync/aadsync, and thus only settable on your onpremises Active Directory. Use ADSIEdit or Powershell to change the PreferredLanguage property locally for your users and then run a sync to change the language in Office 365.

Here’s an example PS snippet that will set (bulk change) the preferredLanguage Active Directory atrribute of all your users to Dutch:

Get-AdUser -Filter * -ResultSetSize 9999 | Set-ADUser -Replace @{‘preferredLanguage’=”nl-NL”}

If you need to look up your own language code, you can do so here

Note: if the PreferredLanguage attribute is not set, language will default to English.

ADFS v2 to v3 side by side migration for Office 365

Some time ago we built a second ADFS farm at our datacenter. We knew we had to upgrade to v3 at some point, but wanted to keep our v2 farm intact so we could always do a rollback. We also wanted to use a new domain name for our brand new Windows 2012 R2 ADFS cluster, including the WAP proxies.

Setting all this up proved fairly easy, ADFS v3 was Continue reading ADFS v2 to v3 side by side migration for Office 365

OneDriveMapper released!

Map your OneDrive for Business to a driveletter automatically!

Imagine the following scenario: you get an awesome offer from Microsoft; unlimited, free storage in OneDrive for all your students!

You immediately sign the deal, and scrap all plans to invest in a new fileserver to replace your currently overflowing fileserver containing all student’s data.

Your students work on Continue reading OneDriveMapper released!

Error 0x80075227 and 0x8007520C on a Web Application Proxy 2012R2

Today while implementing a KEMP load balancing solution for ADFS v3 and WAP together with a colleague, I ran into errors on my WAP servers. Both seemed to be connected fine, the IdpInitiatedSignon.aspx page worked….but when I tried to run Get-WebApplicationProxyADFSRelyingParty in Powershell, I got 0x80075227 to chew on.

At first just ADFS+WAP, load balanced, worked, this error surfaced when we added a Non Claims Aware trust to a Sharepoint 2013 Kerberos enabled server so we could publish it using Windows Authentication (which we needed for various BI / Excel components that require Kerberos). The Sharepoint servers were also load balanced, we expect the KEMP has issues with SNI.

Connecting the WAP server directly to ADFS, without the KEMP load balancer in between solved this issue for now, we’re still looking into the configuration of the KEMP with their technicians to find a way to load balance this effectively without compromising on security.

Update: our engineer who worked with KEMP reported that an extra VIP was required because of SNI.

Windows Intune Client on Windows 7 errors 0x80cf401b or 0x80cf0438

If you hit error 0x80cf401b or 0x80cf0438 when attempting to install the Windows Intune client, disable your proxy or use a network that is not proxied.

In addition, after the Intune Client had been installed, I ran into several other errors that you might also run into. Always check for log files in c:\program files\microsoft\onlinemanagement\logs

The solution to below errors was Continue reading Windows Intune Client on Windows 7 errors 0x80cf401b or 0x80cf0438

O365Uploader V0.4

Due to popular request,  I’ve added an analyze function to the O365Uploader. After choosing your folder to be uploaded, a popup will ask you if you wish to see an analysis of potential issues and suggested fixes for your content. Everthing will both be written to the Powershell console in the background and a detailed log file which can be used in MS Excel.

You can download the new version here.

Other changes:

  • Added check for period in folder/file name
  • Added check for various illegal suffixes in filenames
  • Added verification prompt before upload to log all issues to a file beforehand so it can be fixed in advance
  • Added warning for 5000+ items
  • Added warning for hidden files (start with an _ )

Changing or virtualizing the Hosts file with AppV 5

Sometimes, applications require specific host file entries. Often you’d probably be able to get around using DNS to resolve the entries the application really needs. But when you can’t, and you want to virtualise your application using AppV 5, it’ll use the hosts file of the OS instead of the hosts file in the virtualized file system.

To get around this, we can let the AppV client fire off a script to modify the actual OS hosts file upon registration of the AppV application. This is done by modifying the DeploymentConfig.xml file and adding a script to your package, detailed descriptions of how this works can be found here. Basically, you add this between the <Machinescripts> tags in the DeploymentConfig.xml file, example:

<AddPackage>;
 <Path>c:\windows\system32\wscript.exe</Path>
 <Arguments>{AppVPackageRoot}]\Scripts\hostfile_edit.vbs</Arguments>
 <Wait RollbackOnError="true" Timeout="10"/>
 </AddPackage>

The VB code in hostfile_edit.vbs that does the actual work is:

Const ForReading = 1, ForWriting = 2, ForAppending = 8
 Set fso = CreateObject("Scripting.FileSystemObject")
 Set WshShell = CreateObject("WScript.Shell")
 WinDir = WshShell.ExpandEnvironmentStrings("%WinDir%")
 HostsFile = WinDir & "\System32\Drivers\etc\Hosts"
 Set filetxtR = fso.OpenTextFile(HostsFile, ForReading, True)
 DNSEntry1 = "10.0.0.1 HOSTNAME #DESCRIPTION"
If (checkHostfile(filetxtR, DNSEntry1) = True) Then
 WScript.Quit(0)
 Else
 Set filetxtA = fso.OpenTextFile(HostsFile, ForAppending, True)
 filetxtA.WriteLine (DNSEntry1)
 filetxtA.Close
 End If
filetxtR.Close
 WScript.Quit(0)
Public Function checkHostfile(filetxt, lineToCheckFor)
 checkHostfile = False
 Do Until filetxt.AtEndOfStream
 s = filetxt.readline
 If (s = lineToCheckFor) Then
 checkHostfile = True
 Exit Function
 End If
 Loop
 filetxt.Close
 End Function