Freigeben über


Gewusst wie: Erweitern des Hilfsprogramms "stsadm"

Letzte Änderung: Samstag, 1. Mai 2010

Gilt für: SharePoint Foundation 2010

VorsichtVorsicht

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.

  1. Erstellen Sie eine Klasse, durch die die ISPStsadmCommand-Schnittstelle implementiert wird.

  2. Informieren Sie stsadm über die Erweiterung, indem Sie die Klasse und die zugehörige Assembly registrieren.

Erstellen einer Klasse, durch die "ISPStsadmCommand" implementiert wird

  1. Starten Sie ein Klassenbibliotheksprojekt in Visual Studio.

  2. Fügen Sie using-Anweisungen für Microsoft.SharePoint und Microsoft.SharePoint.StsAdmin hinzu.

  3. Verwenden Sie einen Namespace nach dem Muster CompanyName.TechnologyName.Feature.SubFeature. Beispiel: AjaxInc.SharePoint.StsAdmin.CustomCommands. (Siehe Names of Namespaces.)

  4. Verwenden Sie einen Klassennamen, der den gemeinsamen Nenner der zu erstellenden neuen stsadm-Vorgänge ausdrückt, beispielsweise SortCommands.

  5. Die Klasse sollte ISPStsadmCommand erben, und die Deklaration sollte ungefähr wie die folgende aussehen.

    public class SortCommands : ISPStsAdminCommand

  6. Schreiben Sie die Implementierung der GetHelpMessage-Methode. Siehe Beispiel unten.

  7. Schreiben Sie die Implementierung der Run-Methode. Siehe Beispiel unten.

  8. Kompilieren Sie das Projekt, und verwenden Sie dabei den Namespacenamen als Namen der Assembly.

  9. Stellen Sie die Assembly im globalen Assemblycache bereit; beispielsweise C:\Windows\Assembly.

Registrieren der neuen Klasse und Assembly

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

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

  4. Ersetzen Sie value durch den öffentlichen Schlüsseltoken für die mit diesen Schritten abgerufene Assembly.

    1. Klicken Sie mit der rechten Maustaste im globalen Assemblycache auf die Assembly, und wählen Sie Eigenschaften aus.

    2. Kopieren Sie auf der Registerkarte Allgemein den Public Key Token-Wert.

    3. Fügen Sie diesen Wert als Wert für PublicKeyToken ein.

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

Siehe auch

Referenz

ISPStsadmCommand

GetHelpMessage

Run

Weitere Ressourcen

Names of Namespaces

Befehlszeilentool "Stsadm" (Office SharePoint Server)