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.

Foi útil?

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
        }
    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a sharepoint.stackexchange
scroll top