2023年1月26日

2023年1月26日 (木)

以前の投稿でStream (on SharePoint) に移行ツールを使えば、Stream (クラシック)への既存のリンクはしばらくの間はリダイレクトされるという話を書きました。

🔗 SharePoint Technical Notes : Stream (on SharePoint)への移行: リダイレクトについて (lekumo.biz)

特に SharePoint ページに Stream Webパーツを使ってビデオコンテンツを配置しているケースが多いと思います。そんな中、Microsoft MVP の一人である てっちゃん (@techan_k) さんが SharePoint ページ上にある Stream Webパーツを CSV ファイルに書き出すスクリプトを公開してくれています。助かりますね。

📝 Export of Stream (Classic) Web Parts and pages that use them | PnP Samples

20230126_103356

私の方でもさっそく試してみたのですが、メモ書きを残しておこうと思います。

PnP PowerShellを使う準備

PnP PowerShell を使うため事前準備が必要です。PnP の概要などは下記にまとめています。

🔗 SharePoint Technical Notes : PnP PowerShell の概要とインストール (lekumo.biz)

実行

まずはローカルにスクリプトファイル(*.ps1)を用意します。例では "spo-export-stream-classic-webparts.ps1"というファイル名が使われているので、これにしておくとよいでしょう。ここに、GitHubに公開されているスクリプトをコピーして貼り付けておきます。

スクリプトの実行方法は上記のGitHub内およびスクリプト内のコメントにも書かれていますので確認しておきましょう。

20230125_121706

都度、サイトを指定してサイト単位で Stream Webパーツがあるページを探索することになります。

20230124_223853_2

結果はCSVファイルに出力されます。出力場所はマイドキュメント(My Documents)内に作成される "StreamClassicWebPartsReport" フォルダーです。

スクリプト実行後に、このフォルダーを開くようにしたい場合は、次のように -openFolder オプションを指定してスクリプトを実行します。

.\spo-export-stream-classic-webparts.ps1 -siteUrl "https://contoso.sharepoint.com/PnPScriptSamples" -openFolder 

実行すると「日付-サイト名.csv」という名前付け規則でCSVファイルが生成されます。ちなみにスクリーンショットでは訳があって「日付-サイトID」で生成しています。20230124_223952

このファイルを確認すれば、どのページに当該Webパーツが埋め込まれているかがわかります。

20230125_122134

注意点

最終的にはスクリプトの実行は首尾よくいったのですが、最初はいくつかのエラーに遭遇したので備忘録して残しておきます。

最初のエラーは Getting SitePages .. Started 時点で遭遇したページのエラーでした。このページを実際に開くと前に何かを試したのかページ自体がエラーとなっていました。おそらくWebパーツの不具合だったと思いますが、よくみると作りかけで実際には参照していないものであったためページ自体を削除しました。

次が Processing pages -- Started 時点のエラーで、下記が実際のエラー画面です。「フォルダーに...」というページ。

20230124_222924

なんだろうとページを開いたのですが、こちらはページ自体何も問題ない。ですが、ページの詳細を確認すると説明部分に文字化けが。。。本文に書いていた絵文字までが説明部分に追加されており、文字化けしていたわけです。Cannot read incomplete UTF-16 JSON text とエラーメッセージにあるので、これかなと詳細ウィンドウを修正し文字化けを取り除きました。20230125_091406

さて、ここまででページの取得は無事に完了したのですが、CSVファイルの出力でまたエラー。なんだろうとよくよく確認すると、運悪く対象のサイト名が「SharePoint/OneDrive/Stream の利活用」となっている。サイト名にファイル名に使用できない文字が含まれていたのです。手っ取り早く修正するためにスクリプトを修正して $site.Title を $site.ID に置き換えました。


20230124_222823

以上で無事にスクリプトが実行できたわけです。

最後に

最後に遭遇した不具合の情報を書きましたが、スクリプト自体は自分で作ると面倒ですし、そもそもPowerShellを書くための基礎知識が必要です。こうしたスクリプトを公開し共有してくれるのは、本当に助かります。

