
Back in early 2023 I published a post:
PowerShell script to download a user’s OneDrive content
That original script – Download-OD4BAccount.ps1
– quickly became one of my go-to tools for off-boarding and archiving user data. It let administrators export an entire OneDrive for Business library directly to on-premises storage without paying Microsoft to keep the data around.
Since then, the script has seen heavy real-world usage, and thanks to some great community feedback it just got a serious upgrade.
Why the Update
A reader recently reached out after running the script against a very large OneDrive.
They noticed that not every file was exported.
After some digging, we discovered the root cause:
- The Microsoft Graph PowerShell cmdlets
Get-MgUserDriveRootChild
andGet-MgUserDriveItemChild
now page their results by default. - Without explicit pagination, large folders could quietly drop files from the export.
This was a subtle but critical issue – your export might look fine at first glance, but some files would never make it to disk.
What’s New in the Updated Script
The refreshed script keeps the original simplicity and speed but addresses these limitations and more.
– Full Pagination Support
Both Get-MgUserDriveRootChild
and Get-MgUserDriveItemChild
now run with the -All
switch, ensuring every item – even in massive libraries – is fetched.
– Reliable Folder Traversal
Recursive folder expansion now preserves the full path, so deep folder hierarchies are exported exactly as they appear in OneDrive.
– Broader Microsoft Graph Scopes
The connection now requests:
Files.Read.All, User.Read.All, Directory.Read.All
These scopes ensure cross-user OneDrive exports work reliably across tenants and admin scenarios.
– Cleaner Reports
Removed an undefined $Job
field from the file report, preventing runtime errors.
– More Robust Downloads
The script now checks and creates destination directories before writing each file, so missing folder paths won’t break the download process.
– Improved Batching and Multi-Threading
Thread batching logic is more resilient when splitting large file lists, while keeping the same multi-threaded performance boost that made the original so fast.
Quick Start
The usage remains the same:
.\Download-OD4BAccount.ps1 -Username [email protected] `
-Destination "D:\OD4B" `
-ThreadCount 3 -Verbose
Prerequisites
- Microsoft Graph PowerShell Module (the script will auto-install if missing).
- Azure AD user with admin consent to approve:
Organization.Read.All
User.Read.All
Directory.Read.All
Files.Read.All
(new requirement)
When to Use This Script
Off-boarding – export a departing employee’s OneDrive to a secure archive before disabling their account.
- Legal hold or compliance – capture a one-to-one copy of a user’s OneDrive library for audit purposes.
- Bulk migration scenarios – move large OneDrive libraries to on-prem or a different tenant without relying on paid retention.
Community-Driven Improvement
This update wouldn’t have happened without feedback from the community.
Real-world use exposed a change in the Microsoft Graph SDK behaviour, and the fix – adding -All
– was simple but critical.
If you’ve used the original version, I highly recommend updating your copy with the new script to guarantee complete and reliable exports.
Download the updated script: Download-OD4BAccount.ps1
Feel free to share feedback or improvements. Real-world input keeps these tools evolving and useful for everyone.