※ この記事にはアフィリエイトリンクが含まれています
前回は PowerShell + SharePoint でファイルをアップロードするための準備(お作法)をまとめました。
今回はソースコード公開できませんが、自分がハマったポイントをさくっと紹介します。
基本はこちらのソースを参考にさせて頂いております。

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 のような馴染みの薄いサービスを扱うときに特に威力を発揮します。
