#connection details$clientId="xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"$invocation=(Get-VariableMyInvocation).Value$directorypath=Split-Path$invocation.MyCommand.Path$csvPath=$directorypath+"\TeamsChannelsExport.csv"# CSV should have a column 'SiteUrl'# Read sites from CSV$sites=Import-Csv-Path$csvPath#$TenantName = "contoso"#$adminSiteURL = "https://$TenantName-Admin.SharePoint.com"#Connect-PnPOnline -Url $adminSiteURL -ClientId $clientIdfunctionAdd-ChannelNavigationLink{param([string]$teamName,[string]$channelName,[string]$hubSiteUrl,[string]$channelSiteURL,[string]$teamSiteUrl,[string]$navParent)Log-Message"Adding site to hub navigation - $($channelSiteURL)""Info"if($hubSiteUrl){try{# if(!$pnpHubConnection)#{# $pnpHubConnection = Connect-PnPOnline -ClientId $clientId -CertificatePath $CertPath -CertificatePassword $CertPassword -Url $hubSiteUrl -Tenant "$($TenantName).onmicrosoft.com" -ReturnConnection$pnpHubConnection=Connect-PnPOnline-ClientId$clientId-Url$hubSiteUrl-ReturnConnection#}# Check if parent navigation node already exists$CurrentNavigation=Get-PnPNavigationNode-LocationTopNavigationBar-Connection$pnpHubConnection$teamNode=$null#check if the parent node exists$parentNode=$nullif($navParent){$parentNode=$CurrentNavigation|Where-Object{$_.Title-eq$navParent}if(!$parentNode){$parentNode=Add-PnPNavigationNode-LocationTopNavigationBar-Title$navParent-url"http://linkless.header/"-Connection$pnpHubConnectionLog-Message"Added Parent Node: $($navParent) to Hub navigation""Info"}}###new codeLog-Message"Adding team site: $($teamName) to Hub navigation""Info"# Find the correct position to insert alphabetically$preNode=$nullif($parentNode){Get-PnPProperty-ClientObject$parentNode-PropertyChildren-Connection$pnpHubConnection|Out-Null$teamNode=$parentNode.Children|Where-Object{$_.Title-eq$teamName}if(!$teamNode){Log-Message"Team site not found in navigation: $teamName""Info"$preNode=$parentNode.Children|Where-Object{$_.Title-lt$teamName}|Select-Object-Last1-ErrorActionSilentlyContinueif($preNode){$teamNode=Add-PnPNavigationNode-LocationTopNavigationBar-Title$teamName-Url$teamSiteUrl-PreviousNode$preNode.Id-Parent$parentNode.Id-OpenInNewTab-Connection$pnpHubConnection}else{$teamNode=Add-PnPNavigationNode-LocationTopNavigationBar-Title$teamName-Url$teamSiteUrl-First-Parent$parentNode.Id-OpenInNewTab-Connection$pnpHubConnection}}}else{$teamNode=$CurrentNavigation|Where-Object{$_.Title-eq$teamName}if(!$teamNode){Log-Message"Team site not found in navigation: $teamName""Info"$preNode=$CurrentNavigation|Where-Object{$_.Title-lt$teamName}|Select-Object-Last1-ErrorActionSilentlyContinueif($preNode){$teamNode=Add-PnPNavigationNode-LocationTopNavigationBar-Title$teamName-Url$teamSiteUrl-PreviousNode$preNode.Id-OpenInNewTab-Connection$pnpHubConnection}else{$teamNode=Add-PnPNavigationNode-LocationTopNavigationBar-Title$teamName-Url$teamSiteUrl-First-OpenInNewTab-Connection$pnpHubConnection}}}# Log-Message "Adding Channel site: $($channelName) to Hub navigation" "Info"if($channelName-ne"General"){$channelNodeExists=$nullGet-PnPProperty-ClientObject$teamNode-PropertyChildren-Connection$pnpHubConnection|Out-Nullif($teamNode.Children){$channelNodeExists=$teamNode.Children|Where-Object{$_.Url-eq$channelSiteURL}}if(!$channelNodeExists){# Add channel navigation link in alphabetical orderif(!$teamNode.Children){# No existing children, add as first childAdd-PnPNavigationNode-LocationTopNavigationBar-Title$channelName-Url$channelSiteURL-Parent$teamNode.Id-OpenInNewTab-Connection$pnpHubConnection|Out-Null}else{# Find correct position alphabetically among existing children$preNode=$teamNode.Children|Where-Object{$_.Title-lt$channelName}|Select-Object-Last1-ErrorActionSilentlyContinueif($preNode){Add-PnPNavigationNode-LocationTopNavigationBar-Title$channelName-Url$channelSiteURL-Parent$teamNode.Id-PreviousNode$preNode.Id-OpenInNewTab-Connection$pnpHubConnection|Out-Null}else{Add-PnPNavigationNode-LocationTopNavigationBar-Title$channelName-Url$channelSiteURL-Parent$teamNode.Id-OpenInNewTab-Connection$pnpHubConnection-First|Out-Null}}Log-Message"Added channel navigation: $($channelName) under $($teamNode.Title)""Info"}else{Log-Message"Channel navigation already exists: $($channelName)""Info"}}}catch{Log-Message"Error adding channel navigation link for $($channelName)`: $($_.Exception.Message)""Error"}}else{Log-Message"Hub site url not provided for '$($channelSiteURL)'""Error"}}foreach($sitein$sites){if($site.ChannelName-eq"General"){Add-ChannelNavigationLink-teamName$site.TeamName-channelName$site.ChannelName-hubSiteUrl$site.HubSiteUrl-teamSiteUrl$site.SiteUrl-navParent"Projects"}else{Add-ChannelNavigationLink-teamName$site.TeamName-channelName$site.ChannelName-hubSiteUrl$site.HubSiteUrl-channelSiteURL$site.SiteUrl-navParent"Projects"}}