In dem heutigen Blogeintrag geht es um das Verschieben von Listen-Elementen und Dokumenten in Ordner. Das Beispiel-Szenario bildet sich folgendermaßen ab:
Es gibt eine Liste / Bibliothek mit der Spalte „Kundennummer“. Die Elemente sollen nun in Ordnern organisiert werden. Dazu soll für jede vorhandene Kundennummer ein Ordner in der jeweiligen Liste / Bibliothek erstellt und das Element / Dokument in diesen Ordner verschoben werden.
Das folgende PowerShell-Skript wird dafür ausgeführt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
Add-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue; # Konfiguration $webUrl = "http://mein-sharepoint/sites/MeineSeite"; $folderFieldName = "Kundennummer"; $listName = "Projekte"; # Liste holen und Ordnererstellung aktivieren $web = Get-SPWeb $webUrl; $list = $web.Lists[$listName]; $list.EnableFolderCreation = $true; $list.Update(); $listItems = $list.Items; $listItemCount = $listItems.Count; # Jedes Listenelement durchlaufen for($i = $listItemCount - 1; $i -ge 0; $i--) { $listItem = $listItems[$i]; $listItemId = $listItem["ID"]; # Prüfen, ob das Element noch in keinem Ordner ist $rootFolderPath = $list.RootFolder.ServerRelativeUrl; if($rootFolderPath -eq $listItem["FileDirRef"]) { # Den Ordnernamen ermitteln anhand der Kundennummer $folderName = $listItem[$folderFieldName]; if($folderName) { $folderUrl = $list.RootFolder.Url + "/" + $folderName; $folder = $list.ParentWeb.GetFolder($folderUrl); # Ordner erstellen, falls dieser noch nicht existiert if(!$folder.Exists) { $folder = $list.AddItem("", [Microsoft.SharePoint.SPFileSystemObjectType]::Folder, $folderName); $folder["Title"] = $folderName; $folder.Update(); } # Elemente verschieben switch($list.BaseTemplate) { "DocumentLibrary" { $fileName = $listItem.File.Name; $moveToLocation = $folderUrl + "/" + $fileName; $listItem.File.MoveTo($moveToLocation); } "GenericList" { $moveToLocation = $folderUrl + "/" + $listItemId + "_.000"; $web.GetFile($listItem.Url).MoveTo($moveToLocation); } } } } } |
Nachdem das Skript ausgeführt wurde, befinden sich die Elemente in Ordnern: