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.




Bestehende Webparts einer Seite hinzufügen - Powershell

Unbeantwortet Dieser Beitrag hat 7 Antworten

Ohne Rang
282 Beiträge
MStel erstellt 3 Juni 2015 09:16
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Halloo.
Ich habe einen Webpart als .wsp Datei in mein SharePoint System eingebunden.
 Anschließend habe ich das Websitesammlungsfeature aktiviert.

Nun möchte ich auf meiner Leeren Startseite unter Seite Bearbeiten meinen Webpart hinzufügen, allerdings über ein Powershell Skript.
Das  ganze Drumherum vonwegen in den Lösungskatalog hinzufügen oder aus Lokalen Dateien hochladen oder XML Inhalte einlesen benötige ich nicht - Es geht nur darum diesen bestehenden Webpart meiner Seite hinzuzufügen. Über einen Klick ist das möglich, jedoch benötige ich eine Skriptlösung.
https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.webparts.webpartmanager.addwebpart(v=vs.90).aspx

Habe die Methode AddWebPart gefunden, allerdings mit Überladung einer Variable vom Typ Webpart.
Da mir keine "GetWebpart" Methode bekannt ist weiß ich nicht wie ich die Variablen die benötigt werden fülle.

Ein simples Snippet würde schon genügen.

MFG

Alle Antworten

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 3 Juni 2015 11:47
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Du kannst der Methode einfach eine Instanz Deiner Webpart-Klasse übergeben. In PowerShell bekommst Du die ungefähr so:
$webpart = New-Object [Namespace.WebPartClass]

Übrigens kannst Du bei all diesen Fragen einfach nach entsprechenden Code-Lösungen suchen (also lieber mit C# als Suchbegriff statt PowerShell). Meistens gibt es keine spezifischen PowerShell-Kommandos und man muß stattdessen .NET-Code adaptieren.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 9 Juni 2015 07:46
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Danke für den Hinweis mit den C# Suchbegriffen.
Das verwenden der $Webpart Variable habe ich mehrfach gelesen. Könnten wir speziell auf die diese eingehen?
Ich weiß nicht wie man diese setzt.
Eine Get-SPWebparts oder InstalledWebparts Methode ist mir nicht bekannt, somit weiß ich nicht wie ich eine Liste der Verfügbaren Webparts mit ihren internen Namen erhalte.

Oder gibt es ein Verzeichnis welches man beispielsweise mit dem SharePoint Designer öffnen kann, um diese Infos zu erhalten?

Da ich keine eigene Webpartpage erstellt habe sondern den Webpart auf einer Leeren Seite hinzufügen möchte kann ich Snippets wie dieses
$webpart = new-object Microsoft.SharePoint.WebPartPages.ContentEditorWebPart nicht verwenden (korrigier mich wenn ich falsch liege).

 

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 9 Juni 2015 08:22
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Ich glaube, Du verwechselst da zwei Dinge ;-)

Es gibt zum einen die Seite, auf der Du das Webpart parken möchtest. Im Code bekommst Du die als SPFile aus dem Web mit $page = $web.GetFile("UrlDerSeite"). Dabei ist es völlig unerheblich, ob Du die Seite erstellt hast oder ob es sich z.B. um die standardmäßige Startseite handelt.

Das andere ist das Webpart, das Du auf der Seite ablegen möchtest. Für dieses mußt Du den Klassennamen inkl. Namespace kennen. Viele SharePoint-Webparts befinden sich im Namespace Microsoft.SharePoint.WebPartPages. Letztlich mußt Du in der MSDN danach suchen. Bei Deinen eigenen Webparts kennst Du sowohl Namespace als auch Klassennamen ja sowieso.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 9 Juni 2015 09:41
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Entschuldige die Unklarheiten.
Meine Aussage bezog sich auf die WebPartmanager.AddWebPart Methode vom MSDN.
https://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.webparts.webpartmanager.addwebpart(v=vs.110).aspx

Hier wird eine Variable vom Typ Webpart übergeben ( in unzähligen CodeSnippets auch $Webpart ).
Die Syntax ist dabei meistens gleich :

new-object Microsoft.SharePoint.WebPartPages.test

Aber wo kann man sich denn Namespace und Klassennamen anzeigen lassen, beziehungsweise deren Werte einer Variable übergeben?

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 9 Juni 2015 10:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Grundsätzlich findest Du die Webparts in der Webpart-Galerie (Websiteeinstellungen - Webparts). In diesen *.webpart bzw. *.dwp Dateien steht auch der Namespace und Klassenname. Du mußt dazu die Dateien aus der Galerie herunterladen und mit einem geeigneten Editor öffnen.

Viele Grüße
Andi
af @ evocom de
Blog
Ohne Rang
282 Beiträge
MStel Als Antwort am 9 Juni 2015 12:34
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

In der Tat befindet sich in dieser Datei im Tag Webparts -> Metadata -> die Zeile
<type name="LST.Webpart.Performance, Performance, Version=1.0.0.0, Culture=neutral, PublicKeyToken=f83d8b5939a191cb"/>

sowie die Properties des Webparts.

Ich hoffe das genügt um meine $Webpart variable zuweisen zu können.

Vielen dank!

Ohne Rang
19231 Beiträge
Andi Fandrich Als Antwort am 9 Juni 2015 12:59
SchlechtSchlechtIn OrdnungIn OrdnungDurchschnittDurchschnittGutGutSehr gutSehr gut

Falls das noch nicht geschehen ist, mußt Du noch die Assembly laden, damit sie der PowerShell auch bekannt ist. SharePoint-Assemblies sind in der SharePoint-PowerShell bekannt. Eigene kannst Du über das hier bekanntmachen:

[System.Reflection.Assembly]::LoadWithPartialName("Name")

Viele Grüße
Andi
af @ evocom de
Blog