Neulich kam ein Administrator mit einem Problem zu mir: Er hatte ein PowerShell Skript geschrieben, dass alle Einträge einer Liste durchgeht und dabei ein Feld ändert. Dies sorgte aber dafür, dass

  1. eine neue Version erstellt wurde
  2. die Felder “Geändert” und “Geändert von” angepasst wurden.

Beides wollte er vermeiden. Für Systemänderungen bietet das Object Model bereits gute Möglichkeiten die alternativ zur SPListItem.Update() Methode aufgerufen werden.

SPListItem.UpdateOverrideVersion übernimmt die Änderungen ohne eine neue Version des Listenelements zu erstellen.

SPListItem.SystemUpdate übernimmt die Änderungen ohne die Felder “Geändert” und “Geändert von” zu setzen, außerdem kann durch einen Parameter übergeben werden, ob die Versionsnummer hochgezählt wird.

Eine mögliche Lösung für das gegebene Problem wäre also (hier beispielhaft das setzen des Titels als Änderung):

$web = Get-SPWeb http://meinsharepoint/
$list = $web.Lists["Freigegebene Dokumente"]
foreach($item in $list.Items)
{
    $item["Title"] = ("Mein Name ist " + $item.Name)
    $item.SystemUpdate($false)
}

In diesem Zusammenhang werde ich auch öfter gefragt, wie die Felder “Erstellt”, “Erstellt von”, “Geändert” und “Geändert von” gesetzt werden können. Diese Felder haben intern andere Namen als man erwartet:

$item["Created"]  # Erstellt
$item["Author"]   # Erstellt von
$item["Modified"] # Geändert
$item["Editor"]   # Geändert von

Hierbei ist zu beachten, dass die Felder “Author” und “Editor” nicht vom Typ SPUser sondern vom Typ SPFieldUserValue sind, beim Setzen muss also ein Objekt dieser Klasse angelegt werden.

Leave a comment

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Time limit is exhausted. Please reload the CAPTCHA.