Script to copy all public views and current user private views from one SharePoint Server list/library to another.
The source and the destination lists can be in the same web or in different site collections/webs.
Properties that will be copied: Title , View Query, Is Paged, Is Personal View , Row Limit, Is Default View, View Fields, View Type.
If there is a view with same name in the source and destination list it will not be overwritten, a new view with the parameters of the source will be created.

Tested on: SharePoint 2010, SharePoint 2013, SharePoint 2016 RC

Similar script for SharePoint Online: http://spyankulov.blogspot.com/2016/02/copy-list-views-in-sharepoint-online-powershell.html

Author: Ivan Yankulov
Contact: http://spyankulov.blogspot.com
About this script: http://spyankulov.blogspot.com/2016/02/copy-list-views-in-sharepoint-online-powershell.html

Please, Test,Rate and use Q&A section!

For More information see the Help: Get-Help .\Copy-SPListViews.ps1-Full

 .EXAMPLE
   .\Copy-SPListViews.ps1 -SourceWebUrl "https://portal.contoso.com/sites/teamsite/" -DestinationWebUrl "https://portal.contoso.com/hr" -SourceListTitle "Team Documents" -DestinationListTitle "HR Documents"
  
 Description
 -----------
 This will copy the views from the source list "Team Documents" to destination list "HR Documents"

PowerShell
Edit|Remove
#########################################################################      
#                          Sample     
#              Full Code is in the File      
#########################################################################   
    ForEach($sourceView in ($sourceViews | Where {$_.Hidden -eq $false})){ 
        Write-Host "Creating View `"$($sourceView.Title)`"" -ForegroundColor Green 
        $title = $sourceView.Title 
 
        $viewFlds = New-Object System.Collections.Specialized.StringCollection 
         
        ForEach ($vf in $sourceView.ViewFields){ 
            $viewFlds.Add($vf.ToString()) | Out-Null 
        } 
        $vQuery = $sourceView.Query 
        $vRowLimit = $sourceView.RowLimit 
        $vPaged = $sourceView.Paged 
        $vDF = $sourceView.DefaultView 
        $vType = $sourceView.Type 
        $vPersonal = $sourceView.PersonalView 
         
        $destinationList.Views.Add($title,$viewFlds,$vQuery,$vRowLimit,$vPaged,$vDF,$vType,$vPersonal| Out-Null 
         
    } 
    $destinationList.Update() 
}