воскресенье, 15 ноября 2015 г.

Удаление промежуточных версий файлов через PowerShell

Согласно документации MS количество промежуточных версий у списка/библиотеки должно быть не более 511, но я заметил что когда работаешь с файлом через WebDav, то не учитывается лимит который установлен в списке/библиотеки.

Т.е. к примеру когда я редактирую файл через Блокнот, то у меня плодятся промежуточные версии без ограничений.
То же с редактированием  файлов в локальных приложения офиса к примеру Word.



В общем написал скрипт, который пробегает по всем элементам списка/библиотеки и подрезает все промежуточные версии больше указанного количества.

cls
$limitDraftVer = 10 # указать лимит промежуточных версий
$countDelVer = 0
$web = Get-SPWeb http://site/
$list = $web.Lists['StyleLibrary']
$items = $list.Items
foreach($item in $items)
{
    #if($item.Id -eq 113)
   # {
        $myItem = $item        
        $countVer = 0        
        for( $i = 0; $i -le $myItem.Versions.Count; $i++ )
        {    
            $ver = $myItem.Versions[$i]
            if($ver.Level -eq 'Draft' )
            {
                $countVer ++ 
                if($countVer -ge $limitDraftVer)
                {
                    $ver.Delete()
                    $countDelVer ++
                    $i--
            
                }
            }

        }
    #}
}
$web.Dispose()
$countDelVer



На выходе получаем всего 10 промежуточных версий, не зависимо от количества основных.

P.S. в коде закомментирован блок позволяющий подрезать версию только у одного элемента/документа, нужно разкомментировать и указать требуемый ID.