Kleine Helferlein Teil 4: Navigationslinksuche mit PnP

Heute möchte ich euch ein kleines Skript vorstellen, mit dem Ihr mit Hilfe der PnP-Funktionen durch alle Navigationspunkte eurer Websitesammlung iterieren könnt und so wie hier zum Beispiel nach Links mit URL-Parametern suchen könnt:

1:  #*****************************************  
2:  #Das Skript ist für jede Wesitesammlung auszuführen. Die Pnp-Module für die jeweilige SharePoint-Version werden benötigt  
3:  #https://github.com/SharePoint/PnP-PowerShell  
4:  #  
5:  #*****************************************  
6:  #****************Variablen****************  
7:  $siteUrl = "https://deineWebsitesammlung"  
8:  $suchbegriff = "?" # In unserem Fall das Fragezeichen für URL-Parameter  
9:  #*****************************************</code>  
10:  Connect-PnPOnline -Url $siteUrl -Credentials (Get-Credential)  
11:  $webs = Get-PnPSubWebs -Recurse  
12:  $globalnodes = Get-PnPNavigationNode -Location TopNavigationBar  
13:  $localnodes = Get-PnPNavigationNode  
14:  $allnodes = $globalnodes +$localnodes;  
15:  foreach($node in $allnodes){  
16:     if($node.URL.Contains($suchbegriff)){  
17:        Write-Host "Gefunden auf Root: Navigationspunkt: " $node.Title  
18:     }  
19:  }  
20:  foreach($web in $webs){  
21:     $globalnodes = Get-PnPNavigationNode -Location TopNavigationBar -Web $web  
22:     foreach($node in $globalnodes){  
23:        if($node.URL.Contains($suchbegriff)){  
24:           Write-Host "Gefunden in Web "$web.Url" in der globalen Navigation. Navigationspunkt: "$node.Title  
25:        }  
26:     }  
27:     $localnodes = Get-PnPNavigationNode -Web $web  
28:     foreach($node in $localnodes){  
29:        if($node.URL.Contains($suchbegriff)){  
30:           Write-Host "Gefunden in Web "$web.Url" in der lokalen Navigation. Navigationspunkt: "$node.Title  
31:        }  
32:     }  
33:  }  

Das Schöne ist: Es funktioniert für alle durch SharePointPnP unterstützten Plattformen!

Sollte sich euer Suchbegriff nicht wie hier in der URL befinden, sondern ihr nach einem bestimmten Wort in der Navigation suchen, muss im Skript die if-Abfrage nach dem Suchbegriff angepasst werden. Hier muss dann die Property Title verwendet werden:

1:  [...]  
2:  if($node.Title.Contains($suchbegriff)){  
3:  [...]  

In der ersten Variante wird das Ergebnis direkt in der PowerShell ausgegeben. Bei größeren Umgebungen ist es natürlich empfehlenswert die Ergebnisse in einer Datei auszugeben.
Mit einer einfachen Ausgabe sähe das Skript dann so aus:

1:  #*****************************************  
2:  #Das Skript ist für jede Wesitesammlung auszuführen. Die Pnp-Module für die jeweilige SharePoint-Version werden benötigt  
3:  #https://github.com/SharePoint/PnP-PowerShell  
4:  #  
5:  #*****************************************  
6:  #****************Variablen****************  
7:  $siteUrl = "https://deineWebsitesammlung"  
8:  $suchbegriff = "?" # In unserem Fall das Fragezeichen für URL-Parameter  
9:  $Outfile = "C:\temp\NavNodes.csv"  
10:  #*****************************************  
11:  "Website,Navigationstyp,NavigationNode,NavigationURL" &gt;  $Outfile  
12:  Connect-PnPOnline -Url $siteUrl -Credentials (Get-Credential)  
13:  $webs = Get-PnPSubWebs -Recurse  
14:  $globalnodes = Get-PnPNavigationNode -Location TopNavigationBar  
15:  foreach($node in $globalnodes){  
16:    if($node.URL.Contains($suchbegriff)){  
17:      $siteURL +",GlobalNav,"+$node.Title+","+$node.URL &gt;&gt; $Outfile  
18:    }  
19:  }  
20:  $localnodes = Get-PnPNavigationNode  
21:  foreach($node in $localnodes){  
22:    if($node.URL.Contains($suchbegriff)){  
23:      $siteURL +",LocalNav,"+$node.Title+","+$node.URL &gt;&gt; $Outfile  
24:    }  
25:  }  
26:  foreach($web in $webs){  
27:    $globalnodes = Get-PnPNavigationNode -Location TopNavigationBar -Web $web  
28:    foreach($node in $globalnodes){  
29:      if($node.URL.Contains($suchbegriff)){  
30:        $web.URL +",GlobalNav,"+$node.Title+","+$node.URL &gt;&gt; $Outfile  
31:      }  
32:    }  
33:    $localnodes = Get-PnPNavigationNode -Web $web  
34:    foreach($node in $localnodes){  
35:      if($node.URL.Contains($suchbegriff)){  
36:        $web.URL +",LocalNav,"+$node.Title+","+$node.URL &gt;&gt; $Outfile  
37:      }  
38:    }  
39:  }   

Viel Spaß beim Durchsuchen eurer Navigation!

Leave a Comment

Your email address will not be published. Required fields are marked *