I am unable to edit a header on the Global/Top navigation bar
-
08-10-2020 - |
Pergunta
I am trying to edit a top navigation bar Heading
's description so at the top ribbon I would have a its description at mouse hover. I am going to have to do it with powershell, as a script, because it is to be deployed and i wont be able to edit it one by one.
function ProcessSubWebs($webAppUrl)
{
$currentWeb = Get-SPWeb $webAppUrl
$publishingWeb = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($currentWeb)
$publishingPages = $publishingWeb.GetPublishingPages()
foreach ($publishingPage in $publishingPages)
{
if($publishingPage.ListItem['Title'] -eq "<Page Name>")
{
$file = $currentWeb.GetFile($publishingPage.Uri.ToString())
[Microsoft.SharePoint.SPListItem]$spListItem = $file.Item
$file.CheckOut()
$spListItem.Description = "<Page Description>"
$spListItem.Update()
$file.CheckIn("Description Added", [Microsoft.SharePoint.SPCheckinType]::MajorCheckIn)
}
}
$currentWeb.Dispose()
}
$webAppUrl = "MyUrl"
ProcessSubWebs($webAppUrl)
Apparently I cannot change description of a list item with $listItem.Description
or $listItem['Description']
I also have tried to do it as a publishingPage but it did not work after update. I'd be glad if you could point me to the right direction.
Solução
Ok, I have solved my issue with ISE, debugged it and found out that, first, i was going through the wrong list and that i was supposed to go through the $rootSiteCollection.RootWeb.Navigation.TopNavigationBar
and that the property i was looking for was to be accessed by using $node.Properties["Description"]
.
I have changed more or less the whole thing., for people who may need it here is the whole script to change an items description on the top navigation bar.
$siteCollectionUrl = "http://MySPsite/sites/siteX"
$rootSiteCollection = Get-SPSite $siteCollectionUrl
if ($rootSiteCollection -ne $null)
{
$rootWeb = $rootSiteCollection.RootWeb
$navigationNodes = $rootWeb.Navigation.TopNavigationBar
if ($navigationNodes -ne $null)
{
foreach($navNode in $navigationNodes)
{
if($navNode.Title -eq "<Button To Change>" -and $navNode.Properties["NodeType"] -eq "Heading")
# instead of Heading, Link or Subsite can also be used if that is the case
{
$navNode.Properties["Description"] = "<New Description>"
$navNode.Update()
}
}
$rootWeb.AllowUnsafeUpdates = 1
$rootWeb.Update()
$rootWeb.AllowUnsafeUpdates = 0
$rootSiteCollection.AllowUnsafeUpdates = 1
$rootSiteCollection.Update()
$rootSiteCollection.AllowUnsafeUpdates = 0
}
}