Forum Discussion

HaroldvandeKamp's avatar
HaroldvandeKamp
Bronze Contributor
Aug 29, 2016
Solved

Rename a document stored inside a SharePoint document library using Office Dev PnP

How to rename a document/file stored inside a documentlibrary using Office Dev PnP? I haven't found a cmdlet for it.

 

Specifically I want to rename the OneNote Notebook called "Team Site Notebook" that's generated for each team site to a name which corresponds to the site title, e.g. "{SiteTitle} Notebook".

 

If that's not possible, the alternative solution would be to create a new OneNote Notebook which corresponds to the site title, e.g. "{SiteTitle} Notebook". If you have a solution for that, that's also great.

 

 

 

  • I might be misinterpreting the question, but does this help?

    "MoveTo" can be used to rename files.

    Connect-SPOnline -url [yoururl]
    $ctx = Get-SPOContext
    $web = Get-SPOWeb
    $file = $web.GetFileByServerRelativeUrl("[your file url]")
    $file.MoveTo("[your NEW server-relative url]", 'Overwrite')
    $ctx.ExecuteQuery()
  • DougWare's avatar
    DougWare
    Brass Contributor
    Does that Best Response actually work? My suspicion is that it doesn't because a OneNote notebook isn't a file but rather is a folder. You can use PnP to do that because it is an item in the library, but the easiest thing to do with PowerShell is to use WebDav to treat the library like any other folder, e.g. with Rename-Item. The biggest advantage to using WebDav is that all of your knowledge for dealing with files and folders applies and you can use the same scripts you might already have.
    • HaroldvandeKamp's avatar
      HaroldvandeKamp
      Bronze Contributor

      You are right DougWare.

      Charles Willwerth pointed me in the right direction. I was aware about a OneNote Notebook being a folder instead of an item, so I've realised it with this code:

      $ctx = Get-SPOContext
      $web = Get-SPOWeb
      $folder = $web.GetFolderByServerRelativeUrl("/sites/SITEURL/SiteAssets/Team Site Notebook")
      $folder.MoveTo("/sites/SITEURL/SiteAssets/MySpecificSiteNotebookName")
      $ctx.ExecuteQuery()
  • I might be misinterpreting the question, but does this help?

    "MoveTo" can be used to rename files.

    Connect-SPOnline -url [yoururl]
    $ctx = Get-SPOContext
    $web = Get-SPOWeb
    $file = $web.GetFileByServerRelativeUrl("[your file url]")
    $file.MoveTo("[your NEW server-relative url]", 'Overwrite')
    $ctx.ExecuteQuery()
    • HaroldvandeKamp's avatar
      HaroldvandeKamp
      Bronze Contributor

      I was just surprised that there is not a cmdlet inside the Office Dev PnP library, e.g. Rename-SPOFile($SourceFileName, $DestinationFileName) method, or Move-SPOFile($SourceFileName, $DestinationFileName).

       

      Thanks Deleted and Charles Willwerth for the solutions.

      I'm now using the SharePoint Online CSOM based solution of Charles to realize the business requirement.

       

      • jcgonzalezmartin's avatar
        jcgonzalezmartin
        MVP
        Well, PnP is an open source project that can always be improved and extended by the community :-). This might be an opportunity to add a cmdlet for this scenario :-)
  • you just want to rename this file on each provisioned site? or do you also upload the file? maybe a extention provider would help. Kr, Paul

Resources