该篇文章是我于2009年6月10日通过自己编写的工具,批量从位于在博客园的博客站点(http://chenxizhang.cnblogs.com)同步而来。文章中的图片地址仍然是链接到博客园的。特此说明! 陈希章原文地址:http://www.cnblogs.com/chenxizhang/archive/2009/01/03/1367444.html原文标题:如何:扩展 STSADM 实用工具【转载】 原文发表:2009/1/3 6:01:00 |
本文转载自微软官方网站: http://msdn.microsoft.com/zh-cn/library/bb417382.aspx
利用 STSADM.EXE 实用工具,可以执行无法在管理中心应用程序中完成的很多 Windows SharePoint Services 管理操作。有关详细信息,请参阅 Microsoft TechNet 中的文章 Stsadm.exe command-line tool (Office SharePoint Server)。您可以使用 Windows SharePoint Services 3.0 扩展 STSADM 实用工具的功能,方法是通过使用任意 .NET 语言的简单项目来添加您自己的操作和命令行参数。
创建此类项目需要执行两个主要任务。
-
创建一个可实现 ISPStsadmCommand 接口的类。
-
注册该类及其程序集以向 STSADM 通知您的相关扩展。
创建一个可实现 ISPStsadmCommand 的类
-
在 Visual Studio 中启动一个类库项目。
-
为 Microsoft.SharePoint 和 Microsoft.SharePoint.StsAdmin 添加 using 语句。
-
使用一个遵循
CompanyName.TechnologyName.Feature.SubFeature
模式的命名空间,如AjaxInc.SharePoint.StsAdmin.CustomCommands
(请参阅Names of Namespaces)。 -
使用一个表示您要创建的新 STSADM 操作的公约数的类名称;例如,“SortCommands”。
-
该类应继承 ISPStsadmCommand;其声明如下所示。
公共类 SortCommands:ISPStsAdminCommand
-
编写 GetHelpMessage 方法的实现。请参阅下面的示例。
-
编写 Run 方法的实现。请参阅下面的示例。
-
编译项目,将命名空间名称用作程序集的名称。
-
将程序集部署到全局程序集缓存;例如 C:/Windows/Assembly。
注册新的类和程序集
-
创建一个名为 stsadmcommands.uniqueID.xml 的文本文件 (UTF-8),其中 uniqueID 为贵公司的名称或其他某些 ID,这些 ID 可确保在可能部署了 STSADM 扩展的任何服务器上具有唯一性。XML 声明仅应读取
-
对于您所创建的每个自定义 STSADM 操作(即 GetHelpMessage 和 Run 的 command 参数的每个可能值),请使用以下语法将
元素(位于 -
用适当的值替换 command_name、fully_qualified_class_name 和 assembly_name(不要在程序集名称中包括“.dll”扩展名)。
-
使用通过以下步骤获得的程序集的公钥标记替换 value。
-
在全局程序集缓存中右键单击相应的程序集,并选择“属性”。
-
在“常规”选项卡上,复制“公钥标记”值。
-
将其粘贴为
PublicKeyToken
的值。
-
-
将 stsadmcommands.uniqueID.xml 文件复制到
C:/Program Files/Common Files/Microsoft Shared/web server extensions/12/CONFIG
。
下面是一个范例
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
"
;
}
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>
作者:陈希章 出处:http://blog.youkuaiyun.com/chen_xizhang 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 |