SharePoint Online: Copy List Views using PowerShell

Requirement: Copy a List View in SharePoint Online using PowerShell.

How to Copy a List View in SharePoint Online?

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

  • Navigate to the List Settings >> Scroll down to Views section >> Click on the “Create View” link
  • Under the “Start from an existing view” section pick any existing view. 
    copy list view in sharepoint online using PowerShell CSOM
  • Provide a name to your new view, modify 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.

#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"

#To call a non-generic method Load
Function Invoke-LoadMethod() {
            [Microsoft.SharePoint.Client.ClientObject]$Object = $(throw "Please provide a Client Object"),
   $ctx = $Object.Context
   $load = [Microsoft.SharePoint.Client.ClientContext].GetMethod("Load") 
   $type = $Object.GetType()
   $clientLoad = $load.MakeGenericMethod($type)
   $Parameter = [System.Linq.Expressions.Expression]::Parameter(($type), $type.Name)
   $Expression = [System.Linq.Expressions.Expression]::Lambda([System.Linq.Expressions.Expression]::Convert([System.Linq.Expressions.Expression]::PropertyOrField($Parameter,$PropertyName),[System.Object] ), $($Parameter))
   $ExpressionArray = [System.Array]::CreateInstance($Expression.GetType(), 1)
   $ExpressionArray.SetValue($Expression, 0)

#Function to copy list view
Function Copy-SPOListView()
        [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
        #Get the View to Copy 
        $View = $List.Views.GetByTitle($ViewName)

        #Get the View Fields
        Invoke-LoadMethod -Object $View -PropertyName "ViewFields"

        #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

        write-host -f Green "List View has been Copied Successfully!"
    Catch {
        write-host -f Red "Error Copying List View!" $_.Exception.Message
#Set parameter values
$ViewName="All Items"
$NewViewName="All Projects"

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

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

Salaudeen Rajack

Salaudeen Rajack is a SharePoint Architect with Two decades of SharePoint Experience. He loves sharing his knowledge and experiences with the SharePoint community, through his real-world articles!

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

  • May 22, 2019 at 8:20 PM

    How to copy from SP 2010 to SP Online?


Leave a Reply