Aggiornare campi publishing images con Powershell

Di recente ho avuto l’esigenza di aggiornare tutti i valori di un campo di tipo “publishing images“. Anche se non si trattava di un numero esagerato di immagini ho provato a cercare un alternativa, trovo che l’update di questi campi da UI sia infatti molto “noioso”. L’alternativa è ovviamente Powershell🙂.

Ho scoperto che bastano verametne poche righe per completare l’operazione e, soprattutto, lo stesso script contiene tanti spunti utili in molti altri scenari.

Ma veniamo al dunque. Cominciamo a memorizzare nelle “solite” variabili gli oggetti site collection e web.

$spSite = Get-SPSite http://sharepoint
$spWeb = $spSite.RootWeb

Tocca ora all’elenco che contiene le immagini da aggiornare.

$spList = $spWeb.Lists[“Links”]

A questo punto, facendo un ciclo su tutti gli elementi dell’elenco, memorizziamo nella variabile $image il campo PublishingPageImage. Trattandosi di un tipo di dato “complesso” la nostra variabile avrà diverse proprietà. Una di queste è ImageUrl che contiene le informazioni relative al path dell’immagine.

Nel mio caso l’aggiornamento prevedeva il campio di origine dell’immagine mentre il nome del file doveva rimanere invariato. Di conseguenza ho aggiornato la proprietà ImageUrl sostituendo il vecchio path con quello corretto. Per questa operazione ho utilizzato l’operatore replace.

In un primo momento pensavo che questo, seguito solo dal comando $listitem.Update(), bastasse per aggiornare le mie immagini, ma mi sbagliavo. A questo punto abbiamo aggiornato solo una proprietà dell’oggetto ed è quindi necessario reimpostare correttamente il valore del nostro campo. Il codice di esempio della pagina su MSDN mi è stata molto utile per capire questo passaggio.

foreach($listitem in $spList.Items){
$image = $listitem[“PublishingPageImage”]
$image.ImageUrl = $image.ImageUrl -replace “/SiteAssets/”, “/SiteCollectionImages/”
$listitem[“PublishingPageImage”] = $image;
$listitem.Update()
}

Alla fine dello script rilasciamo l’oggetto “web” e abbiamo finito.

$spWeb.Dispose()

Potete scaricare lo script qui.

Happy Posh
– Riccardo



Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...