Use PowerShell to set Quicklinks Programmatically in SharePoint
Wouldn’t it be great to hide all lists of a certain type in a farm? Perhaps Tasks, Calendars or Discussions, or all of the above. Progrmmatically, they can be hidden or exposed on navigation using set_OnQuickLaunch(). Here’s how a given library is hidden from quick launch:
$LIB.set_OnQuickLaunch($false)
Let’s now do it across a full web application; all the site collections, sites, and for a set of libraries.
Add-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue
Start-SPAssignment –Global
$mylogfile="C:logfolderongoinglogfile.txt"
$envrun="Prod" # selects environment to run in
if ($envrun -eq "Dev")
{
$siteUrl = "http://devdocs.SharePoint.com"
$LibsToFlip = "Tasks,Site Pages,Calendar,Documents"
$LibsToFlipArray = $LibsToFlip.Split(“,”)
}
elseif ($envrun -eq "Prod")
{
$siteUrl = "http://docsny.SharePoint.com"
$LibsToFlip = "Tasks,Site Pages,Calendar,Documents,Team Discussion"
$LibsToFlipArray = $LibsToFlip.Split(“,”)
}
else
{
Write-Host "ENVIRONMENT SETTING NOT VALID: script terminating..."
$siteUrl = $null;
return;
}
Write-Host "Quick Launch Flip script starting $(get-date)"
if ($siteurl)
{
$rootSite = New-Object Microsoft.SharePoint.SPSite($siteUrl)
$spWebApp = $rootSite.WebApplication
foreach($site in $spWebApp.Sites)
{
write-host $site.Url
# if ($site.Url -like "$siteurl/personal/*")
if ($site.Url -like "$siteurl*")
{
$rootSite = New-Object Microsoft.SharePoint.SPSite($siteUrl);
$rootWeb = $rootSite.RootWeb;
$webs= $site.AllWebs;
$WebsCount = $webs.count;
for ($wi=0; $wi -lt $WebsCount; $wi++)
{
$web = $webs[$wi]
$changed = $false;
$lists = $web.Lists;
$listcount = $lists.count;
for ($li=0; $li -lt $listcount; $li++)
{
$JPLib = $lists[$li]
if ($libsToFlipArray -contains $JPLib.Title )
{
WRITE-HOST -ForegroundColor darkgreen "$($JPLib.Title) in $($web.url)"
$JPLIB.set_OnQuickLaunch($false)
$JPLib.Update()
$changed = $true;
}
}
if ($changed)
{
#$Web.update()
}
}
}
}
}
Stop-SPAssignment –Global
###########################
Want to talk?
Drop us a line. We are here to answer your questions 24*7.