Deleting a list item with PowerShell is pretty easy also
If you know or can find out the ID of the list item use the GetItemById method of the list itself
[void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") # Delete an item from the announcements list by Item ID $site = new-object Microsoft.SharePoint.SPSite("http://teams.contoso.com") $web = $site.rootweb $list = $web.Lists["Announcements"] $deaditem= $list.GetItemById(2) $deaditem.Delete() $web.Dispose() $site.Dispose()
# Delete an item from the announcements list by using a CAML query [void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") $site = new-object Microsoft.SharePoint.SPSite("http://teams.contoso.com") $web = $site.rootweb $list = $web.Lists["Announcements"] $DeleteBeforeDate = [Microsoft.SharePoint.Utilities.SPUtility]::CreateISO8601DateTimeFromSystemDateTime([DateTime]::Now.AddDays(-1)) $caml=' <Where> <Lt> <FieldRef Name="Expires" /> <Value Type="DateTime">{0}</Value> </Lt> </Where> ' -f $DeleteBeforeDate $query=new-object Microsoft.SharePoint.SPQuery $query.Query=$caml $col=$list.GetItems($query) # Pipe results to a loop and delete each element $col | % { $_.Delete() } $web.Dispose() $site.Dispose()
# Delete an item from the announcements list by using a CAML query [void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") $site = new-object Microsoft.SharePoint.SPSite("http://teams.contoso.com") $web = $site.rootweb $list = $web.Lists["Announcements"]
$DeleteBeforeDate = [Microsoft.SharePoint.Utilities.SPUtility]::CreateISO8601DateTimeFromSystemDateTime([DateTime]::Now.AddDays(-1)) $caml=' <Where> <Lt> <FieldRef Name="Expires" /> <Value Type="DateTime">{0}</Value> </Lt> </Where> ' -f $DeleteBeforeDate $query=new-object Microsoft.SharePoint.SPQuery $query.Query=$caml $col=$list.GetItems($query) # Pipe results to a loop and delete each element $col | % { $_.Delete() } $web.Dispose() $site.Dispose()
Be very careful with this as a badly formed CAML query will return ALL the items in a list thus deleting all items in the list, use a line like $col | select Title instead of the delete to double check the results before you run the function. Using the invaluable CAML Builder utility from U2U for these queries is a good idea, just remember to remove the <Query> tags from the result.
The third way is to use some of Powershell's powerful string matching feature. This article gives a simple overview of the like and match commands in Powershell
Using like or match we could compare any field in a list and delete on that basis.
For instance lets say we need to delete all Announcements that had CEO in the title. This sample does that
[void][System.reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") # Delete announcements that match a string pattern $site = new-object Microsoft.SharePoint.SPSite("http://teams.contoso.com") $web = $site.rootweb $list = $web.Lists["Announcements"] $list.get_items() | where { $_.Title -like '*CEO*' } | % { $_.Delete() } $web.Dispose() $site.Dispose()
Note the get_items() syntax as PowerShell has a problem with Items as a property so we have to use the assessor directly.
Powered by: newtelligence dasBlog 2.0.7226.0
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
© Copyright 2008, Colin Byrne
E-mail