Procédure : étendre l'utilitaire STSADM
Dernière modification : samedi 1 mai 2010
S’applique à : SharePoint Foundation 2010
Attention |
---|
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.
Créer une classe qui implémente l'interface ISPStsadmCommand.
Informer STSADM de votre extension en inscrivant la classe et son assembly.
Créer une classe qui implémente ISPStsadmCommand
Démarrez un projet de bibliothèque de classes dans Visual Studio.
Ajoutez des instructions using pour Microsoft.SharePoint et Microsoft.SharePoint.StsAdmin.
Utilisez un espace de noms respectant le modèle CompanyName.TechnologyName.Feature.SubFeature. Par exemple, AjaxInc.SharePoint.StsAdmin.CustomCommands. (Voir Names of Namespaces.)
Utilisez un nom de classe qui exprime le dénominateur commun des nouvelles opérations STSADM que vous allez créer. Par exemple, « SortCommands ».
La classe doit hériter de ISPStsadmCommand ; avec une déclaration semblable à celle-ci.
public class SortCommands : ISPStsAdminCommand
Écrivez l'implémentation de la méthode GetHelpMessage. Voir l'exemple ci-dessous.
Écrivez l'implémentation de la méthode Run. Voir l'exemple ci-dessous.
Compilez le projet en utilisant le nom de l'espace de noms comme nom de l'assembly.
Déployez l'assembly sur le Global Assembly Cache ; par exemple C:\Windows\Assembly.
Inscrire la nouvelle classe et l'assembly
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>.
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>
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.)
Remplacez valeur par le jeton de clé publique pour votre assembly que vous obtenez en suivant ces étapes.
Cliquez avec le bouton droit sur votre assembly dans le Global Assembly Cache et sélectionnez Propriétés.
Sous l'onglet Général, copiez la valeur du jeton de clé publique.
Collez la valeur en tant que valeur du PublicKeyToken.
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
Autres ressources
Outil en ligne de commande Stsadm.exe (Office SharePoint Server)