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

スポンサーリンク


ローカルのファイルをSharePointのドキュメントライブラリにPowerShellを使ってアップロードする方法をご紹介します。

例えばサーバ上のファイルをSharePointのドキュメントライブラリに夜間バッチでバックアップしたい時に活用することができます。

スポンサーリンク

CSOMのモジュールをインストール

CSOMのモジュールをインストールしておく必要があります。

Microsoftのサイトよりインストールしてください。

PowerShell で SharePoint CSOM を使用する際の Tips

SharePoint Online Management Shellをインストールしても動きます。

PowerShellコード

環境に合わせて変数値は変更してください。

今回は次の条件でファイルをアップロードする前提となっています。

アップロードするファイル
C:\temp\uploadfile.txt

アップロードするSharePointドキュメントライブラリ
https://example.sharepoint.com/sites/library/hoge

#Load SharePoint CSOM Assemblies
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") > $null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") > $null

#Office365 user information
$UserName = "user@example.com"
$Password = convertto-securestring "XXXXXXXX" -asplaintext -force

#Upload file information
$CurrentFolder = "C:\temp"
$UploadFileName = "uploadfile.txt"
$UploadFilePath = $CurrentFolder + "\" + $UploadFileName

#SharePoint Document Library
$SiteURL = "https://example.sharepoint.com/sites/library"
$StaticURL = "/hoge"
$TargetFolderURL = $SiteURL + $StaticURL

try {
    #Setup the context
    $credential = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $Password)
    $Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
    $Context.Credentials = $credential

    $objWeb = $Context.Web
    $Context.Load($objWeb)
    $Context.ExecuteQuery()

    #Get upload folder
    $objFolder = $Context.Web.GetFolderByServerRelativeUrl($TargetFolderURL)
    $Context.Load($objFolder)
    $Context.ExecuteQuery()

    # File upload
    $FileStream = New-Object System.IO.FileStream($uploadFile,[System.IO.FileMode]::Open)
    $FileCreationInfo = New-Object Microsoft.SharePoint.Client.FileCreationInformation
    $FileCreationInfo.Overwrite = $true
    $FileCreationInfo.ContentStream = $FileStream
    $FileCreationInfo.Url = $UploadFileName

    $UpLoad = $objFolder.Files.Add($FileCreationInfo)

    $Context.Load($UpLoad)
    $Context.ExecuteQuery()

    $FileStream.Close()

    $Context.Dispose()

    Write-host "File uploaded Successfully!" -f Green
}
Catch {
    write-host "Error Uploading File: $($_.Exception.Message)" -f Red
}