Opret OneDrive på forhånd med PowerShell
En OneDrive bliver først oprettet, når brugeren åbner den. Skal hjemmedrev flyttes derhen, skal den findes før. My Sites til alle brugere i SharePoint Server, som i 2014, og OneDrive på forhånd i Microsoft 365 med Request-SPOPersonalSite.
En OneDrive bliver oprettet første gang, brugeren går ind på den (Microsoft). Det er fint i det daglige, men ikke før en migrering: skal hjemmedrevene flyttes til brugernes OneDrive, skal de findes, før migreringen går i gang. Microsoft skriver det i vejledningen til fildrev, “Before you migrate your file share content, you must pre-provision your users in Microsoft 365” (Microsoft), og Migration Manager fejler med Destination site or web doesn’t exist, hvis en OneDrive ikke er oprettet (Microsoft).
I SharePoint Server hed det samme My Sites. I 2014 blev de oprettet på forhånd for alle brugere med et eksempelscript fra Microsofts TechNet Gallery.
SharePoint Server#
Scriptet går gennem alle brugerprofiler og opretter et personligt websted til dem, der ikke har et. Kernen, forkortet og ikke kørt:
1Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
2
3$site = Get-SPSite "http://<my-site-vaert>"
4$context = Get-SPServiceContext $site
5$upm = New-Object Microsoft.Office.Server.UserProfiles.UserProfileManager($context)
6
7foreach ($up in $upm.GetEnumerator()) {
8 $account = $up[[Microsoft.Office.Server.UserProfiles.PropertyConstants]::AccountName].Value
9 if ($null -ne $up.PersonalSite) {
10 continue
11 }
12 try {
13 $up.CreatePersonalSite()
14 Write-Host "Oprettet: $account"
15 }
16 catch {
17 Write-Warning "Fejlede: $account ($($_.Exception.Message))"
18 }
19}
20
21$site.Dispose()
CreatePersonalSite()opretter webstedet med det samme, hvis brugeren ikke har et (Microsoft). Er der mange brugere, læggerCreatePersonalSiteEnque($false)oprettelsen i kø i stedet (Microsoft). Bemærk stavemåden: Enque.- My Site-værten skal være sat op: en administreret sti, en applikationspulje og en webstedssamling med skabelonen My Site Host (Microsoft).
- Adressen i
Get-SPSitebruges kun til at finde brugerprofiltjenesten. Originalen brugtehttp://intranet/mysites/profile; ethvert websted i en webapplikation, der er forbundet til tjenesten, kan bruges.
Rettet i forhold til 2014-udgaven#
$profileer en automatisk variabel i PowerShell (stien til profilscriptet), og PowerShell skelner ikke mellem store og små bogstaver. Originalen brugte den som løkkevariabel. Det virker, men overskriver$PROFILEi scriptet. Her hedder den$up.- Beskeden efter oprettelsen var “Personal Site Admin has assigned”, som ikke siger, hvad der skete. Nu skrives kontonavnet, og en fejl skrives med Microsofts egen fejlbesked.
- Linket til TechNet Gallery virker ikke længere. Det sender videre til learn.microsoft.com og ender i en 404 (september 2026).
Microsoft 365#
I Microsoft 365 er det Request-SPOPersonalSite i SharePoint Online Management Shell (Microsoft). Brugerne står i en tekstfil med én e-mailadresse pr. linje:
1Connect-SPOService -Url "https://<tenant>-admin.sharepoint.com"
2
3$users = Get-Content -Path "C:\Brugere.txt"
4Request-SPOPersonalSite -UserEmails $users
Kommandoen tager højst 200 brugere ad gangen og stopper, hvis listen har en tom linje (Microsoft). Det er en anmodning, ikke en oprettelse. Selve OneDrive’en oprettes senere af et timerjob, og for mange brugere skriver Microsoft, at det kan tage flere dage. Har brugeren allerede en OneDrive, bliver anmodningen ignoreret uden fejl.
Til alle brugere med en licens i bunker af 199, som i Microsofts eget script:
1Connect-MgGraph -Scopes "User.Read.All"
2Connect-SPOService -Url "https://<tenant>-admin.sharepoint.com"
3
4$users = Get-MgUser -Filter 'assignedLicenses/$count ne 0' -ConsistencyLevel eventual -CountVariable antal -All -Select UserPrincipalName |
5 Select-Object -ExpandProperty UserPrincipalName
6
7for ($i = 0; $i -lt $users.Count; $i += 199) {
8 $batch = $users[$i..([Math]::Min($i + 198, $users.Count - 1))]
9 Request-SPOPersonalSite -UserEmails $batch -NoWait
10 Start-Sleep -Milliseconds 655
11}
-NoWait venter ikke på status for hver bunke, hvilket Microsoft skriver kan gøre det langsommere. Filteret tager alle med en licens, ikke kun dem med en SharePoint-licens.
PnP PowerShell har det samme som Request-PnPPersonalSite -UserEmails (også højst 200) og New-PnPPersonalSite -Email (PnP).
Hvem har en OneDrive#
1Get-SPOSite -IncludePersonalSite $true -Limit all -Filter "Url -like '-my.sharepoint.com/personal/'" |
2 Select-Object -ExpandProperty Url
Adressen er https://<tenant>-my.sharepoint.com/personal/<upn>, hvor punktum og @ i brugernavnet er blevet til understreger: jens.hansen@firma.dk bliver jens_hansen_firma_dk. Er adressen optaget, sætter SharePoint et tal eller en GUID på (Microsoft). Adressen kan altså ikke regnes ud på forhånd med sikkerhed; den skal slås op, når migreringen skal have sine destinationer.
Det der driller#
- Brugeren skal kunne logge ind og have en SharePoint-licens. En bruger med blokeret login får ingen OneDrive. Microsoft foreslår at åbne for login med
Update-MgUser -BlockCredential $falseførst. Den, der kører kommandoen, skal være SharePoint-administrator og selv have en SharePoint-licens (Microsoft). - Retten til at oprette en OneDrive er Create Personal Site i brugerprofilerne. Som standard har “Everyone except external users” den (Microsoft). Er den fjernet for en gruppe, virker forudoprettelsen heller ikke for dem. Ikke efterprøvet.
- Multi-Geo.
Request-SPOPersonalSitetager ikke højde for Multi-Geo. - Microsoft Graph.
GET /users/{id}/driveopretter brugerens OneDrive, hvis brugeren har en licens, men kun med delegeret adgang, ikke som app (Microsoft). - Standardstørrelsen er 1 TB for de fleste abonnementer og ændres for nye OneDrives med
Set-SPOTenant -OneDriveStorageQuotai MB (Microsoft).
Hvordan brugerne fra fildrevet findes i Entra ID, står i Brugere ved en migrering.