雑記

PowerShell で SharePoint にファイルをアップロードする方法【実装編】

※ この記事にはアフィリエイトリンクが含まれています

結論: SharePoint のパス指定と、フォルダ作成 API の2つがポイントでした。実際にハマったポイントと解決方法を紹介します。

前回は PowerShell + SharePoint でファイルをアップロードするための準備(お作法)をまとめました。

今回はソースコード公開できませんが、自分がハマったポイントをさくっと紹介します。

基本はこちらのソースを参考にさせて頂いております。

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

SharePoint 上のパスの取得に悩んだ

各企業が契約している SharePoint の URL は https://xxxxx.sharepoint.com/ となりますが、今回は直下ではなく4階層目に「日付ディレクトリを作って」そのなかにファイルを配置してほしいとのことでした。

教えてもらっていたのが共有用の URL で、その URL を指定してもアップロードできる気配はありませんでした。

結論としてはこんな感じ。

https://xxxxx.sharepoint.com + “/Share Document/2階層目/3階層目/4階層目”

「2階層目」は日本語です。実際は「日次データ」みたいな文字列になります。
もう少しイメージできるようにするとこう。

https://xxxxx.sharepoint.com + “/Share Document/rabirgo/日次データ/GoogleAnalytics”

先の参考ソースにアップロード先を指定している処理があります。

$TargetFolderURL = $SiteURL + $StaticURL

$StaticURL が “/Share Document/rabirgo/日次データ/GoogleAnalytics” に置き換わるイメージですね。

今思えば当たり前なんですが、単純につながればいいとは思ってなかったので苦労しました。

SharePoint ディレクトリを作成する

参考ソースにはディレクトリを作成する手順がなかった(か見落としてる)のでググりました。

回答がそのまま動作しました。転載させていただきます。

# 親フォルダーを取得
 = .Web.GetFolderByServerRelativeUrl("<URL>")
.Load()
.ExecuteQuery()

# フォルダーを追加
 = .Folders.Add("HogeHoge")
.Load()
.ExecuteQuery()

ありがたや。

ここでの “<URL>” は “/Share Document/rabirgo/日次データ/GoogleAnalytics” となります。(sharepoint.com は要らない)

まとめ

PowerShell で SharePoint にファイルをアップロードするスクリプトが完成しました。ハマりポイントは以下の2点です。

  • パス指定: 共有 URL ではなく、サイト URL + サーバー相対パス(”/Share Document/…”)を使う
  • フォルダ作成: GetFolderByServerRelativeUrl で親フォルダを取得し、Folders.Add で追加

不慣れな環境もあって苦労しましたが、仕事の現場では Microsoft 365 の自動化需要は高まる一方です。

エラーや複雑な自動化で困ったら、生成AIに相談してみよう

PowerShell のエラーメッセージや「やりたいこと」をそのまま ChatGPT や Claude に伝えると、スクリプトのひな形を生成してくれます。SharePoint API のような馴染みの薄いサービスを扱うときに特に威力を発揮します。

ABOUT ME
rabirgo
うさぎ年(rabbit)おとめ座(virgo)生まれの rabirgo です。 2019年よりフリーランスとして活動しています。 よかったら Twitter フォローお願いします! Follow @rabirgo

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です