我需要一个可以删除所有超过一天的文件的脚本,并且需要每天在Sharepoint服务器中自动调用此脚本。 我该怎么做以及如何编写脚本的任何提示?
答案 0 :(得分:3)
我认为更简单的方法是创建一个过期的网站集策略。将保留期限设置为一天。然后,您可以将处置工作流附加到列表中,该列表可用于清理这些文件。您应该能够在不编写任何代码的情况下完成所有这些操作。
这是一个链接,其中包含有关处置工作流程的更多信息。 http://office.microsoft.com/en-us/sharepointserver/HA101544291033.aspx
谢谢, 科里
答案 1 :(得分:1)
如果您确实需要脚本而不是编写代码(例如计时器作业),请使用Powershell通过脚本引擎访问SharePoint .NET对象。编写脚本后,设置Windows计划任务以每天运行它。
在脚本中关注使用这两个查询类之一的Lars' guidance。然后,从查询结果中,您可以获取对要删除的每个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()
答案 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();
}
}
}
}
}
}