Elemente und Dokumente in Ordner verschieben

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:

Leave a Comment

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