Извлечение отчетов об использовании из тенденций популярности (Sharepoint Online) с помощью PowerShell

#powershell #sharepoint #sharepoint-2013 #office365

#powershell #sharepoint #sharepoint-2013 #office365

Вопрос:

Несколько дней назад я пытался получить отчеты об использовании всех сайтов из моего Sharepoint Online, но поскольку у нас слишком много сайтов, было бы сложно получить их все, просматривая ссылку за ссылкой, загружая отчет .xlsx. Затем я начал работать над сценарием PowerShell для извлечения этого содержимого.

Но по какой-то причине, когда мой код начинает загружать файл, вместо этого он загружает HTML-код страницы входа в O365. Это наводит меня на мысль, что приложение теряет сеанс, потому что в предыдущий момент оно уже было подключено к сайту, и внезапно я закончил со страницей входа в систему. Хотя я понятия не имею, как это исправить…

Это часть кода, которая пытается загрузить отчет об использовании:

 # Usage Reports for Prod 
$Usage       = $UsageGUID 

# set the file path and name 
$filename = $path   (Get-Variable $searchreport).Name   ".xlsx" 
$reportid = (Get-Variable $searchreport).Value

$TTNcontent = "javascript:ResetSpFormOnSubmitCalled();__doPostBack('__Page','ReportId="   $reportid   "')"

# setup the WebRequest    
[net.httpWebRequest] $webRequest = [net.webRequest]::create($url)
$webRequest.Credentials = $SPOCredentials
$webRequest.CookieContainer = New-Object System.Net.CookieContainer
$webRequest.Accept = "image/jpeg, application/x-ms-application, image/gif, application/xaml xml, image/pjpeg, application/x-ms-xbap, */*"    
$webRequest.ContentType = "application/x-www-form-urlencoded" 
$webRequest.Method = "POST"
$webRequest.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"

$encodedContent = [System.Text.Encoding]::UTF8.GetBytes($TTNcontent) 
$webRequest.ContentLength = $encodedContent.length 
$requestStream = $webRequest.GetRequestStream() 
$requestStream.Write($encodedContent, 0, $encodedContent.length) 
$requestStream.Close()

#The problem occurs on this step: Once GetResponse is fired, instead of getting the .xlsx as a response, it downloads the HTML of the O365 authentication screen
#My guess is that the application is losing the login session before the .GetResponse() but I don't know how/why...
[net.httpWebResponse] $resp = $webRequest.GetResponse();    
$rs = $resp.GetResponseStream();  
[System.IO.BinaryReader] $sr = New-Object System.IO.BinaryReader -argumentList $rs; 
[byte[]]$results = $sr.ReadBytes(10000000);

# write the file 
Set-Content $filename $results -enc byte
  

Вот полный файл кода:
GetUsageReports_SPOnline.ps1

Есть идеи или предложения …?

Заранее спасибо 🙂

Марко