Gemiddelde leestijd: 3 Minuten

De moderne (digitale) werkplek is hot, er wordt veel over gesproken, geschreven en gediscussieerd. Waar bestaat zo’n “werkplek” eigenlijk uit, welke toegevoegde en functionele waarde heeft het voor je gebruikers, hoe pak je een implementatie aan en meer.

OneDrive, bekend bij de meeste van jullie, maakt in veel gevallen een (belangrijk) onderdeel uit van deze nieuwe digitale werkplek. In dit artikel wil ik je helpen hoe je gebruiker profielen & homefolders kunt migreren naar OneDrive.

Online zijn een diverse artikelen te vinden over hoe je kunt migreren naar OneDrive, echter is deze informatie erg gefragmenteerd. Over het algemeen wordt er gebruik gemaakt van 3rd party tooling om migraties (naar OneDrive en andere  online opslagdiensten) te automatiseren door middel van scripting. De tool waar we vandaag gebruik van gaan maken heet “ShareGate”

Onderstaand neem ik de de migratiestappen puntsgewijs met je door. Voor het gemak ga ik er van uit dat je ShareGate als hebt geïnstalleerd en geconfigureerd.

  1. Inventariseren is belangrijk. Wil je folders uitsluiten? Vanuit welke bronnen migreer je, zijn het er meerdere – profielen en homefolders bijvoorbeeld. Maak een duidelijk overzicht zodat je goed in beeld hebt waar welke data te vinden is, om hoeveel data het gaat (in GB’s) en waar het heen gemigreerd moet worden.
  2. Voor je kunt migreren moeten er een licenties zijn toegewezen aan je gebruikers. Het is niet zoals met Office365 Exchange Online dat je al kunt beginnen met synchroniseren en dan later de licenties kunt toewijzen.
  3. Als je een licentie hebt toegewezen aan een gebruiker wordt de OneDrive niet automatisch aangemaakt zoals in Exchange Online. De gebruiker dient eerst in te loggen om de OneDrive aan te maken, het zogenaamde “provisionen”. Dit gebeurt geautomatiseerd op de achtergrond. Dit kun je uiteraard ook in bulk doen gebruikmakend van Powershell. Gebruik hiervoor het volgende Script:

Import-Module “Microsoft.Online.Sharepoint.PowerShell” -Force
$credential = Get-credential
Connect-SPOService -url https://tenantnaam-admin.sharepoint.com -Credential $credential
$InputFilePath = “C:\Temp\OneDrivePreProvision.csv”
$CsvFile = Import-Csv $InputFilePath
ForEach ($line in $CsvFile)
{
Request-SPOPersonalSite -UserEmails $line.User -NoWait
Write-Host Personal site provisioned for $line.User -ForegroundColor Yellow
}

*Format CSV:

User
user1@domain.com
user2@domain.com

*Dit script roept een zogenaamd pre-provisioning request aan. Het request wordt in een queue geplaatst. Het is dus niet zo dat het uitvoeren van dit script voldoende is. Nadat het script zijn werk heeft gedaan wordt het pre-provisioning request daadwerkelijk uitgevoerd. Afhankelijk van het aantal gebruikers kan hier dat enige tijd in beslag nemen.

  1. Je hebt schrijfrechten nodig op alle OneDrive folders binnen de tenant om de data te kunnen migreren. *Tip – Maak hier een generiek account voor aan zodat gebruikers geen argwaan krijgen als ze zien dat er “iemand” rechten heeft op hun OneDrive (zelf heb ik hier niemand over gehoord gedurende een migratie van 1000+ gebruikers maar je weet het nooit.)

Via een rapportagefunctie binnen ShareGate kun je alle OneDrive folders binnen je tenant opvragen en rechten toekennen. Het is wel belangrijk om eerst stap 2 en 3 af te ronden anders werkt dit niet.

  1. Gebruik een CSV om de homefolder/profile locatie en de OneDrive URL in het script te krijgen, mede om ervoor te zorgen dat alles op de juiste locatie terecht komt. Bijvoorbeeld:

