Table of Contents
Get SharePoint Files in a site and download them to your local device
In the tutorial below I explain how you can request all files from SharePoint sites including child directories.
You can also download them right away.
There is no way in the tutorial how to do this directly with the Microsoft Graph API URLs.
I have written 2 cmdlets in a module for this myself that you can use.
Do you want to know how you can do this without a module? Then you can go to the last paragraph and consult the links of the official Microsoft Graph API docs.
Before we can start…
We need the following:
- Optimized.Mga.SharePoint module
- AzureAD registered application
With permissions:- Sites.Read.All
- Files.ReadWrite.All
PowerShell module Optimized.Mga
I made the Optimized.Mga.SharePoint module myself. It’s a submodule for Optimized.Mga.
The module (for now) contains the cmdlets:
- Get-MgaSharePointFiles
- Download-MgaSharePointFiles
- Upload-MgaSharePointFiles
If you have feedback for me, you can leave a comment on this post, or on Github.
AzureAD registered application
Not sure how to get started with an AzureAD registered application for the Microsoft Graph API?
I wrote a page for this which you can find here:
How to start with Microsoft Graph in PowerShell by Bas Wijdenes
Microsoft also created a blog post about how to get started with an AzureAD registered application for the Microsoft Graph API.
You can find that here:
Manage app registration and API permission for Microsoft Graph notifications – Microsoft Graph | Microsoft Docs
Let’s get started with Optimized.Mga in PowerShell
Getting the Authorization token from Microsoft Graph API
Open Powershell!
To install the module & submodule you can use the following cmdlet:
Install-Module Optimized.Mga.SharePoint -Scope CurrentUser
Copy the below cmdlet.
Update the ApplicationID, ClientSecret & Tenant with the correct values.
By running the cmdlet you will create an Authorization token that other cmdlets (like Get-Mga
) will automatically use in the backend.
$null = Connect-Mga -ClientSecret 'XXXX' -ApplicationID 'b5954443-ad10-4d1c-8cbc-dc05268a1858' -Tenant 'bwit.onmicrosoft.com'
If everything went well, you have received a message stating that you are logged in.
Let’s start with Get-MgaSharePointFiles
Get-MgaShar
ePointFiles searches for the correct site including child folders.
There are 3 parameters, of which I’ll explain the ChildFolders one abit more below.
The other two: TenantName & Site are easier to understand.
TenantName is your TenantName (With or without .onmicrosoft.com).
Site is the SharePoint Site name.
By using the following command you would retrieve all files from the root of a site:
Get-MgaSharePointFiles -TenantName 'm365x794103.onmicrosoft.com' -Site 'XXXX'
createdDateTime : 2021-06-07T10:15:34Z
eTag : "{66924C60-0DDF-418D-A06A-F650A19F785E},1"
id : 01MIYRG5LAJSJGNXYNRVA2A2XWKCQZ66C6
lastModifiedDateTime : 2021-06-07T10:15:34Z
name : XXXX
There is a ChildFolders parameter that is not mandatory.
If you do not provide ChildFolders, the root is automatically used.
ChildFolders are directories in the root as in the screenshot below.
The ChildFolder parameter accepts an array of subfolders.
So for example when you want to search for files in the directory Personal as above you should use the following command:
Get-MgaSharePointFiles -TenantName 'XXXXXX.onmicrosoft.com' -Site 'XXXX' -ChildFolders 'XXXX','Personnel files','bas.wijdenes','Personal'
createdDateTime : 2021-06-07T14:00:21Z
eTag : "{81017A49-4536-418C-9A71-0A03F46CD0CD},5"
id : 01MIYRG5KJPIAYCNSFRRAZU4IKAP2GZUGN
lastModifiedDateTime : 2021-06-07T14:01:18Z
name : Document.docx
Get-MgaSharePointFiles
returns all items in the directory. Including the ChildFolders.
This is because then you always see a list of all items. The disadvantage of this is that you have to filter.
When you use Get-MgaSharePointFiles
and capture it in a variable $SPItems
you can filter through it with Where-Objec
t.
$SPItems = Get-MgaSharePointFiles -TenantName 'XXXXXX.onmicrosoft.com' -Site 'XXXX' -ChildFolders 'HR NL','Personnel files','bas.wijdenes','Personal'
$SPItem = $SPItems | Where-Object { $_.Name -like "*Document.docx" }
Now we have the correct file in $SPItem
to start downloading.
Let’s use Download-MgaSharePointFiles to download a file from SharePoint with PowerShell
Download-MgaSharePointFiles
works together with Get-MgaSharePointFiles
and therefore expects an object back from Get-MgaSharePointFiles
.
That is why it is useful that we have already filled the variable $SPItem
in the previous chapter.
Download-MgaSharePointFiles
has 2 parameters: SPItem & OutputFolder.
SPItem expects the full object $SPItem
.
OutputFolder speaks for itself.
This is the path where the file will be downloaded.
To download a file from SharePoint you can use the following command:
Download-MgaSharePointFiles -SPItem $Item -OutputFolder 'C:\temp\'
The file will always keep the same name as in SharePoint.
Do you want to download all files?
Then you can use the $SPItems
in a foreach
loop:
foreach ($Item in $SPItems) {
Download-MgaSharePointFiles -SPItem $Item -OutputFolder 'C:\temp\'
}
You now know, how to download files from SharePoint with Microsoft Graph API and PowerShell.
The official Microsoft Graph API docs
The following Microsoft Graph API docs are used in this tutorial:
Get a SharePoint site:
Get a SharePoint Site – Microsoft Graph beta | Microsoft Docs
List contents of a folder:
List the contents of a folder – Microsoft Graph v1.0 | Microsoft Docs
Download a file:
Download a file – Microsoft Graph v1.0 | Microsoft Docs