Modificare List View con PowerShell

Qualche giorno fa Barbara (collega, amica e sp-musa in Green Team) mi ha posto una domanda a cui, li per li, non ho saputo rispondere. La domanda era (più o meno) questa: devo effettuare una modifica alla vista di default di un totale di circa 120 document library suddivise in una dozzina di site collection, posso farlo con PowerShell, vero?

La mia risposta è stata abbastanza inutile. Si, si può fare, ma non avendolo mai fatto prima dovrei documentarmi un pò prima di esserti utile.

In realtà le operazioni necessarie sono molto semplici. Come prima cosa dobbiamo memorizzare in una variabile il web che contiene la lista.

$web = Get-SPWeb http://intranet

In altre due variabili, $list e $view, memorizziamo quindi gli oggetti lista e vista. In entrambi i casi utilizzeremo due metodi dell’oggetto web: GetList e GetViewFromUrl.

$list = $web.GetList(“/Shared Documents”)

$view = $web.GetViewFromUrl(“/Shared Documents/Forms/AllItems.aspx”)

Arrivati a questo punto dovremo richiamare l’istanza del campo da aggiungere nella visualizzazione, memorizzando anche in questo caso in una variabile. Nell’esempio seguente Amount è il nome del mio campo.

$amount = $list.Fields[“Amount”]

Se volessi aggiungere più di un campo mi basterebbe duplicare quest’ultima riga per tutti i campi da aggiungere alla vista, prestando attenzione a modificare il nome della variabile.

Fatto questo dovremo utilizzare il metodo Add della proprietà ViewFields riferita all’oggetto vista che abbiamo memorizzato nella variabile $view. (Perdonatemi quest’ultima frase, mi sembra una strofa della canzone “Alla fiera dell’est”…).

$view.ViewFields.Add($amount)

Anche in questo caso vale la considerazione fatta in precedenza. Se avete la necessità di aggiungere più campi potrete ripetere quest’ultima operazione, modificando adeguatamente il nome della variabile.

Nel caso doveste sbagliarvi eseguendo due volte lo stesso comando identico, il campo in questione verrà aggiunto alla visualizzazione tante volte quante volte è stato eseguito il comando. In questo caso basterà utilizzare il metodo Delete per rimuovere le istanze di campo in eccesso.

$view.ViewFields.Delete($amount)

In entrambi i casi, Add o Delete, per confermare l’operazione dovremo semplicemente aggiornare la configurazione della vista utilizzando il metodo Update.

$view.Update()

Tornando all’esigenza di Barbara queste poche righe non avrebbero aiutato molto, ma immaginatele combinate alla possibilità di creare un ciclo su una serie di dati letti da un file CSV, in pochi minuti avremmo potuto aggiornare tutti i siti.

Supponendo di avere già predisposto un file CSV le cui intestazioni di colonna si chiamano csvWeb, csvList, csvView e csvField, lo script completo potrebbe somigliare a questo.

Import-Csv “C:\Script\allitems-fields.csv” | ForEach-Object {

$web = Get-SPWeb $_.csvWeb

$list = $web.GetList($_.csvList)

$view = $web.GetViewFromUrl($_.csvView)

$field = $list.Fields[$_.csvField]

$view.ViewFields.Add($field)

$view.Update()

}

Vi ricordo che qualsiasi script troviate sul web, e a maggior ragione i miei, sarebbe doveroso testarli in ambienti di test prima di utilizzarli in produzione.

Un ultima segnalazione prima di salutarvi. Al link seguente (in inglese) trovate tanti altri esempi su come lavorare sulle liste con PowerShell, ve lo consiglio.

Happy PoSH
– Riccardo


One Comment on “Modificare List View con PowerShell”

  1. ottimo potrà tornarmi utile🙂


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...