DIRECTORY;ONEDRIVEURL
Y:\USERNAME\PROFILE;https://tenant-my.sharepoint.com/personal/USERNAME_tenant_nl/
Y:\USERNAME\HOMEFOLDER;https://tenant-my.sharepoint.com/personal/USERNAME_tenant_nl/

Een aantal tips om je CSV samen te stellen, gebruik deze PowerShell functie om eenvoudig je homefolders/profiles te inventariseren en in een CSV te krijgen:

Function Get-ChildItemToDepth {

                               Param(

                                               [String]$Path = $PWD,

                                              [String]$Filter = “*”,

                                              [Byte]$ToDepth = 255,

                                              [Byte]$CurrentDepth = 0,

                                              [Switch]$DebugMode

                                               )

 

                               $CurrentDepth++

                                               If ($DebugMode) {

                              $DebugPreference = “Continue”

                                }

 

                               Get-ChildItem $Path | %{

                               $_ | ?{ $_.Name -Like $Filter }

 

                              If ($_.PsIsContainer) {

                              If ($CurrentDepth -le $ToDepth) {

 

                              # Callback to this function

Get-ChildItemToDepth -Path $_.FullName -Filter $Filter ` -ToDepth $ToDepth -CurrentDepth $CurrentDepth

                              }

                              Else {

                                              Write-Debug $(“Skipping GCI for Folder: $($_.FullName) ” + `

                                             “(Why: Current depth $CurrentDepth vs limit depth $ToDepth)”)

                              }

                               }

               }

}

 

Export alle UPN’s naar een Excel bestand en voer vervolgens eerst het volgende uit:

Voorbeeld user: username@domein.nl

Vervang @domein.nl door _domein_nl/ zodat je het format username_domein_nl/ voor iedere gebruiker krijgt.

*Het voorbeeld gebruikt een .nl domein, dit kan natuurlijk ook .com of iets anders zijn.

Voeg daarna ‘https://tenant-my.sharepoint.com/personal/’ toe voor ‘username_domein_nl/    zodat je https://tenant-my.sharepoint.com/personal/username_domein_nl/ krijgt.

Voeg daarna de Excel files samen zodat je dit format hebt:

DIRECTORY;ONEDRIVEURL
Y:\USERNAME\PROFILE;https://tenant-my.sharepoint.com/personal/USERNAME_tenant_nl/

  1. Als laatste stap voer je het script uit zodat alles daadwerkelijk wordt geüpload naar OneDrive.
##### ############
#Import ShareGate module
Import-Module Sharegate
#Exclude source folders
$ExcludeFolders = “examplefolder”,”examplefolder”
#Set CopySettings Incremental
$copysettings = New-CopySettings -OnContentItemExists IncrementalUpdate
#Example CSV file with columns titled DIRECTORY and ONEDRIVEURL:
$csvFile = “C:\temp\example.csv”
#load the CSV file into a table
$table = Import-Csv $csvFile -Delimiter “;”
#Get credentials
$cred = Get-Credential
#Cycle through each row
foreach ($row in $table)
{
#connect to the destination OneDrive URL
$dstSite = Connect-Site -Url $row.ONEDRIVEURL -UserName $cred.UserName -Password $cred.Password
#select destination document library, named Documents by default in OneDrive, this is different for each language, double check this.
$dstList = Get-List -Name Documenten -Site $dstSite
#Get list for profile folder and exclude folders
foreach ($SourceFolder in $row.DIRECTORY)
    {
    $folders = Get-ChildItem -Path $SourceFolder -Exclude $ExcludeFolders
    }
#Import folders
 foreach ($folder in $folders)
 {
 $uriFolder = [System.Uri]$folder.FullName
 Import-Document -SourceFilePath $uriFolder -DestinationList $dstList -InsaneMode -CopySettings $copysettings
 Write-Host Uploaded Files for $row.Directory -ForegroundColor Yellow
 }
 }