SharePoint Online: Copy List Views using PowerShell

Requirement: Copy a View in SharePoint Online using PowerShell.

How to Copy a List View in SharePoint Online?

Do you need to create a copy of a list view in SharePoint Online? Maybe you need to make some changes to the view and don’t want to affect the original. Or maybe you simply want to have a backup copy of the view in case something happens to the original. In any case, copying a list view is easy to do. This article will show you how to copy a list view in SharePoint Online.

To copy a view in the SharePoint list through UI, follow these steps:

  1. Navigate to the List Settings >> Scroll down to the Views section >> Click on the “Create View” link.
  2. Under the “Start from an existing view” section, pick any existing view. 
    copy list view in sharepoint online using PowerShell CSOM
  3. Provide a name for your new view, modify it as needed, and click OK to copy the view.

How to Copy SharePoint view using PowerShell CSOM?

To copy a view in SharePoint Online, use this PowerShell script. This is a handy way to duplicate a view or create a new view based on an existing view.

#Load SharePoint CSOM Assemblies
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.dll"
Add-Type -Path "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.Client.Runtime.dll"

#Function to copy list view
Function Copy-SPOListView()
{
  param
    (
        [Parameter(Mandatory=$true)] [string] $SiteURL,
        [Parameter(Mandatory=$true)] [string] $ListName,
        [Parameter(Mandatory=$true)] [string] $ViewName,
        [Parameter(Mandatory=$true)] [string] $NewViewName
    )
    Try { 
        #Get Credentials to connect
        $Cred= Get-Credential
        $Credentials = New-Object Microsoft.SharePoint.Client.SharePointOnlineCredentials($Cred.Username, $Cred.Password)
 
        #Setup the context
        $Ctx = New-Object Microsoft.SharePoint.Client.ClientContext($SiteURL)
        $Ctx.Credentials = $Credentials

        #Get the list by title
        $List=$Ctx.web.Lists.GetByTitle($ListName)
        
        #Get the View to Copy 
        $View = $List.Views.GetByTitle($ViewName)
        $Ctx.Load($view)
        $Ctx.Load($View.ViewFields)
        $Ctx.ExecuteQuery()

        #Copy the List View
        $ViewCreationInfo = New-Object Microsoft.SharePoint.Client.ViewCreationInformation
        $ViewCreationInfo.Paged = $View.Paged
        $ViewCreationInfo.PersonalView = $View.PersonalView
        $ViewCreationInfo.Query = $View.ViewQuery
        $ViewCreationInfo.RowLimit = $View.RowLimit
        $ViewCreationInfo.Title = $NewViewName
        $ViewCreationInfo.SetAsDefaultView = $View.DefaultView 
        $ViewCreationInfo.ViewFields = $View.ViewFields
        $ViewCreationInfo.ViewTypeKind = $View.ViewType
 
        $List.views.Add($ViewCreationInfo)  | Out-Null
        $Ctx.ExecuteQuery()

        write-host -f Green "List View has been Copied Successfully!"
     }
    Catch {
        write-host -f Red "Error Copying List View!" $_.Exception.Message
    }
}
 
#Set parameter values
$SiteURL="https://crescent.sharepoint.com/sites/Ops/"
$ListName="Projects"
$ViewName="All Items"
$NewViewName="All Projects"

#Call the function to copy view
Copy-SPOListView -SiteURL $SiteURL -ListName $ListName -ViewName $ViewName -NewViewName $NewViewName

PnP PowerShell to Clone a View in SharePoint Online

#Parameters
$SiteURL = "https://crescent.sharepoint.com/sites/PMO"
$ListName = "Projects"
$ViewName = "Active Projects"
$NewViewName = "Current Projects"

Try {
    #Connect to PnP Online
    Connect-PnPOnline -Url $SiteURL -Interactive

    #Get the Source View
    $View = Get-PnPView -List $ListName -Identity $ViewName -Includes ViewType, ViewFields, Aggregations, Paged, ViewQuery, RowLimit
    
    #Get Properties of the source View
    $ViewProperties = @{
        "List" =  $ListName
        "Title" = $NewViewName
        "Paged" = $View.Paged
        "Personal" = $View.PersonalView
        "Query" = $View.ViewQuery
        "RowLimit" = $View.RowLimit
        "SetAsDefault" = $View.DefaultView 
        "Fields" = @($View.ViewFields)
        "ViewType" = $View.ViewType
        "Aggregations" = $View.Aggregations
    }
    #Create a New View
    Add-PnPView @ViewProperties
}
catch {
    write-host "Error: $($_.Exception.Message)" -foregroundcolor Red
}

Here is another article on SharePoint On-premises PowerShell copy list view: SharePoint 2013: PowerShell to Copy View

Salaudeen Rajack

Salaudeen Rajack - SharePoint Expert with Two decades of SharePoint Experience. Love to Share my knowledge and experience with the SharePoint community, through real-time articles!

One thought on “SharePoint Online: Copy List Views using PowerShell

  • How to copy from SP 2010 to SP Online?

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *