OnedriveMapper v2.31 released!

Version 2.31 of OneDriveMapper has been released.

  • Changed elevation mediation method to scheduled task (used to be a registry hack)
  • Added logging to screen (in addition to logging to file), turned on by default
  • Added support for Sharepoint Mappings based on AD Security Groups
  • Fixed two minor bugs

Get the new version here

Getting the Webdav URL of an Office 365 Group

If you want to map a Sharepoint or Onedrive site to a drive, the required address to use in a net use command for the WebDav client (WebClient) can be found in the URL when you browse to it. This is not the case for Office 365 Groups, but the URL is fairly easy to find.

  1. Make an office 365 group
  2. Browse to the group’s files
  3. Create a folder there
  4. Enter the folder and note the current URL

Let’s say my group is called ‘OnedriveMapper’. If I’m at the root of the group’s files, the URL looks like this:

However, if I enter my folder, the URL changes to this:

So, it seems the default folder name in my tenant is ‘Gedeelde Documenten’, which is Dutch for Shared Documents. Putting the two together gives us the following final URL to map to:

And yes, this works fine with Onedrivemapper 🙂

Exchange 2007 or 2010 Public Folder report incl rights, email addresses and size

Because I couldn’t quickly find a good script/tool to make a report of my Public Folders that includes a complete drilldown including if they’re mail enabled, what email addresses it has, who has rights on the folder and what size the folders are, I’m sharing this script with you 🙂

Edit: added support for Exchange 2010, uncomment the correct section and comment the 2007 code if you run this on 2010.

Continue reading Exchange 2007 or 2010 Public Folder report incl rights, email addresses and size

Migrating files and folders to Onedrive for Business and Sharepoint Online without user interaction part 2

This is the second post in a series about moving to Onedrive for Business and/or Sharepoint Online from traditional fileshares and/or homedirectories, in bulk, without user interaction.


  1. Making your data compliant with Office 365 standards, and keeping it that way
  2. Moving the data (in bulk)
  3. User and endpoint transitioning

Many of my employer’s clients are transitioning to a Cloud First IT model. Think triple A, work anywhere, anytime, anyplace.

In the previous post, we’ve talked about requirements, making your data compliant and essentially preparing your environment for migration. Now that you’ve done that, your data should be in a more or less consistent state, it’s time to move it to the cloud!

Continue reading Migrating files and folders to Onedrive for Business and Sharepoint Online without user interaction part 2

Setting calendar permission in bulk

A simple snippet that’ll allow you to give a certain group PublishingAuthor rights to all calendars in your organization:

$mailboxes = get-mailbox -Resultsize Unlimited
foreach ($mailbox in $mailboxes){
Remove-MailboxFolderPermission -Identity "$($mailbox.alias):\Calendar" -User INSERTUSERORGROUPNAMEHERE -Confirm:$False -ErrorAction Stop | Out-Null
Add-MailboxFolderPermission -Identity "$($mailbox.alias):\Calendar" -User INSERTUSERORGROUPNAMEHERE -AccessRights PublishingEditor -ErrorAction Stop | Out-Null
Write-Host "$($mailbox.alias) processed" -ForeGroundColor Green
Write-Host "$($mailbox.alias) failed" -ForeGroundColor Red


A warning though, calendar permissions in Exchange Online can easily become corrupted. I’ve been in touch with support several times, but their only fix is to tell the user to remove and reapply the permissions, which is a sure way to annoy your users during migration.

So, communicate this in advance!

Exchange Forwarding Report

This powershell snippet will tell you which mailbox is actively forwarding email, in what method (dual delivery or pure forwarding), to which email address and if the corresponding contact still exists and is active.

#Module name: findForwarderDetails
#Author: Jos Lieben (OGD)
#Date: 01-04-2016
#Description: this snippet will discover all active forwarders in your organization, and will print the original mailbox, target contact and target address and forwarding method

$output = @()
$mailboxes = Get-Mailbox -ResultSize Unlimited | Where {$_.ForwardingAddress -ne $Null}

foreach ($mailbox in $mailboxes){

    $obj = New-Object PSObject
    $obj | Add-Member NoteProperty mailboxName($mailbox.DisplayName)
        $obj | Add-Member NoteProperty forwardingMode("Dual delivery")
        $obj | Add-Member NoteProperty forwardingMode("Forward Only")
        $contact = Get-MailContact -Identity $mailbox.ForwardingAddress.DistinguishedName -ErrorAction Stop
        $obj | Add-Member NoteProperty forwardingToName($contact.DisplayName)
        $obj | Add-Member NoteProperty forwardingToEmail($contact.ExternalEmailAddress)
        $obj | Add-Member NoteProperty forwardingToName("CONTACT DOES NOT EXIST OR IS DISABLED")
        $obj | Add-Member NoteProperty forwardingToEmail("CONTACT DOES NOT EXIST OR IS DISABLED")
    $output += $obj

Write-Output $output