Cambiare la pagina di Access Denied con Powershell

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

Backup e SP1

Pochi giorni fa ho scoperto un dettaglio del Service Pack 1 di SharePoint 2010 che mi era decisamente sfuggito.

Si tratta del fatto che in una farm dove è stata deployata la SP1 non è possibile effettuare il restore di un backup di una site collection pre-SP1. Sinceramente quando ho letto questa notizia non ci volevo credere e ho voluto fare una prova. Ovviamente ho ricevuto un errore.

Your backup is from a different version of Microsoft SharePoint Foundation and cannot be restored to a server running the current version. The backup file should be restored to a server with version ‘14.0.0.5123’ or later.

Cosa bisogna fare? Per i backup di site collection la procedura è quella di effettuare il restore in una farm pre-SP1 aggiornare la farm, rieseguire il backup e finalmente effettuare il restore nella farm corretta.

In questa pagina su Technet trovate tutti i dettagli e le operazioni per i restore di backup platform level e il recover da unattached content database: http://technet.microsoft.com/en-us/library/hh344831.aspx.

Chissà se i prodotti di terze parti sono in grado si superare questo limite… Quasi quasi mando qualche e-mail… :D

– Riccardo

SharePoint Diagnostic Studio

L’annuncio era nell’aria già da qualche tempo, ne avevo parlato anche io in chiusura della mia sessione su Logging, Monitoring & Co. durante la scorsa Microsoft Office and SharePoint Conference 2011 e finalmente ci siamo. Da pochi giorni è stato annunciato il rilascio della nuova versione dello SharePoint Administration Toolkit per SharePoint 2010 che comprende la nuova release dello SharePoint Diagnostic Tool (SPDiag), che prende il nome di SharePoint Diagnostic Studio.

Di cosa si tratta?

SharePoint Diagnostic Studio è uno strumento pensato per aiutare IT Pro e Sviluppatori nella ricerca e risoluzione dei problemi che possono presentarsi più o meno all’improvviso nella nostra farm SharePoint 2010. Questo tool è in grado di leggere dati provenienti da ULS logs (event + trace log) di tutti i membri della farm e dal Logging Database, per poi rielaborarli e produrre una grande varietà di report.

SharePoint Diagnostic Studio

Di seguito trovate l’elenco dei report che possono essere genearati da SharePoint Diagnostic Studio, suddivisi per categoria.

  1. Base
    1. HTTP Requests
    2. Windows Events
    3. ULS Trace Issues
    4. Timer Jobs
    5. Performance Counters
  2. Capacity
    1. SQL Server Query IO Over Time
    2. CPU
    3. Process Memory (MB)
  3. Performance
    1. SQL Read Intensive Traces
    2. Latency Tier Breakdown
    3. Changed Objects
    4. Changed Objects per Database
    5. Change Types
    6. Change Types per Database
    7. Latency All Requests
    8. Latency Percentiles
    9. SQL Deadlocks
    10. SQL Blocking
  4. Availability
    1. Availability
    2. SQL Overview Report
    3. Worker Process Recycles
    4. Failed User Requests
    5. Crashes
  5. Usage
    1. Requests per Url
    2. Requests per User
    3. Application Workload
    4. Request per Site

SharePoint Diagnostic Studio

Non ho ancora avuto la possibilità di provare questo tool sul campo, ma le premesse sono ottime, non trovate?

Download SharePoint 2010 Administration Toolkit v2.0
SharePoint Diagnostic Studio su Technet

– Riccardo

Completare la migrazione di un content database con PowerShell

Nelle settimane passate mi sono trovato ad affrontare un problema nato dopo la migrazione di una intranet da SharePoint 2007 a SharePoint 2010. La procedura che ho seguito per la migrazione è stata quella del database attach. L’operazione è andata (apparentemente) a buon fine, la intranet rispondeva a dovere, tranne per un “dettaglio”: se provavo a creare un nuovo sito o un nuovo elenco ottenevo l’errore seguente.

error_pagetitle
error_pagetitle

Ho provato, come primo tentativo, ad impostare via PowerShell l’interfaccia utente di SharePoint 2007. Così facendo la creazione di nuovi elementi non dava alcun problema. Reimpostando l’interfaccia SharePoint 2010, l’errore si è ripresentato. A questo punto sono andato a controllare nelle Central Administration (Central Administration > Upgrade and Migration > Review Database Status) lo stato del mio Content Database appena migrato.

Ho scoperto che la procedura di migrazione non era completa. In corrispondenza del db ho infatti trovato l’indicazione “Database is up to date, but some sites are not completely upgraded“.
Via PowerShell ho quindi completato l’operazione di upgrade, servono solo poche righe, le trovate di seguito.

$cdb = Get-SPContentDatabase Il_Mio_Content_Database

 

Upgrade-SPContentDatabase -id $cdb.Id

Una volta eseguito questo comando tutto ha ricominciato a funzionare come da manuale.

 

– Riccardo

 

Nuovi articoli per SharePointCommunity.it

Nelle ultime settimane ho trascurato un po’ il mio blog per dedicarmi alla scrittura di due articoli (e ne sto finendo un terzo) per SharePointCommunity.it, pubblicati pochisimmi giorni fa.

Il primo articolo è relativo a come aiutarsi nella lettura dei log di SharePoint via PowerShell sfruttando il Correlation ID e a come proseguire con l’analisi dei log leggendo, sempre via PowerShell dall’event viewer di Windows.

Nel secondo articolo ho cercato di riprodurre, passo per passo, la procedura per poter schedulare via PowerShell i backup di SharePoint.

Links:

Come sopravvivere al Correlation ID Error

Pianificare i backup di SharePoint 2010 con Windows Powershell

Li avete letti? Cosa ne pensate? Aspetto i vostri commenti :)

-Riccardo