MakotoIshikawa
@MakotoIshikawa

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Sharepoint Online】Set-PnPPage でフォルダー配下のページを指定できない

解決したいこと

Add-PnPPage を使用して、サイトのページ (SitePages) にフォルダーを作成して、その配下にページを新規作成した後に、Set-PnPPage でプロパティを変更することができず困っています。

PnP.PowerShell のバージョンは、1.5.0 です。

PS C:\PowerShell\PnP> Get-Module PnP.PowerShell -ListAvailable

    ディレクトリ: C:\Program Files\WindowsPowerShell\Modules

ModuleType Version    Name                                ExportedCommands                                                                                                                          
---------- -------    ----                                ----------------                                                                                                                          
Manifest   1.5.0      PnP.PowerShell                      {Add-PnPClientSidePage, Add-PnPClientSidePageSection, Add-PnPClientSideText, Add-PnPClientSideWebPart...}   

発生している問題・エラー

$NewPage = Add-PnPPage -Name 'Folder/NewPage'

/SitePages/Folder/NewPage.aspx が作成されます。

Set-PnPPage -Identity $NewPage -Title 'My Page'

パラメーターの Identity に Add-PnPPage の戻り値を指定して PageTitle を変更しようとすると…。

  • フォルダー配下のページとは別に、サイトページ直下に同名の新しいページ (/SitePages/NewPage.aspx) が作成される。
  • そのページのタイトルが変更される。

自分で試したこと

IdentityAdd-PnPPage で設定した固定値を指定してみるとエラーになります。

Set-PnPPage -Identity 'Folder/NewPage' -Title 'My Page'
Set-PnPPage : Page Folder/NewPage.aspx cannot be found.
発生場所 :1 文字:1
+ Set-PnPPage -Identity 'Folder/NewPage' -Title 'My Page'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (:) [Set-PnPPage], Exception
    + FullyQualifiedErrorId : EXCEPTION,PnP.PowerShell.Commands.Pages.SetPage

Get-PnPPage に固定値を指定してみるとエラーになります。(フォルダー指定できると書いてあるのにできない)

Get-PnPPage -Identity 'Folder/NewPage'
Get-PnPPage : Page 'Folder/NewPage.aspx' does not exist
発生場所 :1 文字:1
+ Get-PnPPage -Identity 'Folder/NewPage'
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : WriteError: (:) [Get-PnPPage], Exception
    + FullyQualifiedErrorId : EXCEPTION,PnP.PowerShell.Commands.Pages.GetPage
  • ファイル名だけ指定するとフォルダー配下のページの情報が取れる。
  • 逆にライブラリー直下の同名のファイルは取得できない。
Get-PnPPage -Identity 'NewPage'

PageTitle           : NewPage
Sections            : {}
Controls            : {}
LayoutType          : Article
ThumbnailUrl        : 
KeepDefaultWebParts : False
DefaultSection      : PnP.Core.Model.SharePoint.CanvasSection
Folder              : Folder
Name                : NewPage.aspx

参考サイト

1

1Answer

私の環境では(OS: Windows10, PnP.PowerShell: Ver1.6.0)

Set-PnPPage -Identity 'Folder/NewPage' -Title 'My Page'

は意図通り動作し、Folder/ の下の NewPage.aspx のタイトルが変更できました。
もしかして、1.5.0 では正しく動作しないのかもしれませんね。

尚、

Set-PnPPage -Identity $NewPage -Title 'My Page'

が意図通り動かないのは、-Identity として $NewPageのオブジェクト自体を指定していることになり、意図したページの情報が適用されていないからのように思います。
$NewPage.Name (フォルダなしの "NewPage.asp" という文字列) が無理やり Identity 情報として適用されているかもしれません。エラーになってもよさそうな気がしますが。

もし $NewPage の情報を利用するなら

Set-PnPPage -Identity $NewPage.Folder+"/"+$NewPage.Name -Title 'My Page'

という感じでどうでしょうか。

1Like

Comments

  1. @MakotoIshikawa

    Questioner

    情報ありがとうございます。
    1.6.0 では、解消したのですかね、確かめてみたいとおもいます。

    -Identity に固定値を設定することは試したのですが、それでもダメでした。
  2. @MakotoIshikawa

    Questioner

    Ver1.6.0 にアップデートして試したところ
    提案していただいたフォルダパスを作成して指定する方法なら、プロパティを変更することができました。

    ページのオブジェクトをそのまま渡すのは相変わらずダメでした…。
  3. >Ver1.6.0 にアップデートして試したところ
    >提案していただいたフォルダパスを作成して指定する方法なら、プロパティを変更することができました。

    そうでしたか、よかったです。基本的な動作なのに、バグですかね。

    Close されているのに恐縮ですが、

    >ページのオブジェクトをそのまま渡すのは相変わらずダメでした…。

    オブジェクトをそのまま渡すというのは具体的にはどういうことでしょうか。
    -Identity $NewPage ではだめだと思いますが、ページのオブジェクトID等を指定されているということでしょうか。

    通常はパス名を指定するようです。
    以下はファイル名のみを指定されていますが、これに私がお伝えしたようにフォルダ名も付加すれば対象のページが指定できるかと思います。

    https://sharepoint.stackexchange.com/questions/291028/finding-identity-of-page-in-pnppowershell-in-sharepoint-online

    > $page = Add-PnPPage -Name "Some New Page"
    > Set-PnPPage -Identity $page.Name -Title "changed Title"
  4. @MakotoIshikawa

    Questioner

    > ページのオブジェクトID等を指定されているということでしょうか。
    Add-PnPPage の戻り値の事 ($NewPage) を指しています。

    1.6.0 で修正されているのを確認しましたが、
    1.5.0 では、Set-PnPPage と Get-PnPPage の挙動が統一されていなかったのです。
    '{フォルダ名}/{ページ名}' を指定しても期待通りの動作ではありませんでした。
    ↑※上記参照

    Identity プロパティは PagePipeBind 型なので、文字通りページをパイプでバインドできるような作りを想定しているはずなんですよね。
    以下のような使い方ができないとおかしい。

    ```
    Add-PnPPage -Name "Some New Page" | Set-PnPPage -Title "changed Title"
    ```
  5. >Identity プロパティは PagePipeBind 型なので、文字通りページをパイプでバインドできるような作りを想定しているはずなんですよね。

    そういうことなんですね。私がちゃんと理解していませんでした。失礼しました。

Your answer might help someone💌