Initial commit for powershell scripts.

This commit is contained in:
mattspeer committed 2026-10-04 10:22:22 -05:00
1 parent f4e5d9dcbd
commit 4fd95b76d6
18 files changed
+1803

No files matched your search

+112
View File
@@ -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