SharePoint Listen mit PowerShell leeren

Im Beitrag “SharePoint Beispieldaten mit PowerShell erstellen” habe ich gezeigt, wie man sehr einfach per PowerShell Beispieldaten in SharePoint Listen erzeugen kann.

Wenn ich automatisch viele Listelemente erzeuge, möchte ich Sie vielleicht auch irgendwann wieder löschen.

Dazu mal ein erster Ansatz:

Add-PSSnapin Microsoft.SharePoint.PowerShell

cls

$list = (get-spweb http://hamburg/).Lists[„Meine Liste“]

foreach($item in $list.Items)

{

$item.delete()

}

Das funktioniert leider nicht, zumindest bekomme ich die folgende Meldung:

“Collection was modified; enumeration operation may not execute.”

Meine Sammlung “$list.Items” kann ich nicht während des Schleifendurchlaufs modifizieren. Daher muss ich mein Script etwas anpassen und für das Löschen in der Schleife folgenden Code verwenden:

$list.GetItemById($item.Id).Delete()

Ich hole mir also direkt aus der Liste das Element anhand der Id des aktuellen $item im Schleifendurchlauf.

Das funktioniert, finde ich aber noch etwas uncool, denn richtig cool wird’s wenn man es mit einer Zeile hinbekommt:

(get-spweb http://hamburg/).Lists[„Meine Liste“].Items | %{$_.ParentList.GetItemById($_.Id).Delete()}

Das Script funktioniert genauso wie das Script weiter oben.

Ich hole mir alle Items aus “Meine Liste” im Rootweb meines Servers. Die ItemCollection gebe ich dann per | weiter und verarbeite jedes Element (das % ist ein Alias für ForEach-Object) in einer Schleife und lösche es wie bereits oben gezeigt. Das “$_.” steht dabei für das aktuelle Element in der Schleife

https://gist.github.com/buettiB/a5ef7aeb1830b17e7ecd89bda64c5a06

Wenn ich nun nicht alle Elemente löschen möchte, kann ich mir vorher die relevanten Elemente per CAML Query Filtern (z.B. nur diese wo die Auswahl = “Drei” ist).

https://gist.github.com/buettiB/03d601280e287910a847810d68251ec3

Die CAML Abfrage wird in Zeile 3 definiert. In Zeile 4 wird das SPQuery Objekt erzeugt und in Zeile 6 wird die Abfrage auf “Meine Liste” angewendet.

Leave a Comment

Your email address will not be published. Required fields are marked *