用于删除Sharepoint文档库中超过一天的文件的脚本

时间:2009-02-06 06:59:18

标签: sharepoint document-library

我需要一个可以删除所有超过一天的文件的脚本,并且需要每天在Sharepoint服务器中自动调用此脚本。 我该怎么做以及如何编写脚本的任何提示?

4 个答案:

答案 0 :(得分:3)

我认为更简单的方法是创建一个过期的网站集策略。将保留期限设置为一天。然后,您可以将处置工作流附加到列表中,该列表可用于清理这些文件。您应该能够在不编写任何代码的情况下完成所有这些操作。

这是一个链接,其中包含有关处置工作流程的更多信息。 http://office.microsoft.com/en-us/sharepointserver/HA101544291033.aspx

谢谢, 科里

答案 1 :(得分:1)

如果您确实需要脚本而不是编写代码(例如计时器作业),请使用Powershell通过脚本引擎访问SharePoint .NET对象。编写脚本后,设置Windows计划任务以每天运行它。

在脚本中关注使用这两个查询类之一的Lars' guidance。然后,从查询结果中,您可以获取对要删除的每个SPListItem的引用。使用SPListItem.DeleteSPListItem.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()

答案 2 :(得分:0)

您可以使用.NET和custom timer job在SharePoint中创建WSS API来完成工作。使用SPQuery类在文档库中按日期查询文件。如果需要跨多个文档库进行查询,请使用SPSiteDataQuery类。

答案 3 :(得分:0)

以下是C#代码,只删除SharePoint网站上超过一天的文件,每天运行此操作,您需要创建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();

                                }


                            }



                      }
                    }
                }
            }