Initial commit for powershell scripts.
This commit is contained in:
1 parent
f4e5d9dcbd
commit
4fd95b76d6
18 files changed
+1803
No files matched your search
Executable
+112
@@ -0,0 +1,112 @@
|
||||
$SiteUrl = "https://zefiromethane.sharepoint.com/sites/contentTypeHub"
|
||||
$Destination = "F:\TeamSite"
|
||||
|
||||
# Opens a Microsoft sign-in window.
|
||||
Connect-MgGraph -Scopes "Sites.Read.All" -NoWelcome
|
||||
|
||||
function Get-GraphCollection {
|
||||
param([string]$Uri)
|
||||
|
||||
do {
|
||||
$response = Invoke-MgGraphRequest -Method GET -Uri $Uri
|
||||
|
||||
foreach ($item in @($response.value)) {
|
||||
Write-Output $item
|
||||
}
|
||||
|
||||
$Uri = $response.'@odata.nextLink'
|
||||
}
|
||||
while ($Uri)
|
||||
}
|
||||
|
||||
function Copy-GraphFolder {
|
||||
param(
|
||||
[string]$DriveId,
|
||||
[string]$ChildrenUri,
|
||||
[string]$LocalFolder
|
||||
)
|
||||
|
||||
New-Item -ItemType Directory -Path $LocalFolder -Force |
|
||||
Out-Null
|
||||
|
||||
foreach ($item in Get-GraphCollection -Uri $ChildrenUri) {
|
||||
$localPath = Join-Path $LocalFolder $item.name
|
||||
$escapedDriveId = [Uri]::EscapeDataString($DriveId)
|
||||
$escapedItemId = [Uri]::EscapeDataString([string]$item.id)
|
||||
|
||||
if ($null -ne $item.folder -or $null -ne $item.package) {
|
||||
# Create the folder, including empty folders.
|
||||
New-Item -ItemType Directory -Path $localPath -Force |
|
||||
Out-Null
|
||||
|
||||
$childUri = `
|
||||
"https://graph.microsoft.com/v1.0/drives/" +
|
||||
"$escapedDriveId/items/$escapedItemId/children"
|
||||
|
||||
Copy-GraphFolder `
|
||||
-DriveId $DriveId `
|
||||
-ChildrenUri $childUri `
|
||||
-LocalFolder $localPath
|
||||
}
|
||||
elseif ($null -ne $item.file) {
|
||||
if (Test-Path -LiteralPath $localPath) {
|
||||
Write-Host "Skipping existing file: $localPath"
|
||||
continue
|
||||
}
|
||||
|
||||
Write-Host "Downloading: $localPath"
|
||||
|
||||
$contentUri = `
|
||||
"https://graph.microsoft.com/v1.0/drives/" +
|
||||
"$escapedDriveId/items/$escapedItemId/content"
|
||||
|
||||
Invoke-MgGraphRequest `
|
||||
-Method GET `
|
||||
-Uri $contentUri `
|
||||
-OutputFilePath $localPath
|
||||
}
|
||||
else {
|
||||
Write-Warning "Unsupported item skipped: $($item.name)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Resolve the SharePoint site from its URL.
|
||||
$parsedSiteUrl = [Uri]$SiteUrl
|
||||
$sitePath = $parsedSiteUrl.AbsolutePath.TrimEnd("/")
|
||||
|
||||
if ([string]::IsNullOrWhiteSpace($sitePath)) {
|
||||
$siteLookupUri = `
|
||||
"https://graph.microsoft.com/v1.0/sites/$($parsedSiteUrl.Host)"
|
||||
}
|
||||
else {
|
||||
$siteLookupUri = `
|
||||
"https://graph.microsoft.com/v1.0/sites/" +
|
||||
"$($parsedSiteUrl.Host):$sitePath"
|
||||
}
|
||||
|
||||
$site = Invoke-MgGraphRequest -Method GET -Uri $siteLookupUri
|
||||
|
||||
New-Item -ItemType Directory -Path $Destination -Force |
|
||||
Out-Null
|
||||
|
||||
# A Graph "drive" represents a SharePoint document library.
|
||||
$drivesUri = "https://graph.microsoft.com/v1.0/sites/$($site.id)/drives"
|
||||
|
||||
foreach ($drive in Get-GraphCollection -Uri $drivesUri) {
|
||||
$localLibrary = Join-Path $Destination $drive.name
|
||||
$escapedDriveId = [Uri]::EscapeDataString([string]$drive.id)
|
||||
|
||||
Write-Host "Downloading library: $($drive.name)"
|
||||
|
||||
$rootChildrenUri = `
|
||||
"https://graph.microsoft.com/v1.0/drives/" +
|
||||
"$escapedDriveId/root/children"
|
||||
|
||||
Copy-GraphFolder `
|
||||
-DriveId $drive.id `
|
||||
-ChildrenUri $rootChildrenUri `
|
||||
-LocalFolder $localLibrary
|
||||
}
|
||||
|
||||
Disconnect-MgGraph
|
||||
Reference in new issue
Block a user