どうもミツシマです。

前回「(Office365)SharePoint Online上でPowershellにてファイルを検索してダウンロードする方法を検証してみた」というのをやってみたが、今回はその逆でローカルからSharePoint Online上にファイルをアップロードする方法を検証してみた。


検証環境は以下の通り
PC:Windows10 Pro


今回もSharePoint OnlineをPowershell上でリモート操作する為にSharePoint CSOMを使用した。
その為、事前準備が必要だが今回は特に記載しない。
※確認したい人は前回の検証内容に記載しているので確認してみて下さい。


そして今回の検証もちょっと疲れた。。。。
出来たスクリプトがこちら↓↓↓


〜SPO-UploadFile.ps1〜

#SharepointOnlineに繋ぐためのアセンブリのロード
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client") > $null
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint.Client.Runtime") > $null

#事前環境変数 設定
$CurrentFolder = Split-Path $MyInvocation.MyCommand.Path -Parent
$UploadFileName = "TEST用.xlsx"
$UploadFilePath = $CurrentFolder + "\" + $UploadFileName

$UserName = "test01@<ドメイン名>.onmicrosoft.com"
$Password = "Password"
$SiteURL = "https://<ドメイン名>.sharepoint.com/sites/TEST-Sites"
$StaticURL = "/TESTDocuments/TestFolder0001"


#サイトへの認証処理
$pwd = convertto-securestring $Password -AsPlainText -Force
$credential = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($UserName, $pwd)
$Context = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
$Context.Credentials = $credential

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

$TargetFolderURL = $SiteURL + $StaticURL

#対象フォルダー取得
$objFolder = $Context.Web.GetFolderByServerRelativeUrl($TargetFolderURL)
$Context.Load($objFolder)
$Context.ExecuteQuery()

# sharepoint側のファイルストリームを開いてファイルをアップロード(Overwiteは必要に応じて変更)
$FileStream = New-Object System.IO.FileStream($UploadFilePath,[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()

Write-Output "処理が完了しました."
pause


〜解説〜

スクリプトとしては「SPO-UploadFile.ps1」と同じフォルダ階層にある「TEST用.xlsx」というエクセルファイルをSharePoint Online上にアップロードしている。
アップロード先のサイト名「TEST-Sites」、ドキュメント名「TESTDocuments」の中にある「TestFolder0001」フォルダにアップロードしている。
この辺りは事前に環境変数で定義しているので、それぞれの環境に合わせて変更・改修すれば使用出来るはず。

↓↓↓そしてスクリプト全体の流れとしてはこんな感じ↓↓↓
最初にSharePoint Online CSOMを使用する為にアセンプリをロードする(これは毎回実行が必要)。
次に環境変数の情報を使用してSharePoint Online上の対象サイトの対象ファルダーにアクセスする。
その後ローカル上の指定ファイルを開いて、先程のSharePoint Online上の対象フォルダーにアップロード(追加)している。


流れとしてはそんなに難しくないが、開発をやってきていない人間としては「System.IO.FileStream」というのがとっつきにくいのが正直なところ。。。。
他にもやり方がある人はぜひアドバイス欲しいです!!


今回はこんな感じで終了(^o^)


P.S.SharePointというのはサイトを色々カスタマイズ出来るみたいだから、色々勉強してみたいな!
   どなたかこれがオススメという参考書があれば教えてほしいです(^^)
スポンサードリンク