これで新しい Stream への移行が少しでもスムーズにいくといいですね。

SharePoint サイトのコンテンツを一括管理したい場合などに便利なのが PnP PowerShell です。オープンソースのコミュニティが提供しています。

本記事では PnP PowerShell の概要とインストール方法に関するリファレンスをまとめておきます。

概要

もともとSharePoint PnP (Patterns & Practices : パターンズ アンド プラクティス) イニシアティブというものがあり、Microsoft 社のコンサルタントのメンバーが 2013 年に設立したのが始まりでオープンソースの技術コミュニティです。Microsoft 社以外からも Microsoft MVP などの有志が積極的にメンバーとして貢献していますし、誰でも Contributerとして立候補もできます。

なお、このコミュニティはのちに SharePoint Developer Community という名称となり、現在は SharePoint だけでなくMicrosoft 365 全般にわたり活動しているため Microsoft 365 Platform Comunity (PnP) という名称になっています。

コミュニティでは GitHub 上で様々なガイダンス、コードサンプルや便利なツールなどを公開しています。

SharePoint PnP PowerShell 

Microsoft 365 のSharePoint の管理者が利用する SharePoint Online Management Shell も PowerShell コマンドレットを提供していますが、こちらは SharePoint テナントレベルでの管理者権限が必要であり、また SharePoint 管理センターレベルの設定を行うためのコマンド群です。サイトコレクションの管理、サイトデザインやサイトスクリプトの登録、SharePoint ハブの登録や解除などがありますが、サイトごとのコンテンツ管理までは行えません。

一方でSharePoint PnP PowerShell はもともと SharePoint Client Side API を用いたコマンドレットであり、サイトの管理者がコンテンツ管理を行えるようになっています。

👑PnP PowerShell (推奨)

従来は SharePoint に特化していた SharePoint PnP PowerShell ですが改善を続けています。現在は SharePoint 以外にも Microsoft Teams, Microsoft Planner, Power Automate などでも利用できるようになっており、名称も「SharePoint」を冠から外し単に「PnP PowerShell」と呼ぶようになっています。

PnP PowerShell はクロスプラットフォームの PowerShell モジュールとなっており、非常に多くのコマンドレッドが用意されています。この新しいモジュールは SharePointPnPPowerShellOnlineモジュールの後継となっており、従来のモジュールはすでにメンテナンスされなくなっています。新しいモジュールはクロスプラットフォーム対応となっているため Windows だけでなく、MacOSや Linux 上でも実行できます。ただし、クロスプラットフォームとして利用する場合は対象は SharePoint だけがサポートされます。

詳しくは下記のサイトを参照してください。

🔗 PnP PowerShell | PnP PowerShell

インストール方法

さて、インストールですが PowerShell 7.x を使用することが推奨されています。実際、PowerShell 5.x を使っていたとしても一部のコマンドは利用できますが、経験上エラーとなることもしばしばあるため PowerShell 7.x をインストールするようにしましょう。

インストール手順は下記の情報を参照してください。

🔗 Windows への PowerShell のインストール - PowerShell | Microsoft Learn

インストール自体は基本的には次のコマンドで行えます。

Install-Module -Name PnP.PowerShell

ただし、認証に関する設定も必要になるため注意が必要です。PnP PowerShellでは、テナントへの認証情報を使って認証することができます。ただし、基盤となる SDK の変更により、認証が可能な Azure AD アプリケーションを最初に登録する必要があります。

複数の方法が用意されており、組織によって適切な手順がことなります。詳しくは下記のページで確認してください。ちなみに、一番簡単なのは「Register-PnPManagementShellAccess」コマンドを実行することです。これで済むのが一番。。。

🔗 Authentication | PnP PowerShell

PnP PowerShellの最新版は PowerShell Gallery で確認できます。

🔗 https://www.powershellgallery.com/packages/PnP.PowerShell/