SSingh
SSingh

Reputation: 153

Copy File From Teams to File Server Using Powershell

I am trying to copy a xlsx file from my Teams channel to a location on a file server.

I've seen various articles on line that suggest Invoke-WebRequest "https://teams.microsoft.com/l/file/rest of URL here" -OutFile C:\Test\CricketQuiz.xlsx. While this works in terms of being able to see the file at the desired file location, I can't actually open it as I get this error:

enter image description here

I get the same error when I tried the approach suggested in this article https://blog.jourdant.me/post/3-ways-to-download-files-with-powershell .

$url = "https://teams.microsoft.com/l/file/rest of my URL here"
$output = "C:\Test\SportsQuiz.xlsx"
$start_time = Get-Date

$wc = New-Object System.Net.WebClient
$wc.DownloadFile($url, $output) 

I'm guessing this is something relatively straightforward to resolve for those with more experience.

Upvotes: 2

Views: 4716

Answers (1)

Hilton Giesenow
Hilton Giesenow

Reputation: 10804

The problem here is that the link you've got (the Teams link) is not a direct link to the file at all - it's a link to an embedded version of the file, inside the Teams client (basically like a deep link). To -actually- download the file try the following:

  1. from the url you've got, parse out the "objectUrl" part of the query string. As an example, I have:

https://teams.microsoft.com/l/file/[guid]?tenantId=[guid2]&fileType=xlsx&objectUrl=https%3A%2F%2F[tenantname].sharepoint.com%2Fsites%2FHR%2FShared%2520Documents%2FEmployee%2520Sentiment%2520Analysis.xlsx&serviceName=recent

you want (in my example): https%3A%2F%2F[tenantname].sharepoint.com%2Fsites%2FHR%2FShared%2520Documents%2FEmployee%2520Sentiment%2520Analysis.xlsx

  1. then you need to querystring decode this, to get (e.g.) https://[tenantname].sharepoint.com/sites/HR/Shared%20Documents/Employee%20Sentiment%20Analysis.xlsx

  2. finally, you should use the PnP-PowerShell module's Get-PnPFile to download the file. This itself is a few steps though:

3.1 you need to connect the session, using Connect-PnPOnline, but you also need to connect to the right "SPWeb". In this case, it would be Connect-PnPOnline https://[tenantname].sharepoint.com/sites/HR

3.1 after that you can download the file, but you need to url decode it again, to get rid of %20 and similar, something like:

Get-PnPFile -Url "/Shared Documents/Employee Sentiment Analysis.xlsx" -AsFile -Path "c:\temp\"

This will give you a copy of Employee Sentiment Analysis.xlsx (in my example) inside c:\temp

Obviously this can all be automated, like the querystring decoding, the connect-pnp credentials, etc., but hopefully this gets you on the right path.

Upvotes: 2

Related Questions