SharePoint

Usuwanie elementów listy SharePoint za pomocą PowerShell

Kolejną ciekawą alternatywą dla ręcznego usuwania elementów listy poprzez wyklikiwanie, jest zrobienie tego za pomocą skryptu PowerShell.

Możemy wykorzystać skrypt np. w momencie gdy chcemy usunąć elementy starsze niż bieżący rok. Poniżej sposób:

[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") 
$site = new-object Microsoft.SharePoint.SPSite("http://nazwa_serwera")
$relweburl = "/nazwa_podwitryny"
$web = $site.openweb($relweburl)
$list = $web.Lists["nazwa_listy"]                                                                       
$caml='<Where>
        <Leq>
            <FieldRef Name="Modified" />
            <Value IncludeTimeValue="TRUE" Type="DateTime">2018-12-31T02:32:20Z</Value>
        </Leq>
    </Where>'
$query=new-object Microsoft.SharePoint.SPQuery 
$query.Query=$caml | Write-Output
$items=$list.GetItems($query) 
$listItemsTotal = $items.Count;
for($x=$listItemsTotal-1;$x -ge 0; $x--)
{
      Write-Host("DELETED: " + $listItems[$x]["Modified"])
      $items[$x].Delete()  
    }
$web.Dispose() 
$site.Dispose() 

Niestety powyższy skrypt działa wolno. Ten jest znacznie wydajniejszy:

Add-PSSnapin Microsoft.SharePoint.PowerShell
 
[System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint")
$web = Get-SPWeb "YOUR SHAREPOINT SITE"
$list = $web.Lists["YOUR LIST NAME"]
$DeleteBeforeDate = [Microsoft.SharePoint.Utilities.SPUtility]::CreateISO8601DateTimeFromSystemDateTime([DateTime]::Now.AddDays(-7))
$caml='<Where> <Lt> <FieldRef Name="Created" /><Value Type="DateTime">{0}</Value> </Lt> </Where> ' -f $DeleteBeforeDate
$query=new-object Microsoft.SharePoint.SPQuery
$query.Query=$caml
$col=$list.GetItems($query)
Write-Host $col.Count
$col | % {$list.GetItemById($_.Id).Delete()}
$web.Dispose()

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *