はじめに
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と組み合わせて実行すると、アイテムとドキュメントを関連付けられるので応用が利くと思います。


