65.9K
CodeProject 正在变化。 阅读更多。
Home

自定义 SharePoint STSADM 命令

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.90/5 (9投票s)

2007年5月23日

CPOL

4分钟阅读

viewsIcon

68296

downloadIcon

622

为 SharePoint 中的 stsadm.exe 管理工具编写自定义命令。

引言

使用 Microsoft Office SharePoint Server 2007 (MOSS) 和 WSS v3,可以为 STSADM 管理工具实现自定义命令。

为什么?

您想为开发/测试实现一些小助手,而无需管理界面。

您想为管理员添加功能以帮助他们,包括脚本化这些命令以进行批量使用的可能性。

实现自定义命令可能还有其他原因,但以上是最常见的问题和目的。

我在这里的目的是主要帮助那些实现自定义计时器作业的开发人员,就像我做的那样。

如何做到?

开发自定义命令非常简单。只有一个小小的项目管理和部署开销。这很好,所以您可以专注于主要目标。

您需要一个实现 ISPStsadmCommand 接口的类,以及一个用于注册命令的 XML 文件,以便 stsadm.exe 知道如何处理您的命令。

根据您提供的参数和功能,您可以编写一些帮助消息供用户在命令提示符下显示。如果您追求美观,这可能比正常情况花费更长的时间。

我提供了一个如何实现自定义命令的简短示例。详细说明可以在 Tony Bierman 的文章中找到。

  1. 在 Visual Studio 中创建一个类库项目,并引用 Microsoft.Sharepoint.dll
  2. 创建一个名称为您的命令的类,例如 GetJobInfo.cs
  3. 让该类实现 Microsoft.SharePoint.StsAdmin 中的 ISPStsadmCommand 接口
  4. GetHelpMessage 方法中返回一些有用的帮助文本
  5. Run 方法中实现您的功能,包括参数验证和在用户缺少参数时的有用帮助
  6. 签名、编译并将您的程序集部署到 gac
  7. 创建 XML 文件并添加您的命令和程序集引用,然后将此 XML 复制到您的 \webs server extensions\12\CONFIG 文件夹。
  8. 检查您的返回值和消息,并为自己刚刚实现了一个可能对某人有用的自定义 SharePoint 管理命令而感到高兴;)

在我目前的项目中,我开发了 一些 SharePoint 的计时器作业,并发现管理这些作业非常不方便。所以我开始实现一套命令,并想与您分享。如果开发了新命令,我会更新此集合。

Commands

GetJobInfo

显示有关特定计时器作业的信息。

Screenshot - stsadmcommands1.jpg
GetJobInfo 命令的帮助。

Screenshot - stsadmcommands2.jpg
GetJobInfo 命令的输出。

我认为获取下一次发生的范围很有用。此外,我使用此命令来验证我对作业定义所做的更改。

GetJobInfos

GetJobInfo 命令类似,但显示所有可用计时器作业的信息。

Screenshot - stsadmcommands3.jpg
GetJobInfos 命令的帮助。

有了这些信息,您可以获取 GetJobInfo 命令所需的计时器作业的名称。

RunTimerJob

立即执行指定的计时器作业。

Screenshot - stsadmcommands4.jpg
RunTimerJob 命令的帮助。

要测试作业在您需要时(When YOU need it)的功能,您现在可以简单地执行一个计时器作业。通过这种方式,您可以在测试/实时服务器上执行一个作业,即使它被配置为每日计划。这正是我目前项目中所做的。在我的开发机器上,我设置了分钟级计划,而在实时服务器上,需要有一个每日计划。据我所知,设置作业执行时间的唯一地方是一个具有重写的 FeatureActivating/FeatureDeactivating 方法的特性(FeatureReceiver 链接)。对于开发和测试机器来说,在代码中更改此设置并重新部署程序集是很不方便的。这也可以通过下一个命令完成。

SetJobSchedule

设置指定作业的计划。

Screenshot - stsadmcommands5.jpg
SetJobSchedule 命令的帮助。

使用此命令,您可以更改作业执行的时间。对于从开发到生产的更改以及反之亦然非常方便。看看我在前面的命令中提到的。

提示:无法将 OneTimeSchedule 更改为其他类型的计划。

建议/优化

如果适用,请使用资源文件翻译错误/提示消息。

虽然可能,但不要在一个类中实现多于一个命令的功能。您可以在 Run 方法中获得传递的命令,因此您可以使用 switch 语句。按类名查找命令更容易。我也将类命名为与命令名称相同。这样也更容易编写文档。

我此时不知道 run 方法的 int 返回参数的处理方式。也许它是您可以在批处理模式下使用的退出代码。如果是这样,也应该记录下来。如果有人知道这方面的行为,请告诉我。

当我开发新命令时(并且我可以发布它们),我将更新此“命令集”。

如果您喜欢这些信息,并且可能觉得这些命令很有用,甚至更好的是如果您能使用它们,请告诉我。

© . All rights reserved.