Procédure : étendre l'utilitaire STSADM

Dernière modification : samedi 1 mai 2010

S’applique à : SharePoint Foundation 2010

Note AttentionAttention

L'extension de STSADM.EXE a été abandonnée et ne sera plus prise en charge dans les versions futures de Microsoft SharePoint Foundation 2010. Cette rubrique est fournie uniquement pour faciliter la résolution des problèmes liés aux extensions existantes de STSADM.EXE. Vous ne devez pas créer de nouvelles extensions. Pensez plutôt à étendre Windows PowerShell. Consultez Windows PowerShell dans l’environnement SharePoint Management Shell.

L'utilitaire STSADM.EXE permet de nombreuses opérations d'administration dans Windows SharePoint Services qui ne peuvent pas être effectuées avec l'application Administration centrale. Pour plus d'informations, consultez l'article Stsadm.exe command-line tool (Office SharePoint Server) dans Microsoft TechNet. Grâce à Windows SharePoint Services 3.0, vous pouvez étendre les fonctionnalités de l'utilitaire STSADM en ajoutant vos propres opérations et paramètres de ligne de commande avec des projets simples à l'aide de n'importe quel langage .NET.

La création d'un tel projet nécessite deux tâches principales.

  1. Créer une classe qui implémente l'interface ISPStsadmCommand.

  2. Informer STSADM de votre extension en inscrivant la classe et son assembly.

Créer une classe qui implémente ISPStsadmCommand

  1. Démarrez un projet de bibliothèque de classes dans Visual Studio.

  2. Ajoutez des instructions using pour Microsoft.SharePoint et Microsoft.SharePoint.StsAdmin.

  3. Utilisez un espace de noms respectant le modèle CompanyName.TechnologyName.Feature.SubFeature. Par exemple, AjaxInc.SharePoint.StsAdmin.CustomCommands. (Voir Names of Namespaces.)

  4. Utilisez un nom de classe qui exprime le dénominateur commun des nouvelles opérations STSADM que vous allez créer. Par exemple, « SortCommands ».

  5. La classe doit hériter de ISPStsadmCommand ; avec une déclaration semblable à celle-ci.

    public class SortCommands : ISPStsAdminCommand

  6. Écrivez l'implémentation de la méthode GetHelpMessage. Voir l'exemple ci-dessous.

  7. Écrivez l'implémentation de la méthode Run. Voir l'exemple ci-dessous.

  8. Compilez le projet en utilisant le nom de l'espace de noms comme nom de l'assembly.

  9. Déployez l'assembly sur le Global Assembly Cache ; par exemple C:\Windows\Assembly.

Inscrire la nouvelle classe et l'assembly

  1. Créez un fichier texte (UTF-8) nommé stsadmcommands.ID_unique.xml, où ID_unique est le nom de votre société ou d'autres ID qui garantissent l'unicité sur tout serveur sur lequel votre extension de STSADM peut être déployée. La déclaration XML doit simplement indiquer <?xml version="1.0" encoding="utf-8" ?>. L'élément de niveau supérieur est <commands></commands>.

  2. Pour chaque opération STSADM personnalisée que vous avez créée — autrement dit, chaque valeur possible du paramètre command de GetHelpMessage et Run, ajoutez un élément <command/> (à l'intérieur de l'élément <commands>) à votre fichier stsadmcommands avec la syntaxe suivante (voir l'exemple ci-après). Modifiez les valeurs de version et de culture comme vous le souhaitez.

    <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. Remplacez nom_commande, nom_classe_complet et nom_assembly par les valeurs appropriées. (N'incluez pas l'extension « .dll » dans le nom de l'assembly.)

  4. Remplacez valeur par le jeton de clé publique pour votre assembly que vous obtenez en suivant ces étapes.

    1. Cliquez avec le bouton droit sur votre assembly dans le Global Assembly Cache et sélectionnez Propriétés.

    2. Sous l'onglet Général, copiez la valeur du jeton de clé publique.

    3. Collez la valeur en tant que valeur du PublicKeyToken.

  5. Copiez le fichier stsadmcommands.ID_unique.xml dans C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\CONFIG.

Exemple

L'exemple suivant montre le fichier *.cs et, en dessous, le fichier stsadmcommands.ID_unique .xml pour une opération STSADM personnalisée, appelée enumfeatures, qui répertorie les fonctionnalités au niveau d'un site.

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>

Voir aussi

Référence

ISPStsadmCommand

GetHelpMessage

Run

Autres ressources

Names of Namespaces

Outil en ligne de commande Stsadm.exe (Office SharePoint Server)