Mettre à jour les métadonnées un élément à la fois est extrêmement lent et atteint les limites de limitation. Utilisez les capacités de traitement par lots de PnP PowerShell pour traiter des centaines d'éléments efficacement.
Tout d'abord, préparez vos données au format CSV avec ces colonnes :
ServerRelativeUrl,ProjectID,Department,Status
/sites/yoursite/Shared Documents/Project1/doc1.docx,PRJ001,Engineering,Active
/sites/yoursite/Shared Documents/Project1/doc2.docx,PRJ001,Engineering,Complete
/sites/yoursite/Shared Documents/Project2/doc3.docx,PRJ002,Marketing,Active
Exécutez ce script de mise à jour par lots optimisé :
# Mise à jour en masse des métadonnées avec traitement par lots et gestion des erreurs
$csvPath = "C:\temp\metadata_updates.csv"
$libraryName = "Documents"
$batchSize = 100
# Initialiser les compteurs
$totalProcessed = 0
$errors = @()
# Créer le lot initial
$batch = New-PnPBatch
# Traiter le fichier CSV
Import-Csv $csvPath | ForEach-Object {
try {
# Obtenir l'élément de liste à partir de l'URL du fichier
$listItem = Get-PnPFile -Url $_.ServerRelativeUrl -AsListItem -ErrorAction Stop
# Préparer les valeurs de métadonnées
$values = @{}
if ($_.ProjectID) { $values["ProjectID"] = $_.ProjectID }
if ($_.Department) { $values["Department"] = $_.Department }
if ($_.Status) { $values["DocumentStatus"] = $_.Status }
# Ajouter au lot
Set-PnPListItem -List $libraryName -Identity $listItem.Id -Values $values -Batch $batch
# Exécuter le lot lorsqu'il atteint la limite de taille
if ($batch.Operations.Count -ge $batchSize) {
Write-Host "Exécution du lot de $($batch.Operations.Count) opérations..."
Invoke-PnPBatch $batch
$totalProcessed += $batch.Operations.Count
$batch = New-PnPBatch
Start-Sleep -Seconds 1 # Pause brève pour éviter la limitation
}
}
catch {
$errors += "Erreur lors du traitement de $($_.ServerRelativeUrl): $($_.Exception.Message)"
}
}
# Exécuter les éléments restants dans le dernier lot
if ($batch.Operations.Count -gt 0) {
Write-Host "Exécution du dernier lot de $($batch.Operations.Count) opérations..."
Invoke-PnPBatch $batch
$totalProcessed += $batch.Operations.Count
}
Write-Host "Total des éléments traités : $totalProcessed"
if ($errors.Count -gt 0) {
Write-Host "Erreurs rencontrées :"
$errors | ForEach-Object { Write-Host $_ -ForegroundColor Red }
}
Vérification : Vérifiez quelques documents mis à jour dans SharePoint pour confirmer que les métadonnées ont été appliquées. Surveillez la sortie du script pour toute erreur ou message de limitation.
Astuce pro : Pour les bibliothèques de plus de 100 000 éléments, divisez votre CSV en morceaux de 5 000 à 10 000 lignes et traitez-les séparément pour éviter les problèmes de mémoire.