初めに
前回記事の続きということで、今回は SharePoint PnP に関する投稿となります。
SharePoint Online のサイトを自動で作るまでは良かったのですが、作った後にいろいろとサイトをカスタマイズしたかったわけです。
ナビゲーションメニューの設定は、「Microsoft.Online.SharePoint.PowerShell」のコマンドでは設定できないため、SharePoint PnP を利用することになりました。
そこで、だい³がドはまりした内容を踏まえて記事起こしておきたいと思います。
参考にしたサイト
Add-PnPNavigationNode -SharePoint PnP Reference-
Add-PnPListItem - failing in RunBook on Azure Automation
環境
- Office 365 開発者プログラム (SharePoint Online)
- Azure Automation 無料サブスクリプション
- Microsoft.Online.SharePoint.PowerShell 16.0.19515.12000 → 今回は使ってない。
- SharePointPnPPowerShellOnline 3.16.1912.0 → モジュールインストールは前回記事を参照してください
SharePoint PnP でのナビゲーションメニュー設定方法
基本的には以下のコマンドでナビゲーションメニューは設定できます。
ですが、だい³の環境では以下の事象が発生。
- ローカル実行の PowerShell では正常にナビゲーションメニューを設定できる
- Power Automation 環境では、3回実行に失敗し異常終了となる ※なぜかナビゲーションメニューはできてる。でも異常終了。
# Credentials 情報を設定
$myCred = Get-AutomationPSCredential -Name 'o365connection'
# ナビゲーションメニューを設定したいリストを指定して Connect
$mySite = "https://<tenant>.sharepoint.com/sites/hoge/"
Connect-PnPOnline -Url $mySite -Credentials $myCred
Add-PnPNavigationNode -Title "yahoo" -Url "https://yahoo.co.jp" -Location "QuickLaunch"
コマンド修正
Add-PnPNavigationNode -Title "yahoo" -Url "https://yahoo.co.jp" -Location "QuickLaunch"
↓↓
$addPnPNavigationNode = (Add-PnPNavigationNode -Title "yahoo" -Url "https://yahoo.co.jp" -Location "QuickLaunch")
# Credentials 情報を設定
$myCred = Get-AutomationPSCredential -Name 'o365connection'
# ナビゲーションメニューを設定したいリストを指定して Connect
$mySite = "https://<tenant>.sharepoint.com/sites/hoge/"
Connect-PnPOnline -Url $mySite -Credentials $myCred
$addPnPNavigationNode = (Add-PnPNavigationNode -Title "yahoo" -Url "https://yahoo.co.jp" -Location "QuickLaunch")
原因
よくわからんですが、冒頭に紹介したサイト(https://github.com/SharePoint/PnP-PowerShell/issues/1541) に書いてあったのは、Azure Automation 上で PnP コマンドを実行する際、リターン オブジェクトをキャッチせずに PnP コマンドを実行するだけだと、Azure Automation がご立腹になるということ。
戻りオブジェクトが必要ない場合でも、PnP アクションの結果を変数に格納することで回避することがわかっています。
(2020/8/2 追記)
Azure Automation の Runbook 実行時のトラブルシューティングに関する Docs が公開されてました。
Runbook の問題のトラブルシューティング
PnP の結果は標準出力に出しちゃうとダメみたい。理由はよくわからない・・・
対処
実行結果は変数に入れてあげてください・・・。
【追記】Azure Automation の Runbook で PnP 使う時のおまじない!
$addPnPNavigationNode = (Add-PnPNavigationNode -Title "yahoo" -Url "https://yahoo.co.jp" -Location "QuickLaunch")
大事なこと
どうやら、Add-PnPNavigationNode コマンドに限った話では無いみたいで、ほかのコマンドでも同様の事象が発生することがあるとのこと。
同じようなエラーに遭遇された方は PnP アクションの結果を変数に入れて見られてはいかがでしょうか。