Скрипт для удаления файлов старше одного дня в библиотеке документов Sharepoint - PullRequest
4 голосов
/ 06 февраля 2009

Мне нужен скрипт, который может удалить все файлы старше одного дня, и этот скрипт нужно запускать каждый день автоматически на сервере Sharepoint. Как я могу сделать это и любые подсказки, как написать сценарий?

Ответы [ 4 ]

3 голосов
/ 20 февраля 2009

Я думаю, что проще было бы создать политику семейства сайтов с истечением срока действия. Установите срок хранения на один день. Затем вы можете прикрепить рабочий процесс удаления к вашему списку, который будет использоваться для очистки этих файлов. Вы должны быть в состоянии сделать все это без написания кода.

Вот ссылка с дополнительной информацией о рабочем процессе утилизации. http://office.microsoft.com/en-us/sharepointserver/HA101544291033.aspx

Спасибо, Corey

1 голос
/ 20 февраля 2009

Если вам действительно нужен сценарий, а не написание кода (например, задания таймера), используйте Powershell для доступа к объектам SharePoint .NET с помощью механизма сценариев. После того, как вы написали сценарий, настройте запланированное задание Windows для его ежедневного запуска.

В скрипте следуйте указаниям Ларса по использованию одного из этих двух классов запросов. Затем из результатов запроса вы можете получить ссылку на каждый 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()
0 голосов
/ 12 мая 2015

Вот код 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();

                                }


                            }



                      }
                    }
                }
            }
0 голосов
/ 06 февраля 2009

Вы можете создать настраиваемое задание таймера в SharePoint, используя .NET и WSS API для выполнения этой работы. Используйте класс SPQuery для запроса файлов по дате в библиотеке документов. Используйте класс SPSiteDataQuery , если вам нужно выполнять запросы к нескольким библиотекам документов.

...