4

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

4

4 回答 4

3

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

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

谢谢,科里

于 2009-02-20T17:04:50.950 回答
1

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

在脚本中遵循Lars关于使用这两个查询类之一的指导。然后从查询结果中,您可以获得对要删除的每个 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()
于 2009-02-20T15:48:29.090 回答
0

您可以使用 .NET 和WSS API在 SharePoint 中创建自定义计时器作业来完成这项工作。使用SPQuery类在文档库中按日期查询文件。如果您需要跨多个文档库进行查询,请使用SPSiteDataQuery类。

于 2009-02-06T12:38:30.013 回答
0

这是仅删除 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();

                                }


                            }



                      }
                    }
                }
            }
于 2015-05-12T10:56:41.843 回答