Vintage Weekend Part II: Ottenere tutti gli utenti del sito con Powershell

Posted by on Sunday, October 21, 2012 in PowerShell, Quick Tips | 0 comments

Seconda parte della serie Vintage Weekend. Se vi siete persi la prima parte si tratta di esempi di script Powershell pensati per essere utilizzati con SharePoint 2007. In questo caso il pretesto mi è stato dato da un cliente che aveva bisogno di conoscere tutti gli utenti e gruppi di una site collection. Come nell'esempio precedente trattandosi si SharePoint 2007 è necessario referenziare le librerie che interrogheremo prima di procedere. Successivamente, una volta memorizzato l'oggetto "site collection" effettueremo un ciclo su tutti i gruppi del sito e per ognuno di questi stamperemo a video tutti i nomi utente.
[System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") $site = New-Object Microsoft.SharePoint.SPSite("http://yourservername/sites/yoursitecollection ") $groups = $site.RootWeb.sitegroups foreach ($grp in $groups) { "Group: " + $grp.name; foreach ($user in $grp.users) { "  User: " + $user.name } } $site.Dispose()
Happy PoSH - Riccardo
Read More

Prossimi eventi SharePoint

Posted by on Sunday, September 30, 2012 in conferenze, Green Team | 0 comments

Ok, sicuramente non vincerò il premio per essere il primo che ne parla, ma è ormai da tempo che mi riprometto di parlare degli eventi legati a SharePoint ai quali parteciperò in prima persona. SharePoint Governance - 30 Ottobre 2012, Microsoft Innovation Campus, Milano. Evento gratuito (previa registrazione) organizzato da Green Team, AvePoint e Nintex sul tema della governance di SharePoint. Non sono sicuramente né il primo né l'unico a ritenere questo uno dei temi caldi e tra i più importanti legati al mondo SharePoint. Al termine dell'evento, per tutti i partecipanti che lo vorranno, SharePint! Per saperne di più http://www.greenteam.it/spgovernance. SharePoint Future 2012 - 27 Novembre 2012, Microsoft Innovation Campus, Milano. Il primo evento Italiano interamente dedicato a SharePoint 2013. Durante l'arco dell'intera giornata verranno presentate tutte le novità principali della nuova versione di SharePoint, in un evento ricco di contenuti tecnici esclusivi nati dall'esperienza sviluppata in questi lunghi mesi di studio sulla beta 2. Per saperne di più http://www.sharepointconference.it/events/Future2012. SharePoint and Office Conference 2013 - 5, 6, 7 Marzo 2013, Centro Congressi MilanoFiori, Assago (MI) L'evento di punta della stagione 2012/2013. Tre giorni interamente dedicati a SharePoint in cui alcuni tra i maggiori esperti italiani ed internazionali parleranno delle loro esperienze sul campo presentando contenuti unici. Personalmente non vedo l'ora di ascoltare professionisti del calibro di Luca Bandinelli, Spencer Harbar, Mirijam van Olst e molti altri ancora da confermare. Per saperne di più http://www.sharepointconference.it/events/2013. Infine segnalo un altro evento non direttamente legato a SharePoint, ma supportato da SharePointCommunity.it. Si tratta della Windows Server Conference 2012. L'evento si terrà il 25 e 26 Ottobre 2012 presso l'Enterprise Hotel in Corso Sempione, 91 a Milano. Per saperne di più http://www.serverconference.it/events/2012. Ci vediamo li? - Riccardo
Read More

Office 365 & Project Collaboration

Posted by on Sunday, February 26, 2012 in Office 365, Risorse | 0 comments

Che YouTube fosse una risorsa, e non un semplice sito, mi era chiaro già da un po'. Ciò nonostante sono sempre positivamente sorpreso quando mi imbatto in canali come MSFTProject. Non saprei dire se si tratti o meno di una risorsa "ufficiale" Microsoft, non sembra, ma la cosa interessante è il suo contenuto interamente dedicato a Microsoft Project. Segnalo questi due video (in inglese), il primo più generico, presenta una panoramica sulle funzionalità di SharePoint Online in Office 365, mentre il secondo è specifico sull'integrazione di Microsoft Project 2010 con SharePoint Online. Buona visione -Riccardo
Read More

Modificare List View con PowerShell

Posted by on Sunday, February 12, 2012 in PowerShell, SharePoint 2010 | 1 comment

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:Scriptallitems-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
Read More

Cambiare la pagina di Access Denied con Powershell

Posted by on Wednesday, October 5, 2011 in Amministrazione, PowerShell, SharePoint 2010 | 2 comments

Tra i feed RSS letti negli ultimi giorni, uno ha colpito particolarmente la mia attenzione (tralasciando le notizie in arrivo dalla #SPC11). In questo post viene mostrato come cambiare la pagina di accesso negato di SharePoint 2010 programmaticamente, sostituendola con una personalizzata. Essendo interessato all'argomento, ma NON essendo decisamente uno sviluppatore, mi sono chiesto come potere girare a mio vantaggio queste poche righe di codice. Da qui a pensare a Powershell il passo è breve. Non ci vuole un genio per capire capire che l'oggetto a cui si riferisce il codice è la web application. Di conseguenza ho memorizzato in una variabile la mia web application di prova e in una seconda variabile il path della mia pagina di accesso negato personalizzata. Inutile dire che questa pagina deve esistere su file system.
$webapp = Get-SPWebApplication http://sp-2010 $adpage = "/_layouts/MyCustomLayout/AccessDenied.aspx"
Per capire se l'oggetto web application memorizzato nella variabile $webapp disponesse o meno di un metodo più o meno simile a quello visto nell'esempio, ho utilizzato la cmdlet get-member in pipeline con l'oggetto web application.
$webapp | Get-Member
Bingo! Abbiamo proprio lo stesso metodo, UpdateMappedPage. A questo punto ho commesso un errore che mi è stato d'aiuto per arrivare alla soluzione. Ho cioè pensato che per il passo successivo fosse necessario passare un oggetto e ho quindi scritto quanto segue:
$webapp.UpdateMappedPage('SPWebapplication.SPCustomPage.AccessDenied',"/_layouts/MyCustomLayout/AccessDenied.aspx")
L'errore che ne è derivato è stato significativo. Access Denied

Risulta infatti chiaro che UpdateMappedPage accetta un set predefinito di valori testuali, tra i quali quello che ci interessa direttamente: AccessDenied. E' interessante notare anche le altre opzioni, dovrebbero farvi venire in mente un po' di prove interessanti da fare. Almeno per me è stato così :) Ho quindi corretto lo script in questo modo.

$webapp.UpdateMappedPage("AccessDenied",$adpage)

Per confermare l'impostazione è necessario eseguire l'update dell'oggetto web application ed infine il riavvio di IIS. Sinceramente non ho provato con il semplice recycle dell'application pool della web application. Se qualcuno dovesse provarlo me lo faccia sapere :)

