※アフィリエイト広告を利用しています。

【MgGraph版】PowerShellでSharePointサイトのドキュメントライブラリにファイルアップロードする方法

Microsoft365

はじめに

SharePointドキュメントライブラリに自動でファイルアップロードする要件が発生したので、それを自動化するためのPowerShellコマンドを作成する機会があったので、備忘を兼ねて必要な手順をまとめます。

EntraIDのアプリ設定

EntraIDアプリを用いての非対話認証・定期的な自動実行を前提としてます。

必要なアプリケーション権限は「Sites.ReadWrite.All」です。詳細な手順は他記事に書いてますので手順がわからない場合は、参考にしてください

スクリプト

必要なスクリプトを順を追って書いていきます。

MgGraphへの接続

Connect-MgGraph -TenantId<yourTenantId> -ClientSercretCredential <yourEntraAppSercret>

SharePointサイトの内部ID取得

対象のドキュメントライブラリがあるSharePointサイトの内部IDを取得します。内部IDはドキュメント取得時に必要となるためです。「https://」は不要でテナントからの記述でOKです。

$SiteHost = <youTenant.sharepoint.com>
$SitePath = </sites/yourSharePointSite>
$SiteIdPath = "{0}:{1}" -f $SiteHost,$SitePath
## <youTenant.sharepoint.com>:</sites/yourSharePointSite>
##サイト情報を取得する
$site = Get-MgSite -SiteId $SiteIdPath

ドキュメントライブラリの内部IDを取得

アップロード時にドキュメントライブラリの内部IDが必要となりますので取得します。

$drives = Get-MgSiteDrive -SiteId $site.Id -All
$drive = $drives | Where-Objects{$_Name -eq <yourTargetLibraryName>}

アップロードフォルダの定義

今回の例ではドキュメントライブラリにフォルダを作って、作ったフォルダにファイルをアップロードするとします。

#フォルダの定義
$FolderName = <yourNewFolderName>

#ドキュメントライブラリのルート直下を取得
$DriveItems = Get-MgDriveRootChild -DriveId $drive.Id -all

#同名のフォルダがないかを検索
#sameFolder = $DriveItems | Where-Object {$_.Name -eq $FolderName -and $null -ne $_.Folder} | Select-Object -First 1

if(sameFolder){
Write-Host "既存のフォルダを利用"
$Folder = $samFolder
}
else{
Write-Host "フォルダ新規作成"
$params =@{
Name = $FolderName
Folder=@()
#競合した場合エラー
"@microsoft.graph.conflictBehavior" = "fail"
}
$Folder = New-MgDriveRootChild -DriveId $drive.Id -BodyParameter $params
}

ファイルアップロード

ファイルはローカルまたはオンプレファイルサーバから取得する前提とします。アップロードはAPIで実行します。

$InputFile = <yourFileFullPass>
$ContentType = [system.Web.MimeMapping]::GetMimeMapping(InputFile)
$FileName = [System.IO.Path]::GetFileName($InputFile)
$EncodedFileName = [System.Uri]::EscapeDataString($FileName)
 
$UploadUri = "https://graph.microsoft.com/v1.0/drives/$($drive.ID)/root:/$FolderName/$EncodedFileName:/content"

#ファイルアップロード
Invoke-MgGraphRequest -Method PUT -Uri $UploadUri -InputFilePath $InputFile -ContentType $ContentType

まとめ

以上で、「【MgGraph版】PowerShellでSharePointサイトのドキュメントライブラリにファイルアップロードする方法」でした。

SharePointリストのアイテムIDと組み合わせて実行すると、アイテムとドキュメントを関連付けられるので応用が利くと思います。

タイトルとURLをコピーしました