……Marco Valli's Blog……

Internet, Tecnologia e SharePoint!!!

PowerShell, il miglior amico di SharePoint! [Parte 2]


***DISCLAIMER*** quanto indicato in questo post può provocare GRAVI danni all’ambiente SharePoint se non utilizzato in modo corretto, quindi fate sempre attenzione ai comandi digitati, l’autore non è in alcun modo responsabile di un utilizzo improprio delle informazioni qui riportate.

Come già visto nel precedente articolo (PowerShell, il miglior amico di SharePoint! [Parte 1]), PowerShell è uno strumento davvero molto potente che consente di effettuare operazioni molto avanzate, PowerShell è infatti in grado di effettuare TUTTE le operazioni disponibili anche tramite interfaccia (della Central Administration piuttosto che delle singole raccolte siti e dei singoli siti) ma è in grado di eseguire comandi esclusivi per ottenere configurazioni particolari, in SharePoint 2013 in alcuni casi l’interfaccia grafica è stata rimossa e l’unica possibilità è data dalla riga di comando (parlo ad esempio della configurazione della tipologia dei componenti del motore di ricerca che fino a SharePoint 2010 era possibile configurare tramite Central Administration, possibilità sparita nella nuova versione di SharePoint).

Di seguito mostrerò alcuni esempi di come PowerShell può far risparmiare molto tempo automatizzando operazioni da effettuare su molti siti ed a modificare configurazioni non visibili nell’interfaccia di SharePoint.

Creare un gruppo di SharePoint

Un esempio di ciò che si può fare con Powershell è ad esempio la creazione di un gruppo di SharePoint in uno specifico sito. Per funzionare, questo comando, necessita di massimo 4 parametri:

  1. l’url della site collection nel quale deve essere creato il gruppo (obbligatorio)
  2. l’utente/gruppo proprietario di questo gruppo (obbligatorio)
  3. l’utente di default appartenente al gruppo
  4. il livello di permesso da assegnare al gruppo

Una volta recuperate le informazioni è quindi possibile scrivere lo script e creare il gruppo:

$web = Get-SPWeb [URL completo della site collection]
$owner = $web.SiteGroups[“[Nome utente o gruppo proprietario]”]
$user = $web | Get-SPUser “[Nome utente o gruppo di AD appartenente di default]”
$web.SiteGroups.Add(“[Nome del gruppo da creare]“, $owner, $user, “[Livello di permesso es. Contribute]“)

La cosa interessante è che ogni attività di questo tipo, cioè che impatta su una singola site collection, può essere eseguita in una sola volta per tutte le site collection del portale, senza dover effettuare il lavoro certosino di modifica manuale.

Automatizzare la modifica del collegamento al sito portale

Un esempio pratico è dato dalla configurazione dell’url di connessione al sito portale (per la configurazione manuale il ink è [URL site collection]/_layouts/portal.aspx), questa attività molto semplice, se da eseguire su un numero elevato di site collection può diventare veramente pesante e può essere risolta con uno scirpt ad hoc, in questo caso i parametri necessari sono:

  1. il nome del database al quel appartengono le site collection (obbligatorio)
  2. l’url del sito portale che deve essere inserito, è necessario un URL assoluto, non sono supportati i link relativi (obbligatorio)
  3. nome del sito portale, è il testo che verrà visualizzato per il link (obbligatorio)

Ed ecco lo script:

$ContentDB = ‘[Nome del Database]’
$PortalWebAddress = ‘[URL completo del sito portale]
$PortalName = ‘[Nome del sito portale]
$AllSites = Get-SPSite -Limit All  -ContentDatabase $ContentDB
foreach ($Site in $AllSites)
{
Write-Host “Impostazione del collegamento al sito $PortalWebAddress su $($Site.Url)…”
$Site.PortalUrl = $PortalWebAddress
$Site.PortalName = $PortalName
$Site.Dispose()
}

Come è possibile vedere, oltre all’impostazioni delle variabili, la sezione “foreach” applica l’operazione a tutti i siti recuperati dal comando Get-SpSite che restituisce tutte le site collection presenti nel database scelto.

Automatizzare l’aggiornamento dell’interfaccia a SharePoint 2010

Nel caso di migrazione da SharePoint 2007 ho avuto la necessità di mantenere lo stile di visualizzazione del vecchio SharePoint per verificare le funzionalità e di dover poi aggiornare l’interfaccia tramite la console di aggiornamento, anche in questo caso se il numero di siti è elevato, svolgere manualmente l’operazione può diventare un incubo, è qui che torna in gioco la PoweShell con uno script che semplifica notevolmente il lavoro, è sufficiente infatti:

  1. il nome del database al quale appartengono i siti (obbligatorio)

e lo script è fatto:

