Iako danas jedva koristim svoj osobni Microsoftov račun, njegov pridruženi Outlook.com poštanski sandučić i pohrana na OneDriveu još uvijek su tu. Budući da sam trenutno premašio kvotu od 90% korištenja, svaki put kad se prijavim prikazuje mi se iritantni banner i nekoliko podsjetnika da prijeđem na plaćeni plan. Napokon me nadvladala znatiželja i odlučio sam provjeriti što točno “jede” svu tu pohranu. Upozorenje za spojler, bile su to fotografije 🙂
OneDrive vam daje neke osnovne raščlambe pod Upravljanje pohranom stranici, ali to je uglavnom beskorisno. Možete pogoditi Oslobodite prostor > OneDrive poveznica koja vas vodi do Najveće datoteke na vašem OneDriveu pregled, da biste dobili popis svih svojih datoteka, poredanih po veličini. Nažalost, ne možete puno učiniti s ovim popisom jer ne postoji funkcija izvoza, a ne možete čak ni promijeniti redoslijed sortiranja, a kamoli dodavati ili uklanjati stupce. Još važnije za mene, navodi samo pojedinačne stavke, zanemarujući mape.
Pretpostavljam da ću tada napraviti vlastito izvješće o pohrani, s Graphom i PowerShell-om! Zapravo, već jesmo nešto slično prije godinu dana, a budući da je (osobni) OneDrive izgrađen na temelju SharePoint pohrane, možemo iskoristiti potpuno iste građevne blokove. Naravno, postoje neke razlike, koje ćemo pokriti s više detalja usput, ali proces ostaje uglavnom nepromijenjen: nabavite token, nabrojite stavke, proizvedite bolje organizirane rezultate i dodatne uvide. Idemo!
Sadržaj objave
Rukovanje autentifikacijom
Prvo, moramo se pobrinuti za provjeru autentičnosti. Graph API podržava rad s osobnim OneDrive stavkama, tako da ovaj dio ne bi trebao predstavljati izazov. Osim ako ne želite iskoristiti načelo najmanje privilegija, to jest. Ako dobijemo token za ugrađenu aplikaciju, s vrijednošću ID-a klijenta od 85b39081-b66a-43d9-aa80-56c7742c6672pristup za čitanje i pisanje neizbježan je i to želimo izbjeći. Alternativa je korištenje naše vlastite integrirane aplikacije Entra ID, koja nam omogućuje da dobijemo token s dozvolama samo za čitanje.
Prije nego što to učinimo, vrijedno je spomenuti da čak i s vlastitom aplikacijom ne možemo ograničiti dopuštenja za metapodatke stavke, jer Files.Read.All opseg i dalje dopušta aplikaciji dohvaćanje sadržaja bilo koje i svih stavki unutar korisnikovog OneDrivea. Zagonetno je zašto još uvijek nemamo opseg samo za “metapodatke”. Ali neka to bude upozorenje – pokretanje skripti kao što je ova potencijalno može razotkriti sadržaj bilo koje stavke koju ste pohranili na svom OneDriveu, stoga budite vrlo oprezni kome vjerujete!
Dakle, da bismo dobili token s “minimalnim” dopuštenjima, moramo registrirati aplikaciju Entra ID. Slijedite standardni skup korakai svakako odaberite Samo osobni Microsoft računi. Pod API dozvoleodaberite Microsoft Graph a zatim Delegiranje dopuštenja. Pronađite Files.Read.All opseg i dodajte ga. Konačno, pod Autentifikacijamorat ćete Dodajte URI za preusmjeravanje. The Mobilne i desktop aplikacije okus je ono što ćete trebati, a vrijednost bi trebala biti postavljena na http://localhost kako bi se osigurala kompatibilnost u svim segmentima. Nakon što ste gotovi, kopirajte vrijednost ID-a klijenta jer nam je potrebna za bitove provjere autentičnosti.
Rad s osobnim Microsoftovim računima uvijek se odvija u kontekstu samog korisnika, stoga delegirajte dopuštenja. Kako ne želimo sami rješavati autentifikaciju, koristimo se MSAL binarne datoteke za dobivanje pristupnog tokena. Binarne datoteke su danas uključene u sve module Microsoft 365/Azure PowerShell, tako da alternativno možete samo iskoristiti verzije koje dolaze kao dio njih. Evo nekoliko primjera:
#Install via NuGet Register-PackageSource -Provider NuGet -Name nugetRepository -Location https://www.nuget.org/api/v2 Install-Package -Name Microsoft.IdentityModel.Abstractions -Source nugetRepository Install-Package -Name Microsoft.Identity.Client -Source nugetRepository -SkipDependencies Load the MSAL binaries Add-Type -LiteralPath "C:\Program Files\PackageManagement\NuGet\Packages\Microsoft.IdentityModel.Abstractions.8.16.0\lib\net8.0\Microsoft.IdentityModel.Abstractions.dll" Add-Type -LiteralPath "C:\Program Files\PackageManagement\NuGet\Packages\Microsoft.Identity.Client.4.82.1\lib\net8.0\Microsoft.Identity.Client.dll"
ili
#Load the MSAL binaries as part of the ExO PowerShell module
Get-Module ExchangeOnlineManagement -ListAvailable -Verbose:$false | select -First 1 | select -ExpandProperty FileList | % Microsoft.IdentityModel.Abstractions.dll")
Add-Type -Path $_
Evo primjera koda za dobivanje pristupnog tokena:
$appID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$redirectUri = "http://localhost"
$Scopes = New-Object System.Collections.Generic.List[string]
$Scope = "Files.Read.All"
$Scopes.Add($Scope)
$app = [Microsoft.Identity.Client.PublicClientApplicationBuilder]::Create($appID).WithRedirectUri($redirectUri).WithAuthority("https://login.microsoftonline.com/consumers/")
$app2 = $app.Build()
$result = $app2.AcquireTokenInteractive($Scopes).ExecuteAsync().Result
Kao dio postupka autentifikacije, od korisnika će se tražiti da pristane na dopuštenja koja aplikacija traži. Budući da koristimo MSAL metode, navedena dopuštenja uvijek će uključivati izvanmrežni_pristup opseg također, što je prema dizajnui nešto što se ne može izbjeći, iako dolazi s očitim sigurnosnim implikacijama. Iz tog razloga, svakako uklonite aplikaciju nakon što završite s čišćenjem!
Nabrajanje predmeta
Sada kada imamo token, možemo nastaviti s nabrajanjem skupa stavki koje se nalaze unutar korisnikovog OneDrivea. Potreban nam je jedan zahtjev za dohvaćanje svojstava pogona, uključujući kvotu. Ovdje treba uzeti u obzir “podjelu” između “čistih” OneDrive podataka i Outlook privitaka. Drugim riječima, koristi se vrijednost kvote koju dobivate putem /pogon krajnja točka neće nužno biti jednaka zbroju pojedinačnih OneDrive stavki.
GET https://graph.microsoft.com/beta/me/drive?$select=quota GET https://graph.microsoft.com/beta/me/settings/storage/quota?%24expand=services
Nabrajanje stavki prilično je jednostavno jer ne moramo imati posla s više stranica ili knjižnica. Dakle, jedan zahtjev će učiniti trik, s tim da jedino razmatranje je želimo li uključiti verzije. Da, možete imati verzije stavki u osobnom OneDriveu, a ako sinkronizirate svoje Windows datoteke s njim ili ste veliki korisnik OneDrivea, trebali biste uzeti u obzir njihovu veličinu kako biste dobili odgovarajuću sliku. Skripta podržava -IncludeVersions prebaciti na rješavanje takvih scenarija.
Za dohvaćanje svih stavki koristit će se jedan od sljedećih zahtjeva, ovisno o tome želite li uključene verzije:
#Get all items within personal OneDrive with versions included $uri = "https://graph.microsoft.com/v1.0/me/drive/list/items?`$expand=driveItem(`$select=id,name,webUrl,parentReference,file,folder,package,shared,size,createdDateTime,lastModifiedDateTime,lastModifiedBy),versions(`$select=id)&`$select=id,driveItem,versions,webUrl&`$top=100" #Get all items within personal OneDrive $uri = "https://graph.microsoft.com/v1.0/me/drive/list/items?`$expand=driveItem(`$select=id,name,webUrl,parentReference,file,folder,package,shared,size,createdDateTime,lastModifiedDateTime,lastModifiedBy)&`$select=id,driveItem,versions,webUrl&`$top=5000"
Imajte na umu da koristimo drugu veličinu stranice za scenarij “uključivanja verzija” kako bismo izbjegli probleme s veličinom odgovora. Na sličan način dodajemo neku umjetnu odgodu kako bismo ublažili probleme s prigušivanjem prilikom dohvaćanja verzija artikla. Na kraju, trebamo malo prilagoditi veličinu mape kada stavke sadržane u mapi imaju više verzija.
Rukovanje izlazom
Zadnji dio koda obrađuje izlaz. Unutar radnog direktorija generirat će se CSV datoteka s popisom svih stavki pronađenih u korisnikovom OneDriveu. Za svaku pronađenu stavku prikazuju se pojedinosti poput toga je li stavka podijeljena ili tko ju je i kada zadnji put izmijenio, što bi trebalo pomoći u procesu donošenja odluka. Po želji, ako je instaliran modul ImportExcel, možete iskoristiti -Izvezi u Excel prebacite za generiranje XLS datoteke s dodatnim uvidima, kao što su najčešće vrste datoteka ili osnovno otkrivanje dupliciranih stavki.
Osim toga, također se generira HTML izvješće stilom koji podsjeća na SharePointovu stranicu metrike pohrane. Navedeno izvješće uključuje izravne veze na datoteke i mape, omogućujući vam brzu navigaciju do predmetne stavke i dobivanje dodatnog konteksta, ako je potrebno. Izvorni plan bio je spremiti ovu datoteku izravno u korisnikov OneDrive, ali kombinacija potrebnih dozvola za pisanje i činjenice da MSAL metode uvijek dohvaćaju token za osvježavanje rezultira neželjenim sigurnosnim implikacijama s ovim pristupom, pa sam na kraju dana odlučio pohraniti HTML datoteku lokalno.
Kako pokrenuti skriptu
Da biste dobili kopiju skripte, upotrijebite ovaj link. Provjerite jeste li konfigurirali Entra ID aplikaciju s Files.Read.All dopuštenje prije pokretanja skripte i dodajte odgovarajući ID aplikacije (linija 271) i URI za preusmjeravanje (linija 272). Skripta podržava tri parametra:
- UključiVerzije – navedite želite li uključiti statistiku verzija artikla u izlaz.
- Izvezi u Excel – ako je instaliran modul ImportExcel, koristite ovaj prekidač za generiranje Excel datoteke boljeg izgleda s dodatnim uvidima, umjesto zadane CSV datoteke.
- Opširno – koristite ovaj prekidač za izlaz dodatnih detalja obrade kako skripta napreduje.
Evo nekoliko primjera kako pokrenuti skriptu:
#Generate a report of all items within a user's OneDrive .\Graph_Personal_OneDrive_storage_report.ps1 #Include item versions .\Graph_Personal_OneDrive_storage_report.ps1 -IncludeVersions #Generate an Excel file with additional insights .\Graph_Personal_OneDrive_storage_report.ps1 -ExportToExcel
Završne riječi
Prije nego što zatvorimo članak, raspravimo nakratko o tragu koji skripta ostavlja i koje korake trebate poduzeti da ga očistite. Podrazumijeva se da nikada ne biste trebali pokrenuti kod koji ste pronašli na internetu, osim ako ne razumijete što on radi!
Kao što je gore spomenuto, skripta se oslanja na MSAL metode za dobivanje pristupnog tokena. To će također rezultirati generiranjem dugotrajnog tokena za osvježavanje, koji se potencijalno može koristiti za pristup vašem OneDrive-u tijekom duljeg vremenskog razdoblja. Iako skripta ne sprema u predmemoriju niti koristi navedeni token za osvježavanje, ipak biste trebali biti oprezni s ovim pristupom! Kako bismo umanjili utjecaj, koristimo posebno izrađenu aplikaciju Entra ID, gdje vi sami kontrolirate pristup i dopuštenja. Kao loša strana, ovo dolazi s određenim troškovima i možda nije prikladno za manje iskusne korisnike.
Čak i kada se poduzmu sve te mjere opreza, ipak bih preporučio da uklonite pristanak za aplikaciju sa stranice svog Microsoft računa, nakon što završite s čišćenjem. Da biste to učinili, idite na Privatnost > Pristup aplikacijiili koristiti ovaj izravni link. Pronađite aplikaciju na popisu i kliknite pojedinosti vezu s desne strane, a zatim pritisnite Prestani dijeliti dugme. Ako ikad ponovno poželite pokrenuti skriptu, od vas će se tražiti da ponovno pristanete, tako da nema problema.
Na kraju, želim spomenuti da postoji mala razlika u količini iskorištenog prostora za pohranu koju je prijavila krajnja točka pogona u usporedbi sa zbrojem veličina svih pojedinačnih stavki. Nisam uspio shvatiti odakle to potječe, s time da je Outlook usluga privitaka glavni osumnjičeni. Razlika se kreće između pozitivnih 250 MB i negativnih 70 MB, ovisno o tome koje vrijednosti uspoređujemo, tako da teško da je to nešto što bi pokvarilo dogovor… ali me jako nervira! Pa, nešto za poboljšati!



