Gewusst wie: Erweitern des Hilfsprogramms "stsadm"
Letzte Änderung: Samstag, 1. Mai 2010
Gilt für: SharePoint Foundation 2010
Vorsicht |
---|
Das Erweitern von stsadm.exe ist veraltet und wird in zukünftigen Versionen von Microsoft SharePoint Foundation 2010 nicht unterstützt. Dieses Thema wird nur als Unterstützung bei der Problembehandlung für vorhandene Erweiterungen von stsadm.exe bereitgestellt. Sie sollten keine neuen Erweiterungen erstellen. Ziehen Sie stattdessen das Erweitern von Windows PowerShell in Betracht. Siehe Windows PowerShell in der SharePoint-Verwaltungsshell. |
Mit dem Hilfsprogramm stsadm.exe werden zahlreiche administrative Vorgänge in Windows SharePoint Services ermöglicht, die mit der Zentraladministrationsanwendung nicht ausgeführt werden können. Details hierzu finden Sie im Artikel Befehlszeilentool "Stsadm" (Office SharePoint Server) auf der Microsoft TechNet-Website. Mit Windows SharePoint Services 3.0 können Sie die Funktionalität des Hilfsprogramms stsadm erweitern, indem Sie mit einfachen Projekten und einer beliebigen .NET-Sprache eigene Vorgänge und Befehlszeilenparameter hinzufügen.
Zum Erstellen eines solchen Projekts gehören zwei Hauptaufgaben.
Erstellen Sie eine Klasse, durch die die ISPStsadmCommand-Schnittstelle implementiert wird.
Informieren Sie stsadm über die Erweiterung, indem Sie die Klasse und die zugehörige Assembly registrieren.
Erstellen einer Klasse, durch die "ISPStsadmCommand" implementiert wird
Starten Sie ein Klassenbibliotheksprojekt in Visual Studio.
Fügen Sie using-Anweisungen für Microsoft.SharePoint und Microsoft.SharePoint.StsAdmin hinzu.
Verwenden Sie einen Namespace nach dem Muster CompanyName.TechnologyName.Feature.SubFeature. Beispiel: AjaxInc.SharePoint.StsAdmin.CustomCommands. (Siehe Names of Namespaces.)
Verwenden Sie einen Klassennamen, der den gemeinsamen Nenner der zu erstellenden neuen stsadm-Vorgänge ausdrückt, beispielsweise SortCommands.
Die Klasse sollte ISPStsadmCommand erben, und die Deklaration sollte ungefähr wie die folgende aussehen.
public class SortCommands : ISPStsAdminCommand
Schreiben Sie die Implementierung der GetHelpMessage-Methode. Siehe Beispiel unten.
Schreiben Sie die Implementierung der Run-Methode. Siehe Beispiel unten.
Kompilieren Sie das Projekt, und verwenden Sie dabei den Namespacenamen als Namen der Assembly.
Stellen Sie die Assembly im globalen Assemblycache bereit; beispielsweise C:\Windows\Assembly.
Registrieren der neuen Klasse und Assembly
Erstellen Sie eine Textdatei (UTF-8) mit dem Namen stsadmcommands.Eindeutige ID.xml, wobei Eindeutige ID der Name des Unternehmens oder eine andere ID ist, deren Eindeutigkeit auf allen Servern, auf denen die STSADM-Erweiterung möglicherweise bereitgestellt wird, sichergestellt ist. Die XML-Deklaration sollte einfach <?xml version="1.0" encoding="utf-8" ?> lauten. Das Element der obersten Ebene ist <commands></commands>.
Fügen Sie mit der folgenden Syntax für jeden erstellten benutzerdefinierten stsadm-Vorgang (das heißt für jeden möglichen Wert des command-Parameters von GetHelpMessage und Run) der stsadmcommands-Datei ein <command/>-Element (im <commands>-Element) hinzu. (Siehe folgendes Beispiel.) Ändern Sie die Versions- und Kulturwerte nach Bedarf.
<commands> <command name="command_name" class="fully_qualified_class_name, assembly_name, Version=1.0.0.0, Culture=neutral, PublicKeyToken=value"/> <!-- other command elements, if any --> </commands>
Ersetzen Sie command_name, fully_qualified_class_name und assembly_name durch die entsprechenden Werte. (Schließen Sie die Erweiterung DLL nicht in den Assemblynamen ein.)
Ersetzen Sie value durch den öffentlichen Schlüsseltoken für die mit diesen Schritten abgerufene Assembly.
Klicken Sie mit der rechten Maustaste im globalen Assemblycache auf die Assembly, und wählen Sie Eigenschaften aus.
Kopieren Sie auf der Registerkarte Allgemein den Public Key Token-Wert.
Fügen Sie diesen Wert als Wert für PublicKeyToken ein.
Kopieren Sie die Datei stsadmcommands.Eindeutige ID.xml nach C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\CONFIG.
Beispiel
Im folgenden Beispiel wird die CS-Datei und darunter die Datei stsadmcommands.Eindeutige ID.xml für den benutzerdefinierten stsadm-Vorgang enumfeatures gezeigt, mit dem die Features einer Website aufgelistet werden.
using System;
using System.Collections.Specialized;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.StsAdmin;
namespace MS.Samples.SharePoint
{
public class SimpleCommandHandler : ISPStsadmCommand
{
public string GetHelpMessage(string command)
{
return "-url <full url to a site in SharePoint>";
}
public int Run(string command, StringDictionary keyValues, out string output)
{
command = command.ToLowerInvariant();
switch (command)
{
case "enumfeatures":
return this.EnumerateFeatures(keyValues, out output);
default:
throw new InvalidOperationException();
}
}
private int EnumerateFeatures(StringDictionary keyValues, out string output)
{
if (!keyValues.ContainsKey("url"))
{
throw new InvalidOperationException("The url parameter was not specified.");
}
String url = keyValues["url"];
SPFeatureCollection features = null;
SPWeb web = null;
try
{
SPSite site = new SPSite(url);
web = site.OpenWeb();
features = web.Features;
}
catch (Exception e)
{
throw new InvalidOperationException("Error retrieving url '" + url + "'. Please check the format of your url, and ensure that the site exists. Details: " + e.Message);
}
StringBuilder sb = new StringBuilder();
sb.AppendLine("Features at '" + web.Url + "':\n");
foreach (SPFeature feature in features)
{
sb.AppendLine(feature.Definition.DisplayName + " (" + feature.DefinitionId + ")");
}
output = sb.ToString();
return 0;
}
}
}
Imports System
Imports System.Collections.Specialized
Imports System.Text
Imports Microsoft.SharePoint
Imports Microsoft.SharePoint.StsAdmin
Namespace MS.Samples.SharePoint
Public Class SimpleCommandHandler
Inherits ISPStsadmCommand
Public Function GetHelpMessage(ByVal command As String) As String
Return "-url <full url to a site in SharePoint>"
End Function
Public Function Run(ByVal command As String, ByVal keyValues As StringDictionary, <System.Runtime.InteropServices.Out()> ByRef output As String) As Integer
command = command.ToLowerInvariant()
Select Case command
Case "enumfeatures"
Return Me.EnumerateFeatures(keyValues, output)
Case Else
Throw New InvalidOperationException()
End Select
End Function
Private Function EnumerateFeatures(ByVal keyValues As StringDictionary, <System.Runtime.InteropServices.Out()> ByRef output As String) As Integer
If Not keyValues.ContainsKey("url") Then
Throw New InvalidOperationException("The url parameter was not specified.")
End If
Dim url As String = keyValues("url")
Dim features As SPFeatureCollection = Nothing
Dim web As SPWeb = Nothing
Try
Dim site As New SPSite(url)
web = site.OpenWeb()
features = web.Features
Catch e As Exception
Throw New InvalidOperationException("Error retrieving url '" & url & "'. Please check the format of your url, and ensure that the site exists. Details: " & e.Message)
End Try
Dim sb As New StringBuilder()
sb.AppendLine("Features at '" & web.Url & "':" & vbLf)
For Each feature As SPFeature In features
sb.AppendLine(feature.Definition.DisplayName & " (" & feature.DefinitionId & ")")
Next feature
output = sb.ToString()
Return 0
End Function
End Class
End Namespace
<?xml version="1.0" encoding="utf-8" ?>
<commands>
<command
name="enumfeatures"
class="MS.Samples.SharePoint.SimpleCommandHandler, MS.Samples.SharePoint.CustomStsAdmCommand,
Version=1.0.0.0,
Culture=neutral,
PublicKeyToken=4da7a49e92ae373c"/>
</commands>