Procédure : étendre l'utilitaire STSADM

Windows SharePoint Services 3

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;
        }
    }
}
<?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

Afficher: