OneDrive PowerShell Module – Added support for OneDrive for Business
More than two years ago, I created my PowerShell module to access OneDrive. This module can be installed with a one-liner from https://www.powershellgallery.com/packages/OneDrive
Again, I was asked to support OneDrive for Business and finally, I’m ready: From version 2.0.0 OneDrive for Business is supported.
I provide the complete documentation on GitHub, where I will maintain it: https://github.com/MarcelMeurer/PowerShellGallery-OneDrive
Here is the summary of version 2.0.0:
———————————————-
The OneDrive PowerShell module is available via PowerShellGallery.com. If you want to support and work with me feel free to make changes cloning this repo, change and send me and a pull request.
This OneDrive version (2.0.0 and higher in PowerShellGallery.com) supports:
- OneDrive personal
- OneDrive for Business
Installation
Open PowerShell and
Install-Module -Name OneDrive -Scope CurrentUser -force
You can update the module to a newer version with the same command (-force). If you don’t use PowerShellGet currently, go to the Gallery on https://www.powershellgallery.com/packages/OneDrive and click “Get Started”.
Check your installation with
Get-Help -Name OneDrive
Authentication
Before you start using the OneDrive module you have registered your script/application. This differs depending on the OneDrive version to be used.
OneDrive Personal
Read this on my blog: https://www.sepago.de/blog/onedrive-powershell-module-new-version-with-improved-authentication/
- Go to: https://apps.dev.microsoft.com and login with your Microsoft Account (MSA) and “Add an app” in the category “converged applications”
- Enter a name and press “create”
- Press “Generate New Password” and save the password (app key)
- Also, save the “Application id”
- Press “Add Platforms” and select “Web”
- Check “Allow implicit Flow” and enter a “Redirect URL”. This is not a real URL. Choose a localhost address and note it. In my case, I chose: http://localhost/login
- Press “Save”
- Now you have all the necessary data for your app/script:
- Client Id: 5dd40b03-0ead-451b-b5e3-f704550e8cca
- AppKey: xqacs8K92MuCJKgciRHQ1Cf
- RedirectURI: http://localhost/login
- To get an authentication token use:
$Auth=Get-ODAuthentication -ClientID 5dd40b03-0ead-451b-b5e3-f704550e8cca -AppKey xqacs8K92MuCJKgciRHQ1Cf -RedirectURI http://localhost/login
OneDrive for Business
To use OneDrive for business you have to register your script/app to in Azure Active Directory
- Add an application in Azure Active Directory inside the Azure portal: https://portal.azure.com/#blade/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/RegisteredApps
- Chose “New application registration”
- Give your application a name and a unique sign-on URL. The sign-on URL has to be a valid URL but doesn’t have to exist. E.g.: http://sepago.de/1Drive4Business (make later sure that this URL is in the reply URL list of your application)
- Within the “Required permissions” add “Office 365 SharePoint Online (Microsoft.Sharepoint)”
- Select “Read and write user files” below “delegated permissions” for the Office 365 API
- Generate a secret key for this application and save it for later use. Also, save the application Id
- You should now have the following parameter:
- Client Id: 2831fc52-e1b8-4493-9f3a-a3dad74b2081
- AppKey: TqoSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
- RedirectURI: http://sepago.de/1Drive4Business
- Additionally you need the resource URL for OneDrive for Business. Normally: https://-my.sharepoint.com/. In our company this is the URL “https://sepagogmbh-my.sharepoint.com/” (the last one / is important).
- Resource ID: https://sepagogmbh-my.sharepoint.com/
- To get an authentication token use:
$Auth=Get-ODAuthentication -ClientId "2831fc52-e1b8-4493-9f3a-a3dad74b2081" -AppKey "TqoSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=" -RedirectURI "http://sepago.de/1Drive4Business" -ResourceId "https://sepagogmbh-my.sharepoint.com/"
Renew the authentication with a refresh token
An access token is 1 hour valid. You can get a new access token with the refresh token provided by the last authentication. This is necessary if you are creating a script that will work for a long time without further user input. Renew your access token automatically in the program code.
$Auth=Get-ODAuthentication -ClientId 2831fc52-e1b8-4493-9f3a-a3dad74b2081 -AppKey "TqoSXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=" -RedirectURI "http://sepago.de/1Drive4Business" -ResourceId "https://sepagogmbh-my.sharepoint.com/" -RefreshToken $LastAuth.refresh_token
- Where $LastAuth is your last authentication result (containing the refresh token)
- For OneDrive personal leave the ResourceId empty (-ResourceId “”)
Working with files and folders
Get an authentication code from above and store it in $Auth
List files and folders
Get-ODChildItems -AccessToken $Auth.access_token -ResourceId "https://sepagogmbh-my.sharepoint.com/" -path "/"
List files and folders
Remove-ODItem -AccessToken $Auth.access_token -ResourceId “https://sepagogmbh-my.sharepoint.com/” -path “/Upload”
Creating a folder
New-ODFolder -AccessToken $Auth.access_token -ResourceId "https://sepagogmbh-my.sharepoint.com/" -path "/" -FolderName "Upload"
Upload local files to OneDrive
Add-ODItem -AccessToken $Auth.access_token -ResourceId "https://sepagogmbh-my.sharepoint.com/" -LocalFile "D:\DEV\PowerShell\PowerShellGallery-OneDrive\Test\Uploads\IoT Workshop.pptx" -Path "/Upload"
List OneDrive drives
Get-ODDrives -AccessToken $Auth.access_token -ResourceId "https://sepagogmbh-my.sharepoint.com/"
Downloading some files
Get-ODItem -AccessToken $Auth.access_token -ResourceId "https://sepagogmbh-my.sharepoint.com/" -Path "/Upload/Doings.txt" -LocalPath "D:\DEV\PowerShell\PowerShellGallery-OneDrive\Test\Downloads" Get-ODItem -AccessToken $Auth.access_token -ResourceId "https://sepagogmbh-my.sharepoint.com/" -Path "/Upload/Doings.txt" -LocalPath "D:\DEV\PowerShell\PowerShellGallery-OneDrive\Test\Downloads" -LocalFileName "Copy from OneDrive.Doings.txt"
Delete a file in OneDrive
Remove-ODItem -AccessToken $Auth.access_token -ResourceId "https://sepagogmbh-my.sharepoint.com/" -Path "/Upload/Doings.txt"