Cmdlets/Get-SPNavigationReport/Get-SPNavigationReport.psm1
function Get-SPNavigationReport { param( [Parameter(mandatory=$True, position=0, HelpMessage="Site Collection URL for which the summary report should be prepared")] [URI]$SiteURL, [Parameter(mandatory=$True, position=0, HelpMessage = "Which Navigational Elements Should Be Included In this Report?")] [ValidateSet("GlobalNavOnly", "QuickLaunchOnly", "GlobalNavAndQuickLaunch")] [String]$ReportNodes ) $CurrentSite = get-spsite $SiteURL.AbsoluteUri -ErrorAction SilentlyContinue if(-not $CurrentSite) { write-host $error[0].Exception.Message -ForegroundColor Red break } $NavNodeSummary = New-Object System.Collections.ArrayList foreach($Web in $CurrentSite.Allwebs) { if($PublishingSite = [Microsoft.SharePoint.Publishing.PublishingWeb]::GetPublishingWeb($Web)) { if($ReportNodes.ToUpper().Contains("GLOBAL")) { $GlobalNav = $PublishingSite.Navigation.GlobalNavigationNodes foreach($Node in $GlobalNav) { $NodeInfo = New-Object System.Object $NodeInfo | Add-Member -MemberType NoteProperty -Name "Web URL" -Value $Web.URL $NodeInfo | Add-Member -MemberType NoteProperty -Name "Type of Node" -Value "Global Navigation" $NodeInfo | Add-Member -MemberType NoteProperty -name "Title" -Value $Node.Title $NodeInfo | Add-Member -MemberType NoteProperty -Name "URL" -value $Node.Url $NodeInfo | Add-Member -MemberType NoteProperty -Name "ID" -Value $Node.ID $NodeInfo | Add-Member -MemberType NoteProperty -Name "Parent ID" -Value $Node.ParentID if($NavNodeSummary | Where-Object {($_.url -eq $Node.Url) -and ($_.title -eq $Node.Title) -and ($_.'Web URL' -eq $Web.url) -and ($_.'Parent ID' -eq $Node.ParentID)}) { $NodeInfo | Add-Member -MemberType NoteProperty -Name "Suspected Duplicate" -Value "True" } else { $NodeInfo | Add-Member -MemberType NoteProperty -Name "Suspected Duplicate" -Value "False" } $NavNodeSummary.Add($NodeInfo) | Out-Null foreach($childnode in $node.Children) { $NodeInfo = New-Object System.Object $NodeInfo | Add-Member -MemberType NoteProperty -Name "Web URL" -Value $Web.URL $NodeInfo | Add-Member -MemberType NoteProperty -Name "Type of Node" -Value "Global Navigation" $NodeInfo | Add-Member -MemberType NoteProperty -name "Title" -Value $ChildNode.Title $NodeInfo | Add-Member -MemberType NoteProperty -Name "URL" -value $ChildNode.Url $NodeInfo | Add-Member -MemberType NoteProperty -Name "ID" -Value $ChildNode.ID $NodeInfo | Add-Member -MemberType NoteProperty -Name "Parent ID" -Value $Node.Id if($NavNodeSummary | Where-Object {($_.url -eq $ChildNode.Url) -and ($_.title -eq $ChildNode.Title) -and ($_.'Web URL' -eq $Web.url) -and ($_.'Parent ID' -eq $ChildNode.ParentId)}) { $NodeInfo | Add-Member -MemberType NoteProperty -Name "Suspected Duplicate" -Value "True" } else { $NodeInfo | Add-Member -MemberType NoteProperty -Name "Suspected Duplicate" -Value "False" } $NavNodeSummary.Add($NodeInfo) | Out-Null } } } } if($ReportNodes.ToUpper().Contains("QUICKLAUNCH")) { $Quicklaunch = $Web.Navigation.QuickLaunch foreach($Node in $QuickLaunch) { $NodeInfo = New-Object System.Object $NodeInfo | Add-Member -MemberType NoteProperty -Name "Web URL" -Value $Web.URL $NodeInfo | Add-Member -MemberType NoteProperty -Name "Type of Node" -Value "Quick Launch" $NodeInfo | Add-Member -MemberType NoteProperty -name "Title" -Value $Node.Title $NodeInfo | Add-Member -MemberType NoteProperty -Name "URL" -value $Node.Url $NodeInfo | Add-Member -MemberType NoteProperty -Name "ID" -Value $Node.ID $NodeInfo | Add-Member -MemberType NoteProperty -Name "Parent ID" -Value $Node.ParentID if($NavNodeSummary | Where-Object {($_.url -eq $Node.Url) -and ($_.title -eq $Node.Title) -and ($_.'Web URL' -eq $Web.url) -and ($_.'Parent ID' -eq $Node.ParentID)}) { $NodeInfo | Add-Member -MemberType NoteProperty -Name "Suspected Duplicate" -Value "True" } else { $NodeInfo | Add-Member -MemberType NoteProperty -Name "Suspected Duplicate" -Value "False" } $NavNodeSummary.Add($NodeInfo) | Out-Null foreach($childnode in $node.Children) { $NodeInfo = New-Object System.Object $NodeInfo | Add-Member -MemberType NoteProperty -Name "Web URL" -Value $Web.URL $NodeInfo | Add-Member -MemberType NoteProperty -Name "Type of Node" -Value "Quick Launch" $NodeInfo | Add-Member -MemberType NoteProperty -name "Title" -Value $ChildNode.Title $NodeInfo | Add-Member -MemberType NoteProperty -Name "URL" -value $ChildNode.Url $NodeInfo | Add-Member -MemberType NoteProperty -Name "ID" -Value $ChildNode.ID $NodeInfo | Add-Member -MemberType NoteProperty -Name "Parent ID" -Value $Node.Id if($NavNodeSummary | Where-Object {($_.url -eq $ChildNode.Url) -and ($_.title -eq $ChildNode.Title) -and ($_.'Web URL' -eq $Web.url) -and ($_.'Parent ID' -eq $ChildNode.ParentId)}) { $NodeInfo | Add-Member -MemberType NoteProperty -Name "Suspected Duplicate" -Value "True" } else { $NodeInfo | Add-Member -MemberType NoteProperty -Name "Suspected Duplicate" -Value "False" } $NavNodeSummary.Add($NodeInfo) | Out-Null } } } } Return $NavNodeSummary } |