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

Bestehende Webparts einer Seite hinzufügen - Powershell

bewertet von 0 Usern
Nicht beantwortet Dieser Beitrag hat 0 Geprüfte Antworten | 7 Antworten | 1 Follower

Top-50-Beitragsschreiber
282 Beiträge
MStel erstellt in 3 Jun 2015 9:16

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

Top-10-Beitragsschreiber
19.128 Beiträge

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
Top-50-Beitragsschreiber
282 Beiträge

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).

 

Top-10-Beitragsschreiber
19.128 Beiträge

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
Top-50-Beitragsschreiber
282 Beiträge

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?

Top-10-Beitragsschreiber
19.128 Beiträge

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
Top-50-Beitragsschreiber
282 Beiträge

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!

Top-10-Beitragsschreiber
19.128 Beiträge

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
Seite 1 von 1 (8 Elemente) | RSS