$db = Get-SPContentDatabase [Nome del Database]
$db.Sites | Get-SPWeb -limit all | ForEach-Object {$_.UIversion = 4; $_.UIVersionConfigurationEnabled = $false; $_.update()}

Anche in questo caso un comando (Get-SPWeb) restituisce tutti i siti al quale la modifica deve essere applicata, in questo caso non solo le site collection ma tutti i siti del content database selezionato.

Rimuovere un database di servizio

Ci sono dei casi in cui una farm può avere qualche problema e PowerShell è un valido supporto quando l’interfaccia raggiunge i suoi limiti, recentemente infatti ho avuto un problema con il servizio di ricerca di una farm SharePoint 2010, il database era infatti irrimediabilmente corrotto, il problema di relativamente poco conto (è stato sufficiente creare un nuovo database e riavviare un full crawl) ha comportato però la comparsa di numerosi eventi nel log di sistema che riporatvano l’impossibilità di contattare il vecchio database che era stato sganciato dalla service application ma, evidentemente, aveva lasciato tracce nella configurazione del portale, tramite riga di comando sono riuscito a rimuovere il database da quelli a disposizione del servizio:

get-spdatabase | where {$_.name -eq ‘[Nome Search Service Application]’} | foreach {$_.Delete()};

Aumentare il limite di 2000 elementi richiamabili tramite BCS

Per un lavoro su un sito di SharePoint ho avuto la necessità di recuperare dei dati da un DB SQL utilizzando i Business Connectivity Services (BCS) disponibili in SharePoint, dopo aver opportunamente configurato il tutto e garantito i permessi corretti ho però notato che il sistema limitava l’importazioni a soli 2000 record costringendomi ad intervenire rapidamente per aumentare questo limite assolutamente insufficiente per lo scopo prefissato dall’applicazione, anche in questo caso PowerShell mi ha consentito in poco tempo di risolvere la situazione con un script che come unico parametro richiede i parametri di defaul e massimi da applicare alla configurazione della service application dei BCS:

$BDCProxy = Get-SPServiceApplicationProxy | where { $_.GetType().FullName -eq (‘Microsoft.SharePoint.BusinessData.SharedService.’ + ‘BDCServiceApplicationProxy’) }
Get-SPBusinessDataCatalogThrottleConfig –Scope Database –ThrottleType Items –ServiceApplicationProxy $BDCProxy | Set-SPBusinessDataCatalogThrottleConfig –Maximum [Valore Massimo es. 10000] –Default [Valore di default es. 5000]
Get-SPBusinessDataCatalogThrottleConfig –Scope Database –ThrottleType Items –ServiceApplicationProxy $BDCProxy

Ancora una volta spero di aver reso l’idea delle potenzialità di questo strumento davvero versatile e potente che nella nuova versione per SharePoint 2013 dispone di un numero ancora più elevato di cmdlets per poter gestire in modo sempre migliore tutte le opzioni della strepitosa nuova versione di SharePoint!!

Enjoy! 😉

Annunci

7 risposte a “PowerShell, il miglior amico di SharePoint! [Parte 2]

  1. Usually do not use an extreme number of keywords. When you need to use your visibility to be raised by some keywords 5 marzo 2013 alle 01:32

    Hey! I just wanted to ask if you ever have any problems with hackers?
    My last blog (wordpress) was hacked and I ended
    up losing a few months of hard work due to no backup. Do you have any methods to prevent hackers?

  2. Liliana 28 marzo 2013 alle 22:11

    You actually make it seem so easy with your presentation but I find this matter to be really something that I think I
    would never understand. It seems too complex and extremely broad
    for me. I am looking forward for your next post, I
    will try to get the hang of it!

    • Marco Valli 28 marzo 2013 alle 23:55

      I admit that powershell can be very complex, but I must say it has enormous potential and it is important to know the features and the cmdlets because at some level it becomes really essential!

  3. http://aigai.net/making-great-beats-for-hip-hop/ 27 aprile 2013 alle 09:10

    I really like your blog.. very nice colors & theme. Did you create this website yourself or did you hire someone to
    do it for you? Plz answer back as I’m looking to construct my own blog and would like to know where u got this from. kudos

    • Marco Valli 27 aprile 2013 alle 09:31

      Standard ZBench theme (http://theme.wordpress.com/themes/zbench/) plus a little bit of custom graphics for the banner and the background… 🙂

  4. youtube video 21 giugno 2013 alle 18:58

    I’m not that much of a online reader to be honest but your blogs really nice,
    keep it up! I’ll go ahead and bookmark your site to come back later on. Cheers

  5. Tax attorney Los Angeles 9 agosto 2013 alle 07:11

    Hey! Someone in my Facebook group shared this website with us so
    I came to take a look. I’m definitely loving the information. I’m bookmarking and will be tweeting this to my followers!
    Terrific blog and fantastic style and design.

Rispondi

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

%d blogger hanno fatto clic su Mi Piace per questo: