我需要一个脚本,它可以删除所有早于一天的文件,并且需要每天在 Sharepoint 服务器中自动调用此脚本。我该如何做到这一点以及如何编写脚本的任何提示?
4 回答
我认为更简单的方法是创建一个过期的网站集策略。将保留期设置为一天。然后,您可以将处置工作流程附加到用于清理这些文件的列表中。您应该能够在不编写任何代码的情况下完成所有这些工作。
这是一个链接,其中包含有关处置工作流程的更多信息。 http://office.microsoft.com/en-us/sharepointserver/HA101544291033.aspx
谢谢,科里
如果您确实需要脚本而不是编写代码(例如计时器作业),请使用Powershell通过脚本引擎访问 SharePoint .NET 对象。编写脚本后,设置 Windows 计划任务以每天运行它。
在脚本中遵循Lars关于使用这两个查询类之一的指导。然后从查询结果中,您可以获得对要删除的每个 SPListItem 的引用。使用SPListItem.Delete或SPListItem.Recycle删除项目。
下面是一个使用 SPQuery 的示例:
[System.Reflection.Assembly]::Load("Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c")
$site = new-object Microsoft.SharePoint.SPSite("http://yoursite/")
$web = $site.OpenWeb("Web Title")
$documentLibrary = $web.Lists["Document Library Name"]
$yesterdaysDate = [Microsoft.SharePoint.Utilities.SPUtility]::CreateISO8601DateTimeFromSystemDateTime([System.DateTime]::UtcNow.AddDays(-1.0))
$query = new-object Microsoft.SharePoint.SPQuery
$query.ViewFields = "<FieldRef Name='Modified' />"
$query.Query = "<Where><Leq><FieldRef Name='Modified' /><Value Type='DateTime' IncludeTimeValue='TRUE'>" + $yesterdaysDate + "</Value></Leq></Where>"
$queryItems = $documentLibrary.GetItems($query)
foreach ($item in $queryItems)
{
echo $item.Url
$item.Delete()
}
$web.Dispose()
$site.Dispose()
您可以使用 .NET 和WSS API在 SharePoint 中创建自定义计时器作业来完成这项工作。使用SPQuery类在文档库中按日期查询文件。如果您需要跨多个文档库进行查询,请使用SPSiteDataQuery类。
这是仅删除 SharePoint 网站上超过一天的文件的 C# 代码,要每天运行它,您需要创建 SharePoint 计时器作业并在计时器作业的执行方法中添加以下代码。
SPSite spSite = new SPSite("http://YourSiteUrl");
SPWeb oWebsite = spSite.OpenWeb();
SPListCollection collLists = oWebsite.Lists;
foreach (SPList oList in collLists)
{
if (oList.BaseType == SPBaseType.DocumentLibrary)
{
SPDocumentLibrary oDocumentLibrary = (SPDocumentLibrary)oList;
if (!oDocumentLibrary.IsCatalog && oList.BaseTemplate != SPListTemplateType.XMLForm)
{
SPListItemCollection collListItems = oDocumentLibrary.Items;
foreach (SPListItem oListItem in collListItems)
{
if (oListItem.File != null)
{
if ((DateTime.Now - oListItem.File.TimeCreated).TotalDays > 1)
{
oListItem.Delet();
}
}
}
}
}
}