SharePointCommunity
Die deutschsprachige Community für SharePoint, Microsoft 365, Teams, Yammer und mit Azure

Sponsored by

Willkommen im Forum Archiv.
Einträge sind hier nicht mehr möglich, aber der Bestand von 12 Jahren SharePoint-Wissen ist hier recherchierbar.




Audience setzten mit Powershell

Unbeantwortet Dieser Beitrag hat 3 Antworten

Ohne Rang
496 Beiträge
Derby erstellt 27 Feb. 2017 15:06
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich habe mir ein Script geschrieben, welches mir aus allen SiteCollection in einer Webanwendung eine Navigation erstellt (nach gewissen Kriterien)
Die AD-Gruppen in der Mitglieder-Gruppe der jeweiligen Seite werden dem Navigatiosnelement als Audience hinzugefügt.

 function CreateGlobalnavigationNode()
 {
 param(
 $gURL,
 $gTitle,
 $gAudience
 )
 $gURL
 $gTitle
 $gAudience
 $CreateNavigationNodeMethod = [Microsoft.SharePoint.Publishing.Navigation.SPNavigationSiteMapNode]::CreateSPNavigationNode #Create NavObject
 $HeadingNode = $portal.Navigation.TopnavigationBar  | Where {$_.Title -eq $navHeader} #Filter GetNavHeading
 $headingCollection = $headingNode.Children
 $linkNode = $CreateNavigationNodeMethod.Invoke($gTitle, $gURL, [Microsoft.SharePoint.Publishing.NodeTypes]::AuthoredLinkPlain, $headingCollection)
 $linkNode.Properties["Audience"] = ";;;;"+"Team-UHD,SPSAdmins,$gAudience"
 $linkNode.update()
 $portal.Update()
 }

Es wird alles korrekt angelegt, nur greift die Audience nicht. Erst wenn ich in der GUI in der Navigation einen angelegten Link nochmals speichere, greift sie.
Kann mir wer sagen was ich hier falsch mache?

Dirk

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Feb. 2017 15:52
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Da hast Du aber ein nettes Durcheinander von lokalen und globalen Variablen ;-) Was ist z.B. $portal, auf dem Du auch ein Update() aufrufst?

Nach diesem Code erzeugst Du nur einen neuen Link (und ohne zu prüfen, ob es den schon gibt). Manchmal hilft es ganz simpel ein erzeugtes Objekt direkt nach dem Erzeugen zu speichern (mit Update() ), dann etwas zu ändern (Audience) und dann nochmal zu speichern.

Ich weiß nicht, wie man bei diesen Links korrekt Zielgruppen setzt, aber was ich in solchen Fällen oft mache, ist daß ich mir einfach den Code ansehe, mit dem Microsoft selbst das macht. In diesem Fall also den Code hinter der Seite, mit der man das manuell machen kann.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
496 Beiträge
Derby Als Antwort am 27 Feb. 2017 16:03
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Die Variablen kommen natürlich aus dem Script, hab nur die Funktion selbst kopiert. Wie gesagt es wird augenscheinlich alles richtig gesetzt, die Gruppen die ich brauche stehen korrekt in dem LinkElement drin. Nur scheinen sie nicht zu greifen.

Wie kann man sich den Code am besten anschauen?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 27 Feb. 2017 16:07
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

[quote user="Derby"]Die Variablen kommen natürlich aus dem Script[/quote]

Schon, aber nicht alle aus der Funktion. Die bekommt zwar einige Parameter übergeben, greift aber auch noch auf sonstwo definierte Variablen zu. Sowas ist schlecht zu lesen, fehleranfällig und schlecht wartbar.

[quote user="Derby"]Wie kann man sich den Code am besten anschauen?[/quote]

Mit Tools wie z.B. ILSpy.

Viele Grüße
Andi
af @ evocom de
Blog