2017-03-24 1 views
0

Je suis en train de copier la structure du dossier d'une bibliothèque de documents à l'autre,Impossible de créer la hiérarchie SPFolder. .update() continue de lancer exception

Cela échoue toujours à l'exception:

Mise à jour: appel d'exception « Mise à jour » avec " 0 "argument (s):" Dieser Vorgang kann nur für eine Datei ausgeführt werden Bei "http://machine/CopyTest2/EUR/Germany" handel es sich um einen Ordner. "

traduction libre:

Mise à jour: Exception appelant "Mise à jour" avec l'argument "0" (s): "Cette action ne peut être invoqué pour un fichier." http://machine/CopyTest2/EUR/Germany "est un dossier. "

C'est le code que je suis actuellement en utilisant:

foreach ($Folder in $AllFolders) { 
    $ParentFolderURL = "" 
    $i = 1 #Set 1 so we ignore the first part of the url, which is the library name. we only want the folders 
    $FolderURL = $Folder.url.Split("/") 

    while ($i -lt ($FolderURL.count - 1)) { 
     $ParentFolderURL = "$ParentFolderURL/" + $FolderURL[$i] 
     $i++ 
    } 
    # Targetfolder is now http://server/copytest1/EUR 
    $targetFolderUrl = "$($DestinationWebURL)/$($dList.Title)$($ParentFolderURL)" 
    #check if the folder exists by querying web.GetFolder($targetFolderUrl) and check if it is null or not 

    if (!($dWeb.GetFolder($targetFolderUrl)).Exists) { 
     $NewFolder = $dlist.Folders.Add($targetFolderUrl, [Microsoft.SharePoint.SPFileSystemObjectType]::Folder, $Folder.Name) 
     $NewFolder["Title"] = $Folder.Name 
     $NewFolder.Update() 
    } 
    else { 
     #If the folder already exists, retrieve the folder where the file will be created 
     $NewFolder = $dList.Folders | Where-Object {$_.name -eq $Folder.Name} 
    } 
    #... 
} 

Je suis assez sûr que la ligne défectueuse est $NewFolder = $dlist.Folders.Add($targetFolderUrl, [Microsoft.SharePoint.SPFileSystemObjectType]::Folder, $Folder.Name) mais je ne peux pas comprendre ce que la valeur correcte pour l'URL relative devrait être.

Alternatives Je l'ai essayé, où une combinaison de urls relatives:

$NewFolder = $dlist.Folders.Add("/$($dList.Title)$($ParentFolderURL)", [Microsoft.SharePoint.SPFileSystemObjectType]::Folder, $Folder.Name) 
$NewFolder = $dlist.Folders.Add($ParentFolderURL, [Microsoft.SharePoint.SPFileSystemObjectType]::Folder, $Folder.Name) 

Mais aucun ne travail.

Répondre

1

Très bien. Comme toujours: PEBCAK

$targetFolderUrl pointait vers la liste elle-même si le $ParentFolderUrl était vide. De plus, le nom du dossier lui-même était manquant. La mauvaise logique est tombée en cascade.

$targetFolderUrl = "$($DestinationWebURL)/$($dList.Title)$($ParentFolderURL)/$($Folder.Name)" 

Comme indiqué dans ma question, le paramètre RelativeUrl était faux aussi bien:

$NewFolder = $dlist.Folders.Add("/$($dList.Title)$ParentFolderURL", [Microsoft.SharePoint.SPFileSystemObjectType]::Folder, $Folder.Name) 

Ces 2 modifications rectifiées les erreurs et mes la hiérarchie complète est maintenant créé presque instantanément.