Procedimiento para ampliar la utilidad STSADM
Última modificación: sábado, 01 de mayo de 2010
Hace referencia a: SharePoint Foundation 2010
Precaución |
---|
La extensión de STSADM.EXE está desusada y no se admitirá en versiones futuras de Microsoft SharePoint Foundation 2010. Este tema se proporciona exclusivamente para la solución de problemas de extensiones existentes de STSADM.EXE. Tenga en cuenta que no debe crear nuevas extensiones, sino considerar la posibilidad de extender Windows PowerShell. Vea Windows PowerShell en la Consola de administración de SharePoint. |
La utilidad STSADM.EXE permite realizar muchas operaciones administrativas en Windows SharePoint Services que no pueden realizarse con la aplicación de Administración central. Vea el artículo sobre la herramienta de línea de comandos Stsadm.exe (Office SharePoint Server) en Microsoft TechNet para obtener información detallada. Con Windows SharePoint Services 3.0 puede ampliar la funcionalidad de la utilidad STSADM si agrega sus propias operaciones y parámetros de la línea de comandos con proyectos simples mediante el uso de cualquier lenguaje .NET.
La creación de esos proyectos requiere dos tareas principales.
Crear una clase que implemente la interfaz ISPStsadmCommand.
Informar a STSADM sobre su ampliación mediante el registro de la clase y su ensamblado.
Creación de una clase que implemente ISPStsadmCommand
Inicie un proyecto de biblioteca de clases en Visual Studio.
Agregue las instrucciones using para Microsoft.SharePoint y Microsoft.SharePoint.StsAdmin.
Use un espacio de nombres que siga el modelo CompanyName.TechnologyName.Feature.SubFeature; por ejemplo, AjaxInc.SharePoint.StsAdmin.CustomCommands. (Consulte Names of Namespaces.)
Use un nombre de clase que exprese el denominador común de las operaciones STSADM que vaya a crear, por ejemplo, "SortCommands".
La clase debe heredar ISPStsadmCommand con una declaración similar a la siguiente.
public class SortCommands : ISPStsAdminCommand
Escriba la implementación del método GetHelpMessage. Consulte el ejemplo siguiente.
Escriba la implementación del método Run. Consulte el ejemplo siguiente.
Compile el proyecto mediante el uso del nombre del espacio de nombres como nombre del ensamblado.
Implemente el ensamblado en la memoria caché de ensamblados global; por ejemplo, C:\Windows\Assembly.
Registro de la nueva clase y el ensamblado
Cree un archivo de texto (UTF-8) denominado stsadmcommands.identificadorÚnico.xml, donde identificadorÚnico es el nombre de su compañía o cualquier otro identificador que garantice el carácter único en cualquier servidor en el que se puede implementar su extensión de STSADM. La declaración XML debería indicar simplemente <?xml version="1.0" encoding="utf-8" ?>. El elemento de nivel superior es <commands></commands>.
Para cada operación STSADM personalizada creada, es decir, cada valor posible del parámetro command de GetHelpMessage y Run, agregue un <command/> (dentro del elemento <commands>) en el archivo stsadmcommands con la sintaxis siguiente (vea el siguiente ejemplo). Cambie los valores de versión y referencia cultural según sea necesario.
<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>
Reemplace nombre_del_comando, nombre_completo_de_la_clase y nombre_de_ensamblado con los valores correspondientes. (No incluya la extensión ".dll" en el nombre del ensamblado).
Reemplace valor con el token de clave pública del ensamblado que obtiene con estos pasos.
Haga clic con el botón secundario en el ensamblado de la memoria caché de ensamblados global y seleccione Propiedades
En la pestaña General, copie el valor de Símbolo de clave pública.
Péguelo como valor de PublicKeyToken.
Copie el archivo stsadmcommands.identificadorÚnico.xml en C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\CONFIG.
Ejemplo
El ejemplo siguiente muestra el archivo *.cs y, debajo del mismo, el archivo stsadmcommands.identificadorÚnico.xml de una operación STSADM personalizada, denominada enumfeatures, que enumerará las características en un sitio.
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>
Vea también
Referencia
Otros recursos
Herramienta de línea de comandos Stsadm.exe (Office SharePoint Server)