IIS Reset on all SP Servers using PowerShell

This script will list all SP Servers and restarts IIS on all of them.

add-PSSnapin microsoft.sharepoint.powershell
$spserver = get-spserver | ?{$_.role -eq “Application”}
foreach ($server in $spserver)
{
write-host “Performing IIS Reset on Server:”$server.name
iisreset $server.Name
}

Copy sharepoint views to other libraries powershell

[CmdletBinding()]

Param
(
[Parameter(Mandatory=$true,ValueFromPipeline=$true)][string]$WebURL,
[Parameter(Mandatory=$true)][string]$SourceList,
[Parameter(Mandatory=$true)][string]$SourceView,
[Parameter(Mandatory=$false)][string]$NewViewName,
[Parameter(Mandatory=$false)][string]$TargetURL,
[Parameter(Mandatory=$false)][string]$IgnoreLibs,
[Parameter(Mandatory=$false)][string]$AsDefault,
[Parameter(Mandatory=$false)][string]$OutputPath,
[Parameter(Mandatory=$false)][string]$SmtpServer,
[Parameter(Mandatory=$false)][string]$EmailFrom,
[Parameter(Mandatory=$false)][string]$EmailTo
)

Function Copy-SPView
{

Write-Host "Loading Sytem Modules "
Get-Module -listAvailable | import-module

if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue) -eq $null )
{
Write-Host "Loading Sharepoint Module "
Add-PSSnapin -Name Microsoft.SharePoint.PowerShell

if ( (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell) -eq $null )
{
Write-Host "Failed to load sharepoint snap-in. Could not proceed further, Aborting …"
Exit
}
}

Start-SPAssignment -Global

$SPWeb  = Get-SPWeb -Identity $WebURL -ErrorAction SilentlyContinue
$SPWebT = Get-SPWeb -Identity $TargetURL -ErrorAction SilentlyContinue

$ignoreList = "Customized Reports","Form Templates","Shared Documents","Site Assets","Site Pages","Style Library","Master Page Gallery","Picture" + $SourceList + $IgnoreLibs

if($SPWeb -eq $null){ Write-Host "Unable to reach the provided URL, Aborting …" ;Exit }
if( ($SPWeb.Lists.TryGetList($SourceList) ) -eq $Null){ Write-Host "The list $SourceList is not availible, Aborting …"; Exit }
if($AsDefault -ne $True){$AsDefault = $False}

$SourceLists=$SPweb.lists["$SourceList"]

if( ($SourceLists.Views[$SourceView]) -eq $Null ){ Write-Host "The view $SourceView does not exist, Aborting …"; Exit  }
if($NewViewName -lt 1){ $NewViewName = $SourceView }

Go through each document library in the target site

$listIds = @();
$i = 0;

if($SPWebT -ne $null)
{
$lists=$SPWebT.lists
}
else
{
$lists=$SPWeb.lists
}

while ($i -lt $lists.Count)
{
$list = $lists[$i]

if($list.BaseType -eq "DocumentLibrary")
{
if ($Ignorelist -contains $list.Title)
{
write-host $list "is Ignored" -foregroundcolor Yellow -backgroundcolor Black
}
else
{
$view = $list.Views[$NewViewName]
if ($view -ne $null)
{
Write-Host "Updating existing view" -foregroundcolor Yellow -backgroundcolor Black

$list.views.delete($view.ID)
$list.update()
}

$Viewfields = $Sourcelists.Views[$SourceView].ViewFields.ToStringCollection()
$viewRowLimit="100"
$viewPaged=$true
$viewDefaultView=$AsDefault

Setting the Query for the View

$viewQuery = $Sourcelists.Views[$SourceView].Query
$viewName = $NewViewName

Finally – Provisioning the View

try
{
$myListView = $list.Views.Add($viewName, $viewFields, $viewQuery, 100, $True, $False, "HTML", $False)
}
catch
{
Write-Host "Not all columns are availible in the target library" -foregroundcolor Yellow
}

You need to Update the View for changes made to the view

Updating the List is not enough

$myListView.DefaultView = $AsDefault
$myListView.Update()
$list.Update()

Write-Host "$viewName added to Library $list"
}
}
$i = $i + 1
}
$SPWeb.Dispose()
}

Copy-SPView ($WebURL,$SourceList,$SourceView,$NewViewName)

Using this script it’s possible to copy views from a source library to any target library.
This includes copying views to libraries in other site collections / web applications or even other SharePoint servers!

Summary of possible variables:

– WebURL
URL of the source library
– SourceList
Displayname of the source library what contains the view
– SourceView
Name of the view that needs to be copied
– NewViewName
Name of the view in the target libraries. (if left empty the source view name will be used.)
– TargetURL
URL of the target site / site collection of web application (If left empty the libraries in the WebURL are being
updated)
– IgnoreLibs
Name of the libraries that need to be ignored.
(The script contains a list of SharePoint Household Libraries
that are ignored by default including the Source Library.)
“Customized Reports”,”Form Templates”,”Shared Documents”,”Site Assets”,”Site Pages”,
“Style Library”,”Master Page Gallery”,”Picture”

.Example 1

This example copies the view to all document libraries within the source URL

PS C:> .Copy-SPView.ps1 -WebURL <source URL> -SourceList <Your Source Library> -SourceView <Name of View>

.Example 2

This example copies the view to all document libraries within the target URL.

PS C:> .Copy-SPView.ps1 -WebURL <source URL> -SourceList <Your Source Library> -SourceView <Name of the View> -TargetURL “<Your target URL>”

.Example 3

This example shows all possible variables that are currently working.

PS C:> .Copy-SPView.ps1 -WebURL <source URL> -SourceList <Your Source Library> -SourceView <Name of the View> -TargetURL “<Your target URL>” -NewViewName “Rogier’s View” -IgnoreLibs “Shared Documents”

Please let me know if this was helpful

Move Search Index Location SharePoint 2013

Search Description:

This script will move the SharePoint 2013 Search Index
Run the function with the 3 required Parameters

function Move-SPEnterpriseSearchIndex($SearchServiceName,$Server,$IndexLocation){
Add-PSSnapin Microsoft.SharePoint.PowerShell -ea 0;

#Gets the Search Service Application
$SSA = Get-SPServiceApplication -Name $SearchServiceName;
if (!$?){throw “Cant find a Search Service Application: "$SearchServiceName“”;}
#Gets the Search Service Instance on the Specified Server
$Instance = Get-SPEnterpriseSearchServiceInstance -Identity $Server;
if (!$?){throw “Cant find a Search Service Instance on Server: "$Server“”;}
#Gets the current Search Topology
$Current = Get-SPEnterpriseSearchTopology -SearchApplication $SSA -Active;
if (!$?){throw “There is no Active Topology, you can try removing the "-Active” from the line above in the script”;}
#Creates a Copy of the current Search Topology
$Clone = New-SPEnterpriseSearchTopology -Clone -SearchApplication $SSA -SearchTopology $Current;
#Adds a new Index Component with the new Index Location
New-SPEnterpriseSearchIndexComponent -SearchTopology $Clone -IndexPartition 0 -SearchServiceInstance $Instance -RootDirectory $IndexLocation | Out-Null;
if (!$?){throw “Make sure that Index Location "$IndexLocation” exists on Server: "$Server“”;}
#Sets our new Search Topology as Active
Set-SPEnterpriseSearchTopology -Identity $Clone;
#Removes the old Search Topology
Remove-SPEnterpriseSearchTopology -Identity $Current -Confirm:$false;
#Now we need to remove the extra Index Component
#Gets the Search Topology
$Current = Get-SPEnterpriseSearchTopology -SearchApplication $SSA -Active;
#Creates a copy of the current Search Topology
$Clone=New-SPEnterpriseSearchTopology -Clone -SearchApplication $SSA -SearchTopology $Current;
#Removes the old Index Component from the Search Topology
Get-SPEnterpriseSearchComponent -SearchTopology $Clone | ? {($.GetType().Name -eq “IndexComponent”) -and ($.ServerName -eq $($Instance.Server.Address)) -and ($_.RootDirectory -ne $IndexLocation)} | Remove-SPEnterpriseSearchComponent -SearchTopology $Clone -Confirm:$false;
#Sets our new Search Topology as Active
Set-SPEnterpriseSearchTopology -Identity $Clone;
#Removes the old Search Topology
Remove-SPEnterpriseSearchTopology -Identity $Current -Confirm:$False;
Write-Host “The Index has been moved to $IndexLocation on $Server”
Write-Host “This will not remove the data from the old index location. You will have to do that manually :)”
}
Move-SPEnterpriseSearchIndex -SearchServiceName “Search Service Application” -Server “SP2013-WFE” -IndexLocation “C:Index”

SharePoint 2013 places the Search index in the C: by default. There are many reasons why you would want to move the index to a different places.
This script will take three parameters, the Search Service Name, the Server Name and Index Location.  There is an example on the bottom of the script.