none
Déplacement Wiki OnPrem --> Online - Batch edit RRS feed

  • Question

  • Bonjour,

    Nous sommes en cours de migration de notre SharePoint OnPrem vers SharePoint Online.

    Notre SharePoint OnPrem était initialement un seul site avec toutes les bibliothèques à l'intérieur. L'objectif de la migration en ligne est de créer un site par équipe afin de faciliter la gestion.

    Je déplace donc une bibliothèque de pages Wiki depuis un site racine vers un sous-site.

    J'ai utilisé l'excellent outil SP Migrator de MessageOps qui bien que plus supporté selon leur site, a très bien fonctionné.

    Néanmoins, toutes les images sont brisées étant donné que les liens pointent vers la racine du site.

    Je souhaite donc trouver un moyen d'éditer toutes les pages de ma Wiki afin de remplacer les liens images qui pointent à la racine par d'autres qui pointent sur un dossier relatif au sous-site.

    J'ai trouvé de nombreux sites qui en parlent, et ai commencé à utiliser CSOM en PowerShell.

    Je suis bloqué lors de l'itération sur les pages de la Wiki, et de la récupération de leur contenu pour la recherche/remplacement

    Voici mon code :

    Je suis déjà authentifié sur le bon site, je récupère la Wiki, je liste tous les items.

    $list = $clientContext.Web.Lists.GetByTitle("Wiki Technique")
    
    $query = [Microsoft.SharePoint.Client.CamlQuery]::CreateAllItemsQuery()
    $items = $list.GetItems( $query )
    
    $clientContext.Load($list)
    $clientContext.Load($items) 
    #execute query 
    $clientContext.ExecuteQuery()
    
    foreach($item in $items)
    {
    	$name = $item.DisplayName
    	Write-Host "Page : $name"
    }

    La boucle n'affiche aucun nom de page, les items sont donc bien listés, mais il semble que je ne peux pas accéder à leurs propriétés. Je ne trouve pas non plus de propriété traitant du contenu de la page.

    Merci.


    R.

    mardi 11 novembre 2014 09:37

Réponses

Toutes les réponses

  •   Bonjour,

    Essayez plutôt ceci (A adapter en cas de sous-répertoires):

    $rootFiles = $list.RootFolder.Files
    $clientContext.Load($rootFiles)
    $clientContext.ExecuteQuery()
    
    foreach ($file in $rootFiles)
    {
    	Write-Host $file.Name;
    	Write-Host $file.Title;
    }


    My technical blog on SharePoint || My contributions on the TechNet Gallery


    mercredi 12 novembre 2014 11:20
    Modérateur
  •   Bonjour,

    Essayez plutôt ceci (A adapter en cas de sous-répertoires):

    $rootFiles = $list.RootFolder.Files
    $clientContext.Load($rootFiles)
    $clientContext.ExecuteQuery()
    
    foreach ($file in $rootFiles)
    {
    	Write-Host $file.Name;
    	Write-Host $file.Title;
    }


    My technical blog on SharePoint || My contributions on the TechNet Gallery


    Bonjour,

    Ca fonctionne très bien pour itérer sur les documents.

    Sauriez-vous comment je peux récupérer le contenu de ces items afin de faire un search/replace dessus svp ?

    Merci.


    R.

    mardi 18 novembre 2014 08:42
  • Bonjour,

    Dans l'idée, il faut coupler la commande Get-Content avec la commande du replace.

    (Il y a pas mal d'exemples disponibles en ligne).

    Pour tester, perso je:

    • Récupérerais le doc en local
    • get-content+replace > nouveau fichier
    • Uploaderais le nouveau fichier


    My technical blog on SharePoint || My contributions on the TechNet Gallery


    mercredi 19 novembre 2014 17:01
    Modérateur
  • Bonjour et merci pour votre aide.

    Je trouve effectivement beaucoup de litérature, mais en majorité pour du SharePoint 2010 vraissemblablement OnPrem, et j'ai beau essayer de multiples méthodes pour télécharger ces fichier, impossible.

    Le plus proche que j'ai trouvé est :

    Write-Host $file.Name;
    	
    	$binary = $file.OpenBinary()
        $stream = New-Object System.IO.FileStream($destinationfolder + "/" + $file.Name), Create
    	$writer = New-Object System.IO.BinaryWriter($stream)
    	$writer.Write($binary)
        $writer.Close()

    Mais $file.OpenBinary n'existe pas, donc plantage au $writer.write.

    Il y a une méthode OpenBinaryStream, mais elle ne convient pas non plus, les fichiers téléchargés sont illisibles...

    Auriez-vous un lien vers des exemples adaptés à SharePoint Online svp ?

    Merci.


    R.

    jeudi 20 novembre 2014 17:30
  • J'ai modifié ma boucle comme ceci :

    $fileName = $file.Name
    	$fileRelativeURL = $file.get_ServerRelativeUrl();
    			
    	[Microsoft.SharePoint.Client.FileInformation] $fileInfo = [Microsoft.SharePoint.Client.File]::OpenBinaryDirect($clientContext,$fileRelativeURL);
    	
    	$target = "$destinationfolder"+"\"+"$fileName"
    	
    	Write-Host "Downloading $fileName to $target"
    	
        [System.IO.FileStream] $writeStream = [System.IO.File]::Open($target,[System.IO.FileMode]::Create);
    
    	$fileInfo.Stream.CopyTo($writeStream);
    	$writeStream.Close();

    Tous les fichiers récupérés font 4Ko et contiennent tous la même chose : des placeholder aspx.


    R.

    lundi 24 novembre 2014 14:33