$webapp.Update() iisreset

Il gioco è fatto. Si, ma non ho ancora finito. Dovendo ripristinare la configurazione originale basterebbe passare un valore null al posto della pagina (ripeterò solo le ultime tre righe).
$webapp.UpdateMappedPage("AccessDenied",$null) $webapp.Update() iisreset
E se volessimo leggere la configurazione corrente? Ancora una volta la cmdlet Get-Member è stata fondamentale. Dall'elenco prodotto in precedenza ho infatti notato la presenza del metodo GetMappedPage. Nonostante MSDN parli anche della possibilità di  utilizzare questo metodo passando come valore il tipo della pagina, cioè AccessDenied, io non so riuscito. Ho ottenuto il risultato sperato passando il path della pagina standard di accesso negato.
$webapp.GetMappedPage("/_layouts/AccessDenied.aspx")
Se poi volessimo.... No, scherzo, ho finito. E poi è appena resuscitato Optimus Prime, devo proprio andare :) - Riccardo UpdateMappedPage: http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.administration.spwebapplication.updatemappedpage.aspx GetMappedPage: http://msdn.microsoft.com/en-us/library/ee551363.aspx Il post originale: http://www.anmolrehan-sharepointconsultant.com/2011/08/how-to-use-custom-access-denied-page-in.html
Read More