Microsoft Press: Utilizzo di Windows PowerShell per l'esecuzione e l'automazione di attività amministrative della farm

SharePoint 2010
 

Si applica a: SharePoint Server 2010

Ultima modifica dell'argomento: 2017-01-20

Questi brani sono tratti dal Manuale per gli amministratori di Microsoft SharePoint 2010, Microsoft Press, agosto 2010.

Acquistare questo libro (le informazioni potrebbero essere in lingua inglese)

Questi brani tratti dal Manuale per gli amministratori di Microsoft SharePoint 2010 (le informazioni potrebbero essere in lingua inglese) illustrano SharePoint 2010 Management Shell e descrivono come utilizzare Windows PowerShell per eseguire alcune attività amministrative di base.

Bill English

Bill English, MCTS, MCT, CTT+, con certificazione GSEC, è Microsoft® MVP per SharePoint® Server. Gestisce una società di formazione e consulenza leader di mercato, ha scritto oltre 10 libri e interviene spesso come relatore a conferenze quali Microsoft® Office SharePoint® Conference, Comdex e ad altri eventi.

Brian Alderman

Brian Alderman, master in sistemi informativi, è attualmente dipendente di Mindsharp (Minneapolis-St. Paul, Minnesota). A partire dal 1995 ha ottenuto numerose certificazioni Microsoft, incluse MCT, MCTS per SharePoint, MCITP per SQL Server®, MCSA e MCSE per Windows Server®, oltre alla certificazione PMP. In qualità di istruttore tecnico e consulente di primo livello, vanta un'esperienza quindicennale in ambito di networking, database di SQL Server, tecnologie di SharePoint e project management. Le pubblicazioni precedenti di Brian includono manuali su Windows 2000 Professional e sull'amministrazione di SQL Server 2000. Partecipa attivamente come relatore alle conferenze di SharePoint Industry, inclusi gli eventi SharePoint Saturday e SharePoint Best Practices Conference.

Mark Ferraz

Mark Ferraz è presidente di SolutionsMark (www.solutionsmark.com), una società di consulenza con sede a Houston, specializzata nella progettazione, nello sviluppo e nell'implementazione di piattaforme, soluzioni e servizi aziendali basati su Prodotti e tecnologie Microsoft SharePoint. In qualità di Senior Information Architect, Enterprise Network/Systems Architect e sviluppatore, Mark vanta oltre dieci anni di esperienza nella progettazione, gestione e implementazione di progetti complessi per alcune tra le maggiori società a livello mondiale. Oltre a essere uno dei co-autori della guida alle procedure consigliate per Microsoft Office SharePoint Server 2007, Mark interviene attivamente come relatore a conferenze del settore, ad esempio SharePoint Best Practices Conference e SharePoint Technology Conference.

Nel corso degli ultimi anni alcuni amministratori di SharePoint hanno apprezzato le capacità di Windows PowerShell e hanno cercato di utilizzarle. In mancanza di supporto integrato, tuttavia, ciò è risultato troppo difficile per la maggior parte degli amministratori. Microsoft SharePoint Foundation 2010 e Microsoft SharePoint 2010 includono ora supporto nativo per Windows PowerShell con SharePoint 2010 Management Shell. In questo capitolo vengono illustrati SharePoint 2010 Management Shell e l'utilizzo di Windows PowerShell per l'esecuzione di alcune attività amministrative di base. Il Capitolo 12, intitolato "Utilizzo di Windows PowerShell per la gestione dei servizi di ricerca e della ricerca FAST", si basa sulle informazioni disponibili in questo capitolo, utilizzando attività amministrative e scenari relativi alla ricerca.

In Internet e nei manuali pubblicati è disponibile una qualità elevata di informazioni su Windows PowerShell. L'obiettivo di questo capitolo non è l'insegnamento di Windows PowerShell, ma la descrizione delle procedure per familiarizzare con i nuovi cmdlet di Windows PowerShell, una novità di SharePoint 2010. All'inizio del capitolo sono tuttavia disponibili informazioni di base per gli utenti che hanno relativamente poca familiarità con Windows PowerShell.

L'amministrazione di un server in cui sono installati prodotti Microsoft implica in genere l'apprendimento dell'utilizzo di alcuni strumenti di amministrazione, ad esempio interfacce grafiche basate su Microsoft Management Console (MMC), definite anche snap-in MMC, l'apprendimento di molte utilità della riga di comando e, in alcuni casi, di un provider Windows Management Instrumentation (WMI) o di oggetti Component Object Model (COM), con cui gli amministratori possono interagire tramite VBScript. Fino al rilascio di SharePoint 2010, Prodotti e tecnologie Microsoft SharePoint non presentava differenze significative rispetto agli altri prodotti Microsoft a livello di numero di strumenti di amministrazione disponibili. Gli amministratori che utilizzano le versioni precedenti devono basarsi sul sito Web Amministrazione centrale, sulla Configurazione guidata Prodotti SharePoint e sugli strumenti stsadm e psconfig della riga di comando. Nessuno di tali strumenti è in grado di eseguire tutte le attività necessarie.

Per ogni prodotto Microsoft è disponibile una comunità specifica, che crea o estende gli strumenti incorporati in modo da semplificare le attività dell'amministratore. Gli strumenti necessari a un amministratore sono disponibili anche nelle versioni precedenti, ma suddivisi in diverse origini. Tutto ciò sta per cambiare, grazie alla possibilità di creare script per ogni attività amministrativa oppure di automatizzare ogni attività tramite Windows PowerShell.

Il concetto di Windows PowerShell è basato su uno studio commissionato da Microsoft all'inizio degli anni 2000. Basato originariamente sulla shell POSIX, come specificato in IEEE 1003.2, e influenzato dalle shell Perl e UNIX, Windows PowerShell è una shell di comandi e un linguaggio di scripting molto più efficace rispetto all'utilizzo del prompt dei comandi di Windows (cmd.exe). Gli amministratori apprezzano molto gli strumenti della riga di comando, poiché è possibile associarli in batch in modo da automatizzare attività ripetitive o per assicurarsi che un insieme di attività venga completato nuovamente in modo esattamente uguale all'ultima esecuzione. I cmdlet di Windows PowerShell offrono agli amministratori gli stessi vantaggi. È possibile utilizzare comunque gli strumenti tradizionali, ma Windows PowerShell offre una maggiore flessibilità e una maggiore ampiezza di utilizzo, non disponibili negli strumenti tradizionali.

SuggerimentoTip
Le iniziative generate dalla community per versioni precedenti di SharePoint includono estensioni a stsadm, pubblicate all'indirizzo https://stsadm.codeplex.com/ (le informazioni potrebbero essere in lingua inglese), script di Windows PowerShell per Windows SharePoint Services 3.0 e Microsoft Office SharePoint Server 2007, disponibili all'indirizzo https://sharepointpsscripts.codeplex.com/ (le informazioni potrebbero essere in lingua inglese) e il progetto CodePlex "PowerShell SharePoint Provider" per Windows SharePoint Services 2.0 e Microsoft SharePoint Portal Server 2003, disponibile all'indirizzo https://pssharepoint.codeplex.com/ (le informazioni potrebbero essere in lingua inglese).

In questa sezione vengono illustrati gli argomenti seguenti relativi a Windows PowerShell.

  • Novità della versione Windows PowerShell 2.0

  • Architettura

  • Installazione di Windows PowerShell

  • Gestione remota

Windows PowerShell 2.0 offre alcune nuove funzionalità e alcuni miglioramenti rispetto a Windows PowerShell 1.0, inclusi i seguenti:

  • Nuovi cmdlet

  • Gestione remota e processi in background

  • Windows PowerShell Integrated Scripting Environment (ISE)

  • Debugger di Windows PowerShell

  • Moduli

  • Funzioni avanzate

  • Transazioni

  • Pipeline a passaggi

  • Eventi

  • Internazionalizzazione degli script

  • Guida in linea

Molte di queste funzionalità risulteranno utili per i professionisti IT. È ad esempio possibile gestire in modalità remota tutti i server della farm dal computer desktop. Quando si acquisisce una competenza sufficiente in Windows PowerShell, si sarà in grado di creare funzioni avanzate personalizzate utilizzando il linguaggio di scripting di Windows PowerShell e quindi utilizzare tali funzioni come cmdlet. In Windows PowerShell 1.0 l'unico modo per ottenere tale risultato è ricorrere a uno sviluppatore, utilizzare codice e distribuire file nella farm.

SuggerimentoTip
Per ulteriori informazioni sulle novità di Windows PowerShell 2.0, vedere What's New in Windows PowerShell e http://it.wikipedia.org/wiki/windows_powershell. Per individuare altre risorse, utilizzare il proprio motore di ricerca Internet preferito e quindi immettere le parole chiave Novità di Windows PowerShell 2.0 oppure i nomi di funzionalità indicati in precedenza.

Windows PowerShell è estremamente importante, poiché il linguaggio di scripting di Windows PowerShell è orientato agli oggetti, basato su .NET Framework, ovvero .NET Framework 3.5 per Windows PowerShell 2.0, e sul linguaggio di programmazione C#. Ciò consente a Windows PowerShell di accedere ai modelli a oggetti sottostanti, per trasmettere oggetti e i rispettivi valori (proprietà) da un comando di Windows PowerShell a un altro. Ciò significa che si dispone quasi delle capacità di uno sviluppatore, senza la necessitò di scrivere, compilare e distribuire codice.

Quando i team dei prodotti Microsoft prendono in considerazione gli strumenti che desiderano offrire agli amministratori, li basano innanzitutto su Windows PowerShell. L'installazione di SharePoint 2010 consente pertanto di completare in modo nativo con i cmdlet di Windows PowerShell un numero elevato di attività amministrative, senza dovere installare software generato da iniziative della community. Se sono necessari ulteriori cmdlet, è possibile crearli utilizzando gli script di Windows PowerShell e la funzionalità relativa alle funzioni avanzate in Windows PowerShell 2.0, in modo da consentire agli sviluppatori dell'organizzazione di creare nuovi cmdlet. L'utilizzo di Windows PowerShell per agevolare l'amministrazione di SharePoint sarà sempre più diffuso ed è pertanto importante iniziare quanto prima ad apprendere come utilizzare i cmdlet incorporati.

È possibile che inizialmente l'utilizzo di Windows PowerShell risulti complesso, ma gli utenti che hanno esperienza del prompt dei comandi (cmd.exe) o che hanno creato file batch acquisiranno rapidamente familiarità con la console di Windows PowerShell. È addirittura possibile utilizzare la console di Windows PowerShell invece del prompt dei comandi, poiché tutti i comandi attualmente utilizzati, ad esempio dir, cd e ping, consentono di ottenere gli stessi risultati nella console di Windows PowerShell. Potrebbe essere necessario racchiudere tra virgolette i parametri della riga di comando, in modo da utilizzare i comandi dall'interno di Windows PowerShell, ma questa è praticamente l'unica modifica necessaria. Non è pertanto necessario utilizzare due finestre diverse per completare le attività amministrative.

NotaNote
Per impostazione predefinita, lo sfondo del prompt dei comandi è nero, ma è possibile modificarlo. Fare clic con il pulsante destro del mouse sulla barra del titolo e quindi scegliere Proprietà. Verrà visualizzata la finestra di dialogo Proprietà, che include quattro schede, ovvero Opzioni, Carattere, Layout e Colori. È possibile modificare il tipo di carattere, il colore dello sfondo, le dimensioni della finestra e altro ancora. Per ulteriori informazioni sulle somiglianze tra le due interfacce della riga di comando, vedere l'intestazione laterale intitolata "Collegamenti della riga di comando" più avanti in questo capitolo.

È possibile utilizzare Windows PowerShell in due modi, ovvero tramite un'interfaccia della riga di comando, definita console di Windows PowerShell (powershell.exe), oppure tramite l'interfaccia grafica Interactive Scripting Environment (ISE) di Windows PowerShell (Powershell_ise.exe). In questo capitolo viene esaminato l'utilizzo della console di Windows PowerShell.

SuggerimentoTip
Per ulteriori informazioni su Windows PowerShell, vedere le risorse seguenti.

È possibile utilizzare nella console di Windows PowerShell tutti i collegamenti utilizzati al prompt dei comandi.

  • Per sospendere temporaneamente la visualizzazione durante la scrittura di output da parte di un comando, premere CTRL+S e quindi premere CTRL+S per riprendere l'esecuzione oppure CTRL+C per interromperla.

  • Per impostazione predefinita, in un buffer vengono memorizzati fino a 50 comandi. È possibile spostarsi nel buffer utilizzando i tasti di direzione Su e Giù per scorrere i comandi, in modo da semplificare l'esecuzione del comando successivo o precedente.

  • Se si preme F7, i comandi disponibili nel buffer verranno visualizzati da una finestra popup. Utilizzare i tasti di direzione per selezionare il comando che si desidera eseguire, premere INVIO o F9, immettere il numero di comando da eseguire e quindi premere INVIO.

  • Per visualizzare dalla riga di comando i comandi disponibili nel buffer, immettere i primi caratteri del comando desiderato e quindi premere F8. L'interfaccia della riga di comando eseguirà nella cronologia del buffer una ricerca del primo comando che inizia con i caratteri immessi.

  • Se si utilizzano le capacità di autocompletamento della shell di comandi di Windows PowerShell, non sarà mai necessario immettere il nome completo di un comando. È sufficiente immettere i primi caratteri del comando desiderato e quindi premere TAB per scorrere tutti i comandi e i nomi di file e cartelle disponibili in ordine alfabetico oppure premere MAIUSC+TAB per scorrere i comandi in ordine inverso.

  • Per copiare e incollare testo, fare clic con il pulsante destro del mouse sul titolo dell'interfaccia della riga di comando, scegliere Segna, evidenziare il testo da copiare e quindi fare di nuovo clic con il pulsante destro del mouse sul titolo della finestra per copiare automaticamente il testo selezionato negli Appunti.

  • I comandi non applicano la distinzione tra maiuscole e minuscole e possono essere raggruppati e inseriti in un file di testo, Se si richiama tale file nella finestra della riga di comando, i comandi inclusi nel file verranno eseguiti. L'estensione di tali file di testo è bat, cmd, vbs oppure ps1 nel caso di Windows PowerShell. È possibile eseguire i comandi inclusi in questi file all'esterno della finestra di comando, chiamando il file dalla riga Esegui oppure facendo doppio clic sul file in Esplora risorse.

  • È possibile trasmettere argomenti al file di comando chiamato. Gli argomenti passati al file di comando vengono archiviati in memoria e vi si accede tramite variabili. È inoltre possibile creare variabili per archiviare i valori necessari durante il completamento di un'attività. Per fare riferimento alle variabili in Windows PowerShell, è necessario aggiungere un simbolo del dollaro ($) davanti al nome della variabile.

  • L'output di un comando può essere indirizzato a un file il cui nome si trova a destra rispetto a >. Il file, se esistente, verrà sovrascritto. Per reindirizzare l'output ma aggiungerlo al file, utilizzare >>. I messaggi di errore risultanti dall'esecuzione di un comando possono essere reindirizzati a un file il cui nome si trova a destra rispetto a 2> oppure possono essere aggiunti a un file utilizzando 2>> o inviati alla stessa destinazione dell'output standard utilizzando 2>&1.

  • È possibile eseguire molti comandi sulla stessa riga. Per separare i comandi in Windows PowerShell, utilizzare il punto e virgola (;).

  • Reindirizzare l'output di un comando come input di un altro comando, separando entrambi i comandi con una barra verticale '|'. Ad esempio, dir | sort | more consente di visualizzare un elenco ordinato di file nella directory corrente una pagina alla volta. La barra verticale è il simbolo disponibile sopra la barra rovesciata nella maggior parte delle tastiere.

  • È possibile utilizzare alias e collegamenti al posto dei comandi di utilizzo frequente. Ad esempio, il cmdlet ForEach-Object può essere sostituito da ForEach o addirittura dal carattere di percentuale, %. Il punto interrogativo, ?, può essere utilizzato al posto di Where o Where-Object. È inoltre possibile utilizzare Get-Alias per restituire un elenco di alias. Si noti che l'utilizzo di alias negli script può ostacolarne la comprensione.

  • In questo manuale sono disponibili numerosi esempi di tali collegamenti.

I computer che eseguono Windows 7 o Windows 2008 R2 o versione successiva includono Windows PowerShell 2.0 e Windows Remote Management (WinRM) 2.0. Se si desidera gestire computer che utilizzano sistemi operativi precedenti in modalità locale o remota tramite Windows PowerShell, sarà necessario installare Windows PowerShell 2.0 e WinRM 2.0.

Una copia di Windows PowerShell 2.0, che include WinRM 2.0, è disponibile per il download all'indirizzo http://support.microsoft.com/kb/968929/it. Verificare di scaricare la versione corretta. Ad esempio, se si installa SharePoint nella versione a 64 bit di Windows Server 2008, sarà necessario scaricare e installare la versione Windows 2008 x64 di Windows PowerShell 2.0 e WinRM 2.0. Al termine dell'installazione, il file eseguibile per Windows PowerShell ISE sarà disponibile nella cartella %SystemRoot%\System32\WindowsPowerShell\v1.0.

NotaNote
Se si prevede un utilizzo elevato di ISE, prendere in considerazione la creazione di un collegamento per tale programma sulla barra delle applicazioni. Fare clic sul pulsante Start, fare clic con il pulsante destro del mouse su Powershell_ise.exe e quindi scegliere Aggiungi alla barra delle applicazioni o Aggiungi a menu Start.

Per utilizzare Windows PowerShell ISE su Windows 2008 R2, è necessario aggiungere la funzionalità ISE di Windows PowerShell. Per aggiungere tale funzionalità, è possibile utilizzare i comandi di Windows PowerShell o Server Manager. Dopo l'installazione di SharePoint 2010 o SharePoint Foundation 2010, eseguire la procedura seguente.

  • Utilizzando Windows PowerShell, immettere i comandi seguenti.

    Import-Module Servermanager; Add-WindowsFeature "PowerShell-ISE"

  • Utilizzando Server Manager, eseguire la procedura seguente.

    1. Avviare Server Manager, fare clic su Caratteristiche e quindi selezionare Aggiungi funzionalità.

    2. Nel riquadro intermedio dell'Aggiunta guidata funzionalità selezionare la casella di controllo relativa a Windows PowerShell Integrated Scripting Environment (ISE), come mostrato nella Figura 5-1, e quindi fare clic su Avanti.

Installazione di Windows PowerShell

Figura 5-1 Installare la funzionalità Windows PowerShell Integrated Scripting Environment (ISE)

  1. Nella schermata Conferma selezione installazione fare clic su Installa.

  2. Nella schermata Risultati installazione fare clic su Chiudi.

Windows PowerShell è uno strumento avanzato e, analogamente ad altri linguaggi di scripting, è soggetto al rischio derivante dalla facilità estrema di utilizzo di codice altrui o di download di frammenti di codice da Internet. Poiché inoltre i file di codice sono semplici file di testo, la modifica di tali file e l'inserimento di codice dannoso da parte di altri risulta molto semplice. In Windows PowerShell è pertanto disponibile una funzionalità integrata denominata criteri di esecuzione, che può essere impostata in modo specifico per i singoli utenti. Tali impostazioni vengono salvate nel Registro di sistema. Per visualizzare i criteri di esecuzione, immettere il comando seguente in Microsoft SharePoint 2010 Management Shell.

Se si esegue Management Shell in un server SharePoint, è probabile che l'output di tale comando sia RemoteSigned, che indica che è possibile eseguire in modo interattivo qualsiasi comando e utilizzare qualsiasi script archiviato nel computer a cui si è effettuato l'accesso. Se tuttavia si desidera eseguire file di configurazione o script da origini remote, è necessario che tali file siano firmati. È possibile modificare i criteri di esecuzione se si avvia Windows PowerShell come amministratore e si utilizza il cmdlet Set-ExecutionPolicy oppure è possibile modificare la chiave del Registro di sistema come illustrato di seguito.

HKLM\Software\Microsoft\PowerShell\1\ShellIds\Microsoft.PowerShell

Nota sulla sicurezzaSecurity Note
Questa chiave del Registro di sistema risulta utile se utilizzata insieme a Criteri di gruppo di Active Directory. È consigliabile evitare modifiche manuali al Registro di sistema, in particolare poiché Microsoft offre un cmdlet per la configurazione dei criteri di esecuzione di Windows PowerShell.

Per firmare script, utilizzare il cmdlet Set-AuthenticodeSignature, che può essere utilizzato per aggiungere una firma Authenticode a uno script di Windows PowerShell o a un altro file.

In un'organizzazione con più ambienti, ad esempio sviluppo, integrazione di sistema, test di accettazione utenti, pre-produzione e produzione, prendere in considerazione l'esigenza di firmare codice almeno nelle farm di produzione e di test di accettazione utenti. È inoltre consigliabile esaminare le impostazioni dei criteri di esecuzione per tali farm. È possibile impostare i criteri di esecuzione in un oggetto Criteri di gruppo che fa riferimento a utenti o computer, in modo da non consentirne la sovrascrittura quando un utente accede ai server SharePoint.

SuggerimentoTip
Per ulteriori informazioni sui criteri di esecuzione Windows PowerShell e sulla firma degli script, vedere l'articolo "Intercettazione del codice dannoso" su TechNet all'indirizzo https://technet.microsoft.com/it-it/magazine/2008.01.powershell.aspx oppure digitar Get-Help about_Execution_Policies nell'interfaccia della riga di comando di Windows PowerShell. Per informazioni dettagliate sulla firma degli script di PowerShell, è inoltre disponibile un post di blog, intitolato "ALLSigned: Signing Your PowerShell Scripts", all'indirizzo https://sharepoint.microsoft.com/blogs/zach/Lists/Posts/Post.aspx?ID=53 (le informazioni potrebbero essere in lingua inglese).
NotaNote
Se si utilizza Windows 7 nel computer desktop e si desidera gestire in modalità remota Windows Server 2008 R2 per i server SharePoint, sarà necessario disporre di Strumenti di amministrazione remota del server. Tale funzionalità è obbligatoria per le nuove funzionalità di Criteri di gruppo e supporta Windows PowerShell. La funzionalità Strumenti di amministrazione remota del server è disponibile nell'Area download Microsoft all'indirizzo http://www.microsoft.com/downloads/it-it. Per ulteriori informazioni, visitare i siti agli indirizzi https://technet.microsoft.com/it-it/library/dd367853(ws.10).aspx e http://trycatch.be/blogs/roggenk/archive/2009/06/08/installing-windows-7-rsat-unattended.aspx (le informazioni potrebbero essere in lingua inglese).

Windows PowerShell 2.0 offre una nuova capacità per la gestione remota dei sistemi dal computer desktop tramite WinRM o Internet Information Server (IIS). WinRM è spesso il meccanismo utilizzato dagli amministratori e viene illustrato in questa sezione. La gestione remota implica non solo la capacità di eseguire localmente Windows PowerShell nel computer in uso utilizzando alcuni comandi che consentono di specificare un nome di computer come parametro facoltativo, ma anche metodi definiti comunicazione remota di tipo fan-in e fan-out e dei processi in background.

  • Comunicazione remota di tipo fan-in Consente a molti amministratori di connettersi a un'istanza di Windows PowerShell in esecuzione negli stessi server remoti. Il supporto di questa opzione non è incluso in SharePoint 2010.

  • Comunicazione remota di tipo fan-out Consente di inviare un singolo comando di Windows PowerShell di eseguire in parallelo più istanze remote di Windows PowerShell. Il risultato di tali comandi verrà restituito al computer desktop. Questa opzione viene utilizzata se è necessario completare la stessa attività su più server. Non è più necessario stabilire a turno una connessione Desktop remoto a ogni server e quindi eseguire localmente i comandi su tale server. È possibile creare un insieme di comandi di Windows PowerShell e trasmettere i nomi di server a tali comandi. Gli stessi comandi vengono quindi completati in modo sequenziale per ogni server di cui viene specificato il nome.

  • Processi in background Windows PowerShell 2.0 supporta processi in background sia locali sia remoti. Questi comandi vengono eseguiti in modo asincrono in background senza alcuna interazione da parte dell'utente. Quando si esegue un comando in background, il prompt dei comandi viene restituito immediatamente, in modo da consentire la continuazione dell'esecuzione di altri comandi.

È necessario avviare e configurare il servizio WinRM Windows per la comunicazione remota sul computer locale e sul server in cui si desidera eseguire comandi in modalità remota. Per verificare se WinRM è in esecuzione nel server, digitare

Get-service winrm

Per verificare se è in esecuzione in un server remoto, digitare

Get-service winrm -computername $server_name

È consigliabile che questo servizio sia in esecuzione nel server SharePoint. Se tuttavia nel computer in uso è in esecuzione Windows 7 (o Windows Vista con installati Windows PowerShell 2.0 e WinRM 2.0), potrebbe essere necessario avviare questo servizio e abilitare la comunicazione remota. A tale scopo, digitare un comando, Enable-PSRemoting, che consente di eseguire due comandi aggiuntivi, Set-WSManQuickConfig e Start-Service WinRM.

ImportanteImportant
Se uno dei tipi di connessione di rete è Pubblica, il comando Set-WSManQuickConfig genererà un'eccezione di tipo Operazione non valida. Per continuare, sarà necessario modificare le connessioni di rete, specificando il tipo di connessione Dominio o Privata.

L'output del comando Enable-PSRemoting avrà un aspetto analogo a quello dell'esempio seguente.

WinRM Quick Configuration
Running command "Set-WSManQuickConfig" to enable this machine for remote management
through WinRM service.
 This includes:
    1. Starting or restarting (if already started) the WinRM service
    2. Setting the WinRM service type to auto start
    3. Creating a listener to accept requests on any IP address
    4. Enabling firewall exception for WS-Management traffic (for http only).

Do you want to continue?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default
is "Y"): y
WinRM has been updated to receive requests.
WinRM service type changed successfully.
WinRM service started.
Configured LocalAccountTokenFilterPolicy to grant administrative rights remotely to local users.
WinRM has been updated for remote management.
Created a WinRM listener on HTTP://* to accept WS-Man requests to any IP on this machine.
WinRM firewall exception enabled.

In un computer in cui è in esecuzione una versione a 64 bit di Windows è possibile che venga visualizzato un messaggio di conferma aggiuntivo.

Are you sure you want to perform this action?
Performing operation "Registering session configuration" on Target "Session
configuration "Microsoft.PowerShell32" is not found. Running command
"Register-PSSessionConfiguration Microsoft.PowerShell32 -processorarchitecture x86 
-force" to create "Microsoft.PowerShell32" session configuration. This will restart
WinRM service.".
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):

Per determinare il modo in cui viene configurato WinRM, il metodo di autenticazione utilizzato e i numeri di porte a cui verrà effettuato l'accesso, utilizzare il comando seguente.

winrm get winrm/config/service

È possibile che si ottenga un output analogo al seguente.

Service
    RootSDDL = O:NSG:BAD:P(A;;GA;;;BA)S:P(AU;FA;GA;;;WD)(AU;SA;GWGX;;;WD)
    MaxConcurrentOperations = 4294967295
    MaxConcurrentOperationsPerUser = 15
    EnumerationTimeoutms = 60000
    MaxConnections = 25
    MaxPacketRetrievalTimeSeconds = 120
    AllowUnencrypted = false
    Auth
        Basic = false
        Kerberos = true
        Negotiate = true
        Certificate = false
        CredSSP = false
        CbtHardeningLevel = Relaxed
    DefaultPorts
        HTTP = 5985
        HTTPS = 5986
    IPv4Filter = *
    IPv6Filter = *
    EnableCompatibilityHttpListener = false
    EnableCompatibilityHttpsListener = false
    CertificateThumbprint

È possibile eseguire winrm e i comandi correlati a winrm, ad esempio il comando New-PSSession, dalla console di Windows PowerShell o da SharePoint 2010 Management Shell, che devono essere tuttavia eseguiti come amministratore. A tale scopo, fare clic con il pulsante destro del mouse sulla console di Windows PowerShell o su SharePoint 2010 Management Shell e quindi scegliere Esegui come amministratore. Per eseguire tale operazione, è necessario essere membri del gruppo Administrators o essere in grado di concedere credenziali di amministratore.

NotaNote
Se il computer locale e il computer remoto si trovano in domini non trusted diversi o in un gruppo di lavoro, per configurare la comunicazione remota saranno necessarie procedure aggiuntive. È possibile che lo scenario relativo al gruppo di lavoro si verifichi quando SharePoint Foundation è installato per la collaborazione esterna in un ambiente di piccole o medie aziende, invece che in una installazione tipica di SharePoint. Per informazioni su come configurare la comunicazione remota tra due computer di gruppo di lavoro, vedere il post di blog all'indirizzo https://blogs.msdn.com/wmi/archive/2009/07/24/powershell-remoting-between-two-workgroup-machines.aspx (le informazioni potrebbero essere in lingua inglese).

Per l'utilizzo di WinRM per l'esecuzione dei cmdlet di SharePoint PowerShell in un computer remoto, sono previsti alcuni requisiti aggiuntivi.

  1. È necessario disporre di accesso a un ID utente con i diritti corretti per l'esecuzione di tali comandi. Questi requisiti sono applicabili sia per la comunicazione remota in un server o per l'esecuzione locale di cmdlet di SharePoint. L'ID utente deve soddisfare i criteri seguenti.

    • Deve essere membro del gruppo di sicurezza locale WSS_ADM_WGP nel computer che esegue i comandi.

    • Deve essere membro del ruolo SharePoint_Shell_Access SQL di Server nel database di configurazione.

    • Deve disporre di accesso al database del contenuto che si desidera modificare.

    È possibile utilizzare i cmdlet SPShellAdmin per agevolare la gestione di questi requisiti. Quando si esegue il cmdlet Add-SPShellAdmin per aggiungere un ID utente al ruolo SharePoint_Shell_Admin, è necessario essere mappati al ruolo Security_Admin nell'istanza di SQL e al ruolo db_owner nei database rilevanti. È necessario eseguire il cmdlet Add-SPShellAdmin per ogni database del contenuto a cui si desidera che acceda l'ID utente.

  2. Designare un server nella farm come server da utilizzare sempre per la comunicazione remota. In tale server è necessario incrementare l'opzione di configurazione di WinRM, MaxMemoryPerShellDB, fino a un valore piu elevato, ad esempio 512 o 1024. Questa opzione di configurazione consente di limitare la quantità di memoria che un singolo processo remoto può utilizzare. L'incremento del valore consentirà l'esecuzione dei comandi di lunga durata senza che vengano generati errori di tipo OutOfMemory. Di seguito vengono riportati il comando per la visualizzazione dei valori delle opzioni di configurazioni e l'output di esempio.

    winrm get winrm/config/winrs

    Winrs
        AllowRemoteShellAccess = true
        IdleTimeout = 180000
        MaxConcurrentUsers = 5
        MaxShellRunTime = 2147483647
        MaxProcessesPerShell = 15
        MaxMemoryPerShellMB = 150
        MaxShellsPerUser = 5
     Winrs    AllowRemoteShellAccess = true    IdleTimeout = 180000    MaxConcurrentUsers = 5    MaxShellRunTime = 2147483647    MaxProcessesPerShell = 15    MaxMemoryPerShellMB = 150    MaxShellsPerUser = 5
    

    Per modificare l'impostazione MaxMemoryPerShellDB, immettere il comando Windows PowerShell seguente in SharePoint 2010 Management Shell.

    Set-Item WSMan:\localhost\Shell\MaxMemoryPerShellMB 1024

  3. È necessario utilizzare l'autenticazione Credential Security Provider (CredSSP). Questo meccanismo di autenticazione, una novità di Windows Vista, consente a un'applicazione di delegare le credenziali da un computer a un altro. Questo processo viene definito "doppio salto". Ciò consente di rendere disponibili le credenziali che consentono ai cmdlet di SharePoint PowerShell di comunicare con Microsoft SQL Server che ospita i database di SharePoint. Se non si utilizza CredSSP e si tenta di eseguire in modalità remota un cmdlet di SharePoint, è possibile che venga visualizzato un messaggio relativo alla non disponibilità della farm. Si noti che nell'output del comando get winrm/config/service di Winrm riportato in precedenza CredSSP è uguale a False. È possibile modificare in molti modi le opzioni di configurazione di WinRM, inclusi Criteri di gruppo, script di accesso e il prompt dei comandi. Per abilitare l'autenticazione CredSSP tramite le interfacce della riga di comando, eseguire le attività seguenti.

    1. Nel computer da cui si esegue la comunicazione remota, ad esempio il computer desktop con Windows 7, immettere il comando seguente, dove Web1 è il server SharePoint. Immettere Y quando viene richiesta la conferma dell'abilitazione dell'autenticazione CredSSP.

      Enable-WSManCredSSP -role client -DelegateComputer Web1

    2. Nel server SharePoint verso cui si esegue la comunicazione remota, immettere

      Enable-WSManCredSSP -role server

I comandi necessari per avviare una sessione remota per la gestione remota di una farm di SharePoint o di un server SharePoint specifico sono analoghi a quelli riportati nell'esempio seguente.

$cred = Get-Credential contoso\spfarm
$sess = New-PSSession Web1 -Authentication CredSSP -Credential $cred
Invoke-Command -Session $sess -ScriptBlock '
   {ADD-PSSnapin Microsoft.SharePoint.PowerShell;}
Nota sulla sicurezzaSecurity Note
È possibile limitare i comandi di Windows PowerShell a cui un utente può accedere durante una sessione remota utilizzando il parametro -ConfigurationName con il cmdlet New-PSSession oppure tramite il cmdlet Proxy. Per ulteriori informazioni, vedere il post di blog relativo alla estensione o alla modifica del comando con proxy, intitolato "Extending and/or Modifying Command with Proxies" all'indirizzo https://blogs.msdn.com/powershell/archive/2009/01/04/extending-and-or-modifing-commands-with-proxies.aspx (le informazioni potrebbero essere in lingua inglese).

Quando si immette il primo comando, viene visualizzata una finestra di dialogo in cui deve essere digitata la password. La password e il nome utente vengono archiviati nella variabile $Cred, utilizzata nel secondo comando, New-PSSession, che stabilisce una sessione permanente con il server remoto. La creazione di una sessione permanente non è necessaria quando si utilizza la comunicazione remota di Windows PowerShell, ma se non si stabilisce alcuna connessione permanente, quando si richiama un comando remoto che include un cmdlet di SharePoint, per ogni Invoke-Command sarà necessario includere anche il cmdlet PSSnapin. Il terzo comando, Invoke-Command PSSnapin, consente di eseguire cmdlet di SharePoint PowerShell nel server remoto.

Il riferimento alla sessione permanente viene archiviato nella variabile $sess. È possibile indirizzare qualsiasi comando desiderato a tale server remoto utilizzando questa variabile. Nell'esempio seguente, il cmdlet Get-SPServiceInstance viene digitato all'interno del blocco di script, ovvero l'area racchiusa tra parentesi graffe ({ }). L'output del cmdlet Get-SPServiceInstance restituisce lo stato dei servizi in una farm di SharePoint.

Invoke-Command -Session $s -ScriptBlock {get-SPServiceInstance}

WARNING: column "PSComputerName" does not fit into the display and was removed.

TypeName                         Status   Id
--------                         ------   --
Business Data Connectivity       Online   3ad4d004-9ae3-4810-94bf-76cc43c9d507
Microsoft SharePoint Foundati... Online   81cc6474-fd6f-42ad-a932-25d67cff8cc1
Microsoft SharePoint Foundati... Disabled cb3b976c-b451-4abe-b808-0c6d191ccd3d
Microsoft SharePoint Foundati... Online   5bac9c93-483a-4901-ae46-f6f7ae0a12a8
Central Administration           Online   0c24457f-b58e-4daa-895e-4acd35ef7543
Microsoft SharePoint Foundati... Online   155570fa-0d4c-495d-9f31-5250e83bdd75
Microsoft SharePoint Foundati... Disabled c25ae170-c07d-48db-97b3-73b0d9b47e94
SharePoint Foundation Help Se... Online   8af8b8b1-92cb-48d2-8864-20a7e191d7c2

ImportanteImportant
È possibile digitare più comandi in un blocco di script su righe separate o sulla stessa riga, separando i comandi con punto e virgola (;). Se nel blocco di script viene immesso solo un comando, il punto e virgola è facoltativo, ma è consigliabile includerlo. È inoltre possibile utilizzare variabili locali per generare un blocco di script remoto, come illustrato nell'esempio seguente.
$url = "http://contoso.com"
$myscript = "get-spsite $url"
$sb = [scriptblock]::Create($myscript)
Invoke-Command $sess -ScriptBlock $sb

È possibile utilizzare il cmdlet Invoke-Command di Windows PowerShell per comunicare con più sessioni, sullo stesso server o su server diversi, dal proprio computer desktop. Questo cmdlet consente di avviare più attività amministrative contemporaneamente e quindi di eseguirle in parallelo. Se tuttavia queste attività sono di lunga durata, il controllo verrà restituito solo al termine dell'esecuzione del comando nel computer remoto. Questa è l'esecuzione interattiva del comando. Per l'esecuzione asincrona come processo in background, in modo da consentire il ritorno immediato del prompt di Windows PowerShell e l'immissione di altri comandi, aggiungere il parametro -AsJob a Invoke-Command oppure, in alternativa, utilizzare il cmdlet Start-Job. L'utilizzo di questa tecnica può ridurre la quantità di tempo necessaria per completare le attività di amministrazione, rispetto all'esecuzione sequenziale di tali attività. Un notevole risparmio di tempo è ad esempio possibile durante il processo di aggiornamento, quando ogni sessione viene eseguita come aggiornamento con collegamento di database e il tempo necessario per completare tutti gli aggiornamenti di database è limitato solo dalle risorse disponibili nel server SQL.

Se è necessario completare molte attività di breve durata in un server specifico e non si desidera continuare a digitare Invoke-Command, utilizzare uno degli approcci seguenti.

  • È possibile avviare una sessione interattiva con tale server immettendo Enter-PSSession $sess. Il prompt dei comandi cambierà da PS C:\Users\<IDutente>, dove <IDutente> è il nome dell'utente corrente, a [<nomeserverremoto>]: PS C:\Users\<credenzialiremote>\Documents, dove <credenzialiremote> è l'ID utente utilizzato per l'autenticazione CredSSP. Il prompt dei comandi indica che si stanno inviando comandi al server remoto. Per tornare alla modalità interattiva nel computer locale, digitare Exit-PSSession o exit.

  • Utilizzare il cmdlet di comunicazione remota Import-PSSession, definito anche comunicazione remota implicita, per portare i comandi dalla sessione remota alla sessione di Windows PowerShell locale. L'approccio Import-PSSession risulta vantaggioso anche perché consente di interagire con il file system locale e di comunicare con SharePoint come se si fosse connessi localmente al server SharePoint. Per impostazione predefinita, il cmdlet Import-PSSession importa tutti i comandi, ad eccezione dei comandi con nome uguale a quello dei comandi disponibili nella sessione corrente. È inoltre possibile importare un sottoinsieme di comandi e aggiungere a tali comandi una parola specifica come prefisso, in modo da indicare in modo chiaro i comandi locali e i comandi remoti. Nell'esempio seguente la parola Remote viene aggiunta come prefisso a tutti i cmdlet SPSite.

    Import-PSSession -session $sess -CommandName *-spsite -Prefix Remote

    M ModuleType Name                      ExportedCommands                          
    ---------- ----                      ----------------                          
    Script     tmp_1833f7bc-b269-4229... {Set-SPSite, Backup-SPSite, Get-SPSite,...
    
    

    In questo esempio è possibile utilizzare tutti i cmdlet SPSite come se fossero comandi locali. Immettendo ad esempio Get-RemoteSPSite, sarà possibile restituire tutte le raccolte siti corrispondenti ai criteri specificati. Tali comandi importati vengono archiviati in un modulo temporaneo, che verrà eliminato alla fine della sessione. Per creare un modulo permanente utilizzabile in sessioni future, utilizzare il cmdlet Export-PSSession. I comandi importati vengono eseguiti comunque nella sessione remota da cui sono stati importati. La loro esecuzione potrebbe pertanto richiedere più tempo rispetto ai comandi locali.

Al termine di tutte le attività è possibile eliminare la connessione permanente tra il computer locale e il computer remoto, digitando Remove-PSSession $sess.

SuggerimentoTip
Per ulteriori informazioni sulla comunicazione remota di Windows PowerShel, vedere il Capitolo 4 relativo all'utilizzo di sessioni, processi e comunicazione remota nella guida rapida per gli amministratori di Windows PowerShell 2.0 di William Stanek (Microsoft Press, 2009) e l'articolo "Anteprima della versione 2.0 di Gestione remota" in TechNet Magazine all'indirizzo https://technet.microsoft.com/it-it/magazine/2008.08.windowspowershell.aspx (le informazioni potrebbero essere in lingua inglese). Vedere anche il post di blog relativo ai comandi di WinRM intitolato "A Few Good WS-MAN (WinRM) Commands" all'indirizzo https://blogs.technet.com/otto/archive/2007/02/09/sample-vista-ws-man-winrm-commands.aspx (le informazioni potrebbero essere in lingua inglese).

Per aprire SharePoint 2010 Management Shell, fare clic sul pulsante Start, scegliere Programmi, Prodotti Microsoft SharePoint 2010 e infine SharePoint 2010 Management Shell, come mostrato nella Figura 5-2.

Avvio di Windows PowerShell

Figura 5-2 Accesso a SharePoint 2010 Management Shell

SharePoint 2010 Management Shell è una console personalizzata. Non corrisponde alla console visualizzata quando si apre la console predefinita di Windows PowerShell, il cui collegamento è in genere disponibile sulla barra delle applicazioni. Una verifica delle proprietà del collegamento a SharePoint 2010 Management Shell consente di visualizzare il comando eseguito.

C:\Windows\System32\WindowsPowerShell\v1.0\PowerShell.exe  -NoExit  " &
   ' C:\Program Files\Common Files\Microsoft Shared\Web Server 
   Extensions\14\CONFIG\POWERSHELL\Registration\\sharepoint.ps1 ' "

Il collegamento fa riferimento al file Sharepoint.ps1. Si tratta di un esempio di profilo di Windows PowerShell, identico ad altri file di script di Windows PowerShell e utilizzato per archiviare gli elementi di utilizzo frequente, che devono essere caricati automaticamente all'avvio di una sessione di Windows PowerShell. Analogamente a normali file di script, i profili possono pertanto includere funzioni, alias e variabili e possono caricare qualsiasi estensione, snap-in o modulo di Windows PowerShell, in base alla necessità. Uno snap-in di Windows PowerShell (PSSnapin) è un programma .NET compilato in file con estensione DLL e include nuovi cmdlet, nuove funzioni e/o nuovi provider. In Windows PowerShell sono disponibili alcuni snap-in, inclusi Microsoft.PowerShell.Core, Microsoft.PowerShell.Host e Microsoft.PowerShell.WSMan.Management, oltre a moduli quali ActiveDirectory, FailoverClusters e WebAdministration. Estensioni aggiuntive risulteranno disponibili quando si installano altri prodotti nel computer.

Un file di profilo di SharePoint consente principalmente di caricare lo snap-in Windows PowerShell per SharePoin e di utilizzare quindi i nuovi cmdlet specifici di SharePoint. Il file di profilo di SharePoint include il codice seguente e una firma.

$ver = $host | select version
if ($ver.Version.Major -gt 1)  {$Host.Runspace.ThreadOptions = "ReuseThread"}
Add-PsSnapin Microsoft.SharePoint.PowerShell
Set-location $home

Il codice ottiene la versione di Windows PowerShell, verifica che il valore sia superiore a 1 e quindi, se tale condizione è true, imposta il modello di threading in modo che il primo thread venga riutilizzato, carica lo snap-in SharePoint PowerShell e quindi modifica la directory specificando la home directory, ad esempio C:\users\<IDutente>, dove IDutente è l'utente attualmente connesso. Per ulteriori informazioni su SharePoint, Windows PowerShell e il threading, vedere l'intestazione laterale intitolata "Considerazioni sulla memoria per l'utilizzo di Windows PowerShell" più avanti in questo capitolo.

Lo snap-in SharePoint PowerShell non è l'unico snap-in caricato in SharePoint 2010 Management Shell. Non è pertanto solo possibile utilizzare i cmdlet di SharePoint, ma anche utilizzare altri cmdlet dagku snap-in caricati. Per visualizzare tutti gli snap-in e l'ordine in base a cui vengono caricati, digitare Get-PSSnapin. L'output ottenuto dovrebbe avere un aspetto analogo a quello dell'esempio seguente.

Name        : Microsoft.PowerShell.Diagnostics
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains Windows Eventing and
              Performance Counter cmdlets.

Name        : Microsoft.WSMan.Management
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains cmdlets (such as 
              Get-WSManInstance and Set-WSManInstance) that are used by the
              Windows PowerShell host to manage WSMan operations.

Name        : Microsoft.PowerShell.Core
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains cmdlets used to manage
              components of WindowsPowerShell.

Name        : Microsoft.PowerShell.Utility
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains utility Cmdlets used to
              manipulate data.

Name        : Microsoft.PowerShell.Host
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains cmdlets (such as Start-
              Transcript and Stop-Transcript) that are provided for use with the
              Windows PowerShell console host.

Name        : Microsoft.PowerShell.Management
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains management cmdlets used to
              manage Windows components.

Name        : Microsoft.PowerShell.Security
PSVersion   : 2.0
Description : This Windows PowerShell snap-in contains cmdlets to manage Windows
              PowerShell security.

Name        : Microsoft.SharePoint.PowerShell
PSVersion   : 1.0
Description : Register all administration Cmdlets for Microsoft SharePoint Server.

NotaNote
Se si sviluppano script personalizzati che possono essere chiamati dal prompt dei comandi o facendo doppio clic sul file in Esplora risorse e se tali script includono comandi di Windows PowerShell per SharePoint, verificare di includere il comando per l'impostazione del modello di threading e caricare lo snap-in Windows PowerShell per SharePoint negli script. Quando si chiama uno script da una console di Windows PowerShell, è possibile utilizzare il tag #requires nella parte iniziale dello script.

Il file di profilo viene in genere modificato nel computer designato dell'amministratore. Il profilo può essere modificato in modo da:

  • Includere tutti gli snap-in o i moduli utilizzati da tutti i professionisti IT di un'organizzazione o di un reparto.

  • Tenere traccia di tutti i comandi di Windows PowerShell eseguiti.

  • Modificare il prompt per indicare il nome del server. In un'organizzazione che include molti server, è facile avviare un'attività amministrativa nel server sbagliato. È pertanto utile agevolare l'identificazione del server in uso da parte dell'amministratore, ad esempio configurando il titolo della finestra in modo che indichi il nome del server.

Un esempio di profilo personalizzato può includere il codice seguente.

<# ***********************************************************
 Copyright (c)2010, Contoso, All Rights Reserved
 *************************************************************
Contoso PowerShell Profile - ContosoProfile.ps1
Author: Peter Connelly
Purpose: This profile sets the PowerShell window size, font and title
and loads the SharePoint snap-in
History: Version 1.0 01/02/2010 First version
#>
# Track all Windows PowerShell commands
$profilename = $MyInvocation.MyCommand.Name
$profilepath = $MyInvocation.MyCommand.Path
$transcriptFile = "C:\Contoso\Logs\Powershell_$profilename.log"
Start-Transcript $transcriptFile -append -force
Write-Output "Starting profile: $profilepath"

# Command from SharePoint Server 2010 profile file - SharePoint.ps1
$ver = $host | select version
if ($ver.Version.Major -gt 1)  {$Host.Runspace.ThreadOptions = "ReuseThread"}
Add-PsSnapin Microsoft.SharePoint.PowerShell
Set-location $home

# Check that this is a command-line interface and not the ISE
if ($host.name -eq "ConsoleHost")
{
  $width = 80
  $sizeWindow = new-object System.Management.Automation.Host.Size $width,40
  $sizeBuffer = new-object System.Management.Automation.Host.Size $width,9999
  <# Check to adhere to the following rules:
  The buffer width can't be resized to be narrower than the window's current 
  width plus the window's width can't be resized to be wider than the 
  buffer's current width. #>
  $S = $Host.UI.RawUI
  if ($s.WindowSize.width -gt $width)
  {
        $s.WindowSize = $sizeWindow
        $s.BufferSize = $sizeBuffer
  } else {
        $s.BufferSize = $sizeBuffer
        $s.WindowSize = $sizeWindow
  }
}
# Set foreground, background color and window title
$s.ForegroundColor = "Yellow";$s.BackgroundColor = "DarkBlue";
$s.WindowTitle = "$env:computername"
# #############################################################
# End of ContosoProfile.ps1
# #############################################################

Poiché lo script del profilo viene eseguito automaticamente a ogni esecuzione di SharePoint 2010 Management Shell, è consigliabile che tale script sia firmato. Per ulteriori informazioni sulla personalizzazione della console, vedere https://technet.microsoft.com/it-it/library/ee156814.aspx (le informazioni potrebbero essere in lingua inglese).

I cmdlet di Windows PowerShell sono utilità basate sulle interfacce delle applicazioni e, nel caso di SharePoint 2010, del modello a oggetti di SharePoint e dei servizi Web SharePoint, consentono agli amministratori di completare alcune attività.

In generale, i cmdlet utilizzano una coppia verbo-nome. Il nome specifica l'oggetto su cui si desiderano informazioni o che si desidera modificare e il verbo indica l'operazione che si desidera eseguire con tale oggetto. I verbi e i nomi sono sempre separati da un trattino senza spazi e i nomi dei cmdlet di SharePoint sono sempre preceduti dal prefisso SP. Ad esempio, se si desidera ottenere (verbo) informazioni su tutti i database del contenuto (nome) della farm, si utilizza il cmdlet di SharePoint seguente, che consente di ottenere l'output riportato di seguito.

PS C:\Users\Peter> Get-SPContentDatabase

Id               : a1d5c96c-a41a-43b3-bc5d-3f8a93b26046
Name             : WSS_Content_a2fde53006e04bf5aae434ffd3c8a19c
WebApplication   : SPWebApplication Name=SharePoint - 80
Server           : SQL
CurrentSiteCount : 1

Id               : 363b11a3-6947-42f6-9df4-665eeff59c83
Name             : SPF_TeamsDB
WebApplication   : SPWebApplication Name=SPF_Teams
Server           : SQL
CurrentSiteCount : 1

In Windows PowerShell sono inoltre disponibili alcuni cmdlet che agevolano l'utilizzo di altri cmdlet, ad esempio Get-Command, che può essere abbreviato in gcm, e Get-Help, che può essere abbreviato in help. I nomi brevi dei cmdlet vengono definiti alias. Get-Command consente di individuare cmdlet e Get-Help consente di ottenere informazioni di base su un cmdlet dopo il recupero. Per informazioni su come utilizzare il cmdlet Get-Help, vedere la sezione "Informazioni per ottenere assistenza" più avanti in questo capitolo. Nell'esempio seguente il comando Get-Command individua tutti i cmdlet associati a SharePoint.

PS C:\Users\Peter>Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell" |
>>sort noun, verb |Format-Wide -Column 3
>><ENTER>
NotaNote
Quando si digita uno script di Windows PowerShell di una sola riga o non si forniscono tutti i parametri necessari, Windows PowerShell richiede i parametri mancanti o inizia una nuova riga con >>, in modo da consentire l'immissione di altri comandi. Al termine della digitazione, premere INVIO per consentire a Windows PowerShell di eseguire il codice. A causa di limitazioni relative alle dimensioni della pagina, molti comandi illustrati in questo capitolo vengono visualizzati su più righe, anche se possono essere digitati su una sola riga. È pertanto necessario ricordare di premere INVIO solo per eseguire gli script.

L'insieme di comandi illustrato in precedenza accetta l'output del cmdlet Get-Command e lo invia al cmdlet sort, che a sua volta dispone i dati in base all'ordine nome-verbo, in modo che tutti i cmdlet di SharePoint che modificano lo stesso oggetto vengano elencati insieme. I cmdlet che modificano lo stesso oggetto vengono quindi ordinati in base al verbo. Per ridurre la necessità di scorrere la pagina in SharePoint 2010 Management Shell, i dati ordinati vengono inviati al cmdlet format-wide. Tale combinazione di cmdlet di Windows PowerShell è abbastanza comune. L'output dell'insieme di comandi ha un aspetto analogo a quello dell'esempio seguente.

Start-SPAdminJob           Get-SPAlternateURL         New-SPAlternateURL
Remove-SPAlternateURL      Set-SPAlternateURL         Install-SPApplicationC...
Start-SPAssignment         Stop-SPAssignment          Get-SPAuthenticationPr...
New-SPAuthenticationPro... Get-SPBackupHistory        Move-SPBlobStorageLoca...
Get-SPBrowserCustomerEx... Set-SPBrowserCustomerEx... Copy-SPBusinessDataCat...
.....(not all output shown)
Set-SPWebApplicationHtt... Get-SPWebPartPack          Install-SPWebPartPack
Uninstall-SPWebPartPack    Get-SPWebTemplate          Install-SPWebTemplate
Set-SPWebTemplate          Uninstall-SPWebTemplate    Get-SPWorkflowConfig
Set-SPWorkflowConfig

NotaNote
È disponibile un altro cmdlet analogo a Get-Command, che agevola l'utilizzo dei cmdlet e che può risultare utile, in particolare se si creano comandi o script personalizzati. Si tratta del cmdlet Measure-Command, che consente di misurare il tempo necessario per l'esecuzione di cmdlet o script. Il cmdlet Trace-Command può risultare inoltre utile per il debug di brevi blocchi di script.

In SharePoint è disponibile un numero elevato di oggetti e, come prevedibile, SharePoint Server include un numero di oggetti maggiore rispetto a SharePoint Foundation. Durante la lettura di questo manuale, è possibile determinare la relazione tra tali oggetti. Ad esempio, mentre una farm di SharePoint può includere molte applicazioni Web, ogni farm di SharePoint dispone di un database di configurazione. Molti cmdlet di SharePoint utilizzano nomi che possono essere identificati facilmente, per determinare gli oggetti a cui apporteranno modifiche. Ad esempio, i cmdlet SPFarm consentono di recuperare informazioni sulla farm di SharePoint e di eseguirne il backup o il ripristino. Il cmdlet SPFarmConfig consente di recuperare e impostare proprietà per la farm.

Alcuni nomi di cmdlet possono tuttavia suscitare confusione. Ad esempio, il cmdlet SPSite consente di modificare raccolte siti e nel Capitolo 2, intitolato "Informazioni sull'architettura di SharePoint 2010", viene spiegato che la creazione di una raccolta siti è possibile solo se si dispone di un'applicazione Web e ciò implica l'utilizzo dell'oggetto SPWebApplication. Quando viene creata una raccolta siti, si sceglie un modello di sito per creare un sito. Nel modello a oggetti di SharePoint tale sito viene indicato come Web e non come sito. Il nome dell'oggetto sarà pertanto SPWeb. Ciò può creare confusione, poiché il termine "sito Web" viene spesso abbreviato in "sito" e nel modello a oggetti di SharePoint l'abbreviazione "sito" viene utilizzata per "raccolta siti". Poiché tale terminologia è stata utilizzata in molte versioni di SharePoint e viene utilizzata in modo costante dagli sviluppatori, è consigliabile che tale consuetudine venga adottata anche dai professionisti IT.

  • Un Web è un sito Web e può essere modificato tramite l'oggetto SPWeb.

  • Una raccolta siti include una raccolta di Web e può essere modificata utilizzando l'oggetto SPSite.

Nella Figura 5-3 vengono visualizzati gli oggetti più comuni e le rispettive relazioni, ma sono disponibili altri oggetti, ad esempio SPSiteCollection, ovvero una raccolta di SPSite.

La selezione corrente di cmdlet integrati non include tutti gli oggetti di SharePoint, ma è possibile scrivere nuovi cmdlet per manipolare tali oggetti. Per determinare gli oggetti associati ai cmdlet di SharePoint PowerShell e il numero di cmdlet per ogni oggetto, utilizzare i comandi disponibili nell'esempio seguente, in cui viene mostrata parte dell'output.

PS C:\Users\peter> Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell" |
>>sort noun, verb | group-object -property noun
>><ENTER>
Count Name                      Group
----- ----                      -----
    1 SPAdminJob                {Start-SPAdminJob}
    4 SPAlternateURL            {Get-SPAlternateURL, New-SPAlternateURL, Rem...
    1 SPApplicationContent      {Install-SPApplicationContent}
    2 SPAssignment              {Start-SPAssignment, Stop-SPAssignment}
...(not all output shown)
    6 SPWeb                     {Export-SPWeb, Get-SPWeb, Import-SPWeb, New-...
    4 SPWebApplication          {Get-SPWebApplication, New-SPWebApplication,...
    1 SPWebApplicationExtension {New-SPWebApplicationExtension}
    2 SPWebApplicationHttpTh... {Disable-SPWebApplicationHttpThrottling, Ena...
    2 SPWebApplicationHttpTh... {Get-SPWebApplicationHttpThrottlingMonitor, ...
    3 SPWebPartPack             {Get-SPWebPartPack, Install-SPWebPartPack, U...
    4 SPWebTemplate             {Get-SPWebTemplate, Install-SPWebTemplate, S...
    2 SPWorkflowConfig          {Get-SPWorkflowConfig, Set-SPWorkflowConfig}

Oggetti comuni di SharePoint e loro relazioni

Figura 5-3   Oggetti comuni di SharePoint e rispettive relazioni

Ogni informazione disponibile a SharePoint su un oggetto viene archiviata in elementi di dati e valori definiti proprietà, che illustrano anche lo stato di tale oggetto. Ad esempio, l'oggetto SPContentDatabase include tutte le informazioni sui database del contenuto disponibili nella farm.

Gli oggetti non dispongono solo di proprietà, ma includono anche azioni che determinano il modo in cui possono essere modificati. Nella terminologia orientata ad oggetti queste azioni, o diversi modi di agire su un oggetto, vengono definite metodi. Per determinare le proprietà e i metodi per l'oggetto SPSite, utilizzare i cmdlet riportati nell'esempio seguente, in cui viene mostrata parte dell'output.

PS C:\Users\peter> Get-SPSite | Get-Member

   TypeName: Microsoft.SharePoint.SPSite

Name                                  MemberType Definition
----                                  ---------- ----------
AddWorkItem                           Method     System.Guid AddWorkItem(Sys...
BypassUseRemoteApis                   Method     System.Void BypassUseRemote...
CheckForPermissions                   Method     System.Void CheckForPermiss...
Close                                 Method     System.Void Close()
ConfirmUsage                          Method     bool ConfirmUsage()
Delete                                Method     System.Void Delete(), Syste...
Dispose                               Method     System.Void Dispose()
...
ToString                              Method     string ToString()
UpdateValidationKey                   Method     System.Void UpdateValidatio...
VisualUpgradeWebs                     Method     System.Void VisualUpgradeWe...
AdministrationSiteType                Property   Microsoft.SharePoint.SPAdmi...
AllowDesigner                         Property   System.Boolean AllowDesigne...
AllowMasterPageEditing                Property   System.Boolean AllowMasterP...
....(not all output shown)
WarningNotificationSent               Property   System.Boolean WarningNotif...
WebApplication                        Property   Microsoft.SharePoint.Admini...
WorkflowManager                       Property   Microsoft.SharePoint.Workfl...
WriteLocked                           Property   System.Boolean WriteLocked ...
Zone                                  Property   Microsoft.SharePoint.Admini...

ImportanteImportant
È sempre consigliabile inviare il cmdlet Get-SP<nome> al cmdlet Get-Member. È a volte sorprendente esaminare le informazioni che un oggetto è in grado di recuperare.

Tempo reale: Problemi di prestazioni durante l'esecuzione dei comandi di Windows PowerShell

Per individuare tutte le raccolte siti della farm, è possibile digitare Get-SPSite. Verrà tuttavia visualizzato come output solo l'URL della raccolta siti. Per motivi di prestazioni, la proprietà Url è l'unica proprietà visualizzata per impostazione predefinita. Ciò dipende dal fatto che le raccolte siti dispongono di molte proprietà. Se tutte le proprietà vengono visualizzate per un numero elevato di raccolte siti, verrà utilizzata una quantità elevata di memoria e l'esecuzione del comando richiederà molto tempo. La visualizzazione della sola proprietà Url è quasi istantanea, poiché tale proprietà è memorizzata nella cache. È pertanto consigliabile evitare di eseguire questo comando per visualizzare più di qualche proprietà aggiuntiva.

Per visualizzare altre proprietà oltre a quella predefinita, è possibile utilizzare il cmdlet select di Windows PowerShell con il carattere barra verticale (|). È inoltre possibile utilizzare il carattere jolly (*) con l'istruzione select per elencare tutti i valori di proprietà, come illustrato nell'esempio seguente.

PS C:\Users\Peter> Get-SPSite "http://teams" | select *

ApplicationRightsMask                 : FullMask
ID                                    : cbf3290e-000e-4768-953c-99a983430283
SystemAccount                         : SHAREPOINT\system
Owner                                 : CONTOSO\spadmin
SecondaryContact                      : CONTOSO\peter
GlobalPermMask                        : FullMask
IISAllowsAnonymous                    : False
Protocol                              : http:
HostHeaderIsSiteName                  : False
HostName                              : teams
Port                                  : 80
...(not all output shown)
AllowDesigner                         : True
AllowRevertFromTemplate               : False
AllowMasterPageEditing                : False
ShowURLStructure                      : False

Per ottenere un elenco di tutte le raccolte siti disponibili nella farm, insieme al nome del database del contenuto in cui sono archiviate (l'output include solo l'URL della raccolta siti e il nome del database del contenuto), è necessario utilizzare i comandi illustrati nell'esempio seguente, in cui viene mostrato anche l'output di esempio.

PS C:\Users\peter> Get-SPSite | select url, contentdatabase

Url                                     ContentDatabase
---                                     ---------------
http://MySite                           SPContentDatabase Name=Contoso_MySiteDB
http://MySite/personal/peter            SPContentDatabase Name=Contoso_PersonalDB
http://MySite/personal/erin             SPContentDatabase Name=Contoso_PersonalDB
http://intranet.contoso.msft            SPContentDatabase Name=Contoso_IntranetDB
http://teams                            SPContentDatabase Name=Contoso_TeamsDB
http://teams/sites/Finance              SPContentDatabase Name=Contoso_TeamsDB

SharePoint utilizza i verbi comuni utilizzati anche da altri insiemi di cmdlet, oltre ad alcuni nuovi verbi aggiunti in SharePoint. Per trovare tali verbi, utilizzare il cmdlet Get-Command, come illustrato di seguito.

PS C:\Users\Peter>Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell" |
>>sort verb | group verb | sort count -descending
>><ENTER>
Count Name                      Group
----- ----                      -----
  139 Get                       {Get-PluggableSecurityTrimmer, Get-SPAccessS...
  104 Set                       {Set-SPAccessServiceApplication, Set-SPAlter...
   88 New                       {New-SPAccessServiceApplication, New-SPAlter...
   77 Remove                    {Remove-PluggableSecurityTrimmer, Remove-SPA...
   11 Update                    {Update-SPFarmEncryptionKey, Update-SPInfoPa...
   10 Add                       {Add-PluggableSecurityTrimmer, Add-SPClaimTy...
   10 Install                   {Install-SPApplicationContent, Install-SPDat...
    8 Start                     {Start-SPAdminJob, Start-SPAssignment, Start...
    8 Import                    {Import-SPBusinessDataCatalogModel, Import-S...
    8 Export                    {Export-SPBusinessDataCatalogModel, Export-S...
    8 Uninstall                 {Uninstall-SPDataConnectionFile, Uninstall-S...
    7 Disable                   {Disable-SPBusinessDataCatalogEntity, Disabl...
    6 Enable                    {Enable-SPBusinessDataCatalogEntity, Enable-...
    6 Clear                     {Clear-SPLogLevel, Clear-SPMetadataWebServic...
    5 Stop                      {Stop-SPAssignment, Stop-SPEnterpriseSearchQ...
    4 Move                      {Move-SPBlobStorageLocation, Move-SPProfileM...
    3 Initialize                {Initialize-SPContentDatabase, Initialize-SP...
    3 Upgrade                   {Upgrade-SPContentDatabase, Upgrade-SPEnterp...
    3 Backup                    {Backup-SPConfigurationDatabase, Backup-SPFa...
    3 Restore                   {Restore-SPEnterpriseSearchServiceApplicatio...
    2 Resume                    {Resume-SPEnterpriseSearchServiceApplication...
    2 Test                      {Test-SPContentDatabase, Test-SPInfoPathForm...
    2 Suspend                   {Suspend-SPEnterpriseSearchServiceApplicatio...
    2 Revoke                    {Revoke-SPBusinessDataCatalogMetadataObject,...
    2 Mount                     {Mount-SPContentDatabase, Mount-SPStateServi...
    2 Grant                     {Grant-SPBusinessDataCatalogMetadataObject, ...
    2 Dismount                  {Dismount-SPContentDatabase, Dismount-SPStat...
    1 Merge                     {Merge-SPLogFile}
    1 Receive                   {Receive-SPSharedServiceApplicationInfo}
    1 Disconnect                {Disconnect-SPConfigurationDatabase}
    1 Unpublish                 {Unpublish-SPServiceApplication}
    1 Connect                   {Connect-SPConfigurationDatabase}
    1 Rename                    {Rename-SPServer}
    1 Restart                   {Restart-SPEnterpriseSearchQueryComponent}
    1 Copy                      {Copy-SPBusinessDataCatalogAclToChildren}
    1 Ping                      {Ping-SPEnterpriseSearchContentService}
    1 Publish                   {Publish-SPServiceApplication}

Come si può notare, i verbi più comuni correlati a SharePoint sono:

  • Get Esegue query su un oggetto specifico o su una raccolta di oggetti e recupera le informazioni relative a tale oggetto. Ad esempio, è possibile utilizzare questo verbo per recuperare informazioni su tutte le applicazioni di servizio. Solo i comandi Get restituiscono uno o più oggetti. Tutti gli altri comandi vengono eseguiti su un oggetto alla volta.

    Get-SPServiceApplication

  • Set Modifica impostazioni specifiche di un oggetto. È ad esempio possibile utilizzarlo per impostare il proprietario della raccolta siti per una specifica raccolta siti.

    Set-SPSite http://teams -OwnerAlias contoso\peter

  • New Crea una nuova istanza di un oggetto, ad esempio una nuova raccolta siti.

    New-SPSite http://teams/sites/HR -OwnerAlias contoso\peter
    -Name "HR Team" -Template STS#0
    
  • Remove Rimuove (elimina) un'istanza dell'oggetto, ad esempio una raccolta siti e i relativi siti secondari. A causa della natura potenzialmente dannosa di questo verbo, è in genere necessario confermare questa azione utilizzando il parametro -confirm. In assenza di tale parametro, verrà visualizzata una richiesta di conferma dell'azione, come mostrato di seguito.

    PS C:\Users\Peter> Remove-SPSite http://teams/sites/HR
    Confirm
    Are you sure you want to perform this action?
    Performing operation "Remove-SPSite" on Target "http://teams/sites/Finance".
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help
    (default is "Y"):y
    

I parametri vengono utilizzati negli esempi riportato di seguito. Si tratta di parole con un trattino (-) come prefisso. Nella sezione seguente verrà illustrato il cmdlet Get-Help e verrà spiegato come ottenere ulteriori informazioni su tali parametri, inclusi i parametri disponibili per l'utilizzo con diversi cmdlet.

In Windows PowerShell è disponibile un sistema completo incorporato della Guida in linea. Per accedervi rapidamente, digitare help nell'interfaccia della riga di comando. Questo è un alias del cmdlet Get-Help. È inoltre possibile visualizzare le informazioni della Guida su Get-Help digitando Get-Help Get-Help. L'output di tale comando è costituito da un elenco che include una descrizione del cmdlet, la sintassi utilizzata dal cmdlet, descrizioni dei parametri, esempi e altre note correlate. È inoltre possibile utilizzare il cmdlet Get-Help per visualizzare le informazioni della Guida in merito al linguaggio di base di Windows PowerShell. Ad esempio, è possibile utilizzare i comandi seguenti per ottenere informazioni su argomenti specifici: Get-Help foreach o Get-Help substring o Get-Help variables.

NotaNote
Per familiarizzare con Windows PowerShell, è consigliabile utilizzarne il sistema integrato della Guida. Se si creano nuovi cmdlet di Windows PowerShell, è necessario assicurarsi di creare file personalizzati della Guida. Oltre alla Guida in linea incorporata, sono disponibili molte risorse in Internet. È ad esempio possibile scaricare una Guida in linea gratuita per Windows PowerShell 2.0 a 32 bit o a 64 bit all'indirizzo https://www.primaltools.com/unsupported_browser.asp (le informazioni potrebbero essere in lingua inglese).

Get-Help trova le informazioni da visualizzare utilizzando i file XML (Extensible Markup Language) installati nel server. Durante l'installazione di SharePoint vengono installati i file della Guida insieme allo snap-in Windows PowerShell. Tali file sono disponibili in %CommonProgramFiles%\Microsoft Shared\Web Server Extensions\14\CONFIG\PowerShell\Help oppure %CommonProgramFiles%\Microsoft Shared\Web Server Extensions\14\CONFIG\PowerShell\Help\<impostazioniinternazionali>, dove impostazioniinternazionali indica la lingua del computer, ad esempio it-it. Per tali file viene utilizzata la convenzione di denominazione <dll nomefile>-help.xml, ad esempio Microsoft.SharePoint.PowerShell.dll-help.xml, Microsoft.SharePont.Search.dll-help.xml e Microsoft.Office.Access.Server.dll-help.xml. Per individuare quali cmdlet utilizzano file XML specifici della Guida, digitare quanto segue:

PS C:\Users\Peter>Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell" |
>>sort helpfile, name |
>>Format-Wide name -column 2 -groupby helpfile | more
>><ENTER>

  

   :

Get-SPExcelBlockedFileType        Get-SPExcelDataProvider  
Remove-SPExcelDataProvider        Remove-SPExcelUserDefinedFunction
Set-SPExcelFileLocation

   HelpFile: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions
\14\CONFIG\PowerShell\Help\microsoft.office.access.server.dll-help.xml

Get-SPAccessServiceApplication    New-SPAccessServiceApplication 
Set-SPAccessServiceApplication

   HelpFile: C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions
\14\CONFIG\PowerShell\Help\Microsoft.Office.Excel.Server.MossHost.dll-help.xml

Get-SPExcelDataConnectionLibrary   Get-SPExcelFileLocation
Get-SPExcelServiceApplication      Get-SPExcelUserDefinedFunction
New-SPExcelBlockedFileType         New-SPExcelDataConnectionLibrary
New-SPExcelDataProvider            New-SPExcelFileLocation
New-SPExcelServiceApplication      New-SPExcelUserDefinedFunction
Remove-SPExcelBlockedFileType      Remove-SPExcelDataConnectionL...
Remove-SPExcelFileLocation         Set-SPExcelDataConnectionLibrary
Set-SPExcelDataProvider            Set-SPExcelServiceApplication  
-- More -

SuggerimentoTip
Per ulteriori informazioni sul formato dei file della Guida XML per il cmdlet e su come creare file della Guida personalizzati da associare ai nuovi cmdlet creati, vedere i siti Web all'indirizzo https://blogs.msdn.com/powershell/archive/2006/09/14/Draft-Creating-Cmdlet-Help.aspx (le informazioni potrebbero essere in lingua inglese) e https://blogs.msdn.com/powershell/archive/2008/12/24/powershell-v2-external-maml-help.aspx (le informazioni potrebbero essere in lingua inglese).

Oltre alla funzione help della riga di comando, è disponibile un file grafico della Guida, WindowsPowerShellHelp.chm, in %SystemRoot%\Help\mui\<LCID> dove LCID è l'identificatore delle impostazioni internazionali relative alla lingua dell'installazione, ad esempio 0410. Per accedere al file grafico della Guida quando si utilizza ISE, selezionare il comando per cui si desidera visualizzare informazioni e quindi premere F1. Verrà aperto il file con estensione chm e verranno visualizzate informazioni della Guida relative al comando, come mostrato nella Figura 5-4.

Il file con estensione chm tuttavia informazioni della Guida solo per i cmdlet principali di Windows PowerShell. Per informazioni specifiche su SharePoint è necessario utilizzare SharePoint 2010 Management Shell e il cmdlet Get-Help.

SuggerimentoTip
Per ulteriori informazioni sulla funzionalità Guida in linea in Windows PowerShell e su come configurarla per visualizzare informazioni sugli alias oppure su come disabilitare la Guida in linea locale e imporre a ISE di ottenere informazioni direttamente da TechNet, vedere https://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2009/01/31/using-help-in-powershell-ise.aspx (le informazioni potrebbero essere in lingua inglese). È sempre consigliabile verificare la Guida online per ottenere le informazioni e gli esempi più recenti. Il collegamento alla versione online è disponibile nella sezione Collegamenti correlati quando si utilizza il comando Get-Help.
Guida di Windows PowerShell

Figura 5-4 Guida grafica di Windows PowerShell

Per individuare i parametri che possono essere utilizzati con un cmdlet, digitare Get-Help <cmdlet> o Get-Command <cmdlet> -syntax, dove <cmdlet> è il nome del cmdlet per il quale si desiderano informazioni sui parametri. Ad esempio, Get-Help New-SPSite o Get-Command New-SPSite -syntax consentono di ottenere informazioni sui parametri associati a New-SPSite. Al cmdlet Get-Help sono inoltre associati alcuni parametri e, in base alla quantità desiderata di informazioni, è possibile utilizzarli con il comando Get-Help. Se si dispone già di una conoscenza approfondita di un cmdlet e non si desidera una spiegazione descrittiva della rispettiva funzionalità, è possibile visualizzare semplicemente esempi di utilizzo del cmdlet, digitando Get-Help New-SPSite -examples.

Per informazioni sui parametri da utilizzare con un cmdlet, esaminare la sezione di risultati della Guida relativa alla sintassi, come mostrato nell'output seguente. I parametri facoltativi sono racchiusi tra parentesi quadre ([ ]) e i valori da passare ai parametri sono racchiusi tra parentesi angolari (<>). Nell'esempio seguente viene mostrata la sezione relativa alla sintassi del cmdlet Get-SPSite.

SYNTAX
    Get-SPSite [-AssignmentCollection <SPAssignmentCollection>] 
    [-Confirm [<SwitchParameter>]] [-Filter <ScriptBlock>] [-Limit <String>]
    [-WebApplication <SPWebApplicationPipeBind>] [-WhatIf [<SwitchParameter>]]
    [<CommonParameters>]

    Get-SPSite -Identity <SPSitePipeBind> [-AssignmentCollection
    <SPAssignmentCollection>] [-Confirm [<SwitchParameter>]] [-Filter <ScriptBlock>]
    [-Limit <String>] [-Regex <SwitchParameter>] [-WhatIf [<SwitchParameter>]]
    [<CommonParameters>]

    Get-SPSite -ContentDatabase <SPContentDatabasePipeBind> [-AssignmentCollection
    <SPAssignmentCollection>] [-Confirm [<SwitchParameter>]] [-Filter <ScriptBlock>]
    [-Limit <String>] [-WhatIf [<SwitchParameter>]] [<CommonParameters>]

    Get-SPSite -SiteSubscription <SPSiteSubscriptionPipeBind> [-AssignmentCollection
    <SPAssignmentCollection>] [-Confirm [<SwitchParameter>]] [-Filter <ScriptBlock>]
    [-Limit <String>] [-WhatIf [<SwitchParameter>]] [<CommonParameters>]

Si noti che è possibile utilizzare Get-SPSite in quattro modi diversi e che ogni sintassi include un parametro -AssignmentCollection. Tale parametro è correlato a un aspetto importante del cmdlet SharePoint incorporato, illustrato in modo più dettagliato nell'intestazione laterale intitolata "Considerazioni sulla memoria per l'utilizzo di Windows PowerShell" più avanti in questo capitolo.

Il primo esempio di sintassi riportato nell'elenco precedente non include alcun parametro obbligatorio. Il cmdlet Get-SPSite avrà pertanto come ambito la farm o l'applicazione Web. Le altre tre sintassi includono un parametro obbligatorio che definisce l'ambito come raccolta siti, database del contenuto oppure raccolta di raccolte siti che sottoscrivono impostazioni, funzionalità e servizi condivisi, come illustrato nel codice seguente. Analogamente all'altro cmdlet SPSite, in un'installazione di grandi dimensioni è possibile che questo cmdlet restituisca come output una quantità elevata di informazioni e le query eseguite in molti database del contenuto potrebbero influire in modo significativo sulle prestazioni dei server SharePoint. Per impostazione predefinita, l'output include pertanto solo i primi 20 oggetti.

È possibile modificare questo limite dell'output utilizzando il parametro -limit, come mostrato nell'esempio seguente, che restituisce come output tutte le raccolte siti archiviate nel database del contenuto Contoso_TeamsDB.

Get-SPSite -ContentDatabase Contoso_TeamsDB -limit all

È possibile specificare i valori per questi parametri relativi all'ambito oppure, nel caso del parametro -identity, il cui valore è un URL, è possibile utilizzare il carattere jolly (*). Il valore help predefinito senza parametri offre una descrizione limitata del comando.

Per visualizzare ulteriori informazioni, utilizzare il parametro -detailed o -full. Il parametro -full offre ulteriori informazioni su parametri. Ad esempio, nella pagina seguente vengono mostrate informazioni aggiuntive sul parametro -identity.

PARAMETERS
    -Identity <SPSitePipeBind>
        Specifies the URL or GUID of the site collection to get.

        The type must be a valid URL, in the form http://server_name or http://
        server_name/sites/sitename, or a valid GUID (for example, 12345678-90ab
        -cdef-1234-567890bcdefgh).

        Required?                    true
        Position?                    1
        Default value
        Accept pipeline input?       True
        Accept wildcard characters?  false

Se si esaminano le ultime cinque righe dell'output, si può notare che include ulteriori informazioni su come utilizzare il parametro -identity. Ad esempio, il valore Required è uguale a True, che indica che il parametro -identity è un parametro obbligatorio per il cmdlet Get-SPSite. Il valore Position è tuttavia uguale a 1 e ciò significa che se si inserisce l'URL di una raccolta siti immediatamente dopo il cmdlet Get-SPSite, non sarà necessario utilizzare il parametro -identity, poiché l'URL verrà letto come identità (URL) di una raccolta siti, in cui vengono visualizzati tutti i valori di proprietà per le raccolte siti disponibili nel percorso gestito personale, come illustrato nell'esempio seguente.

Get-SPSite http://MySite/personal/* | Select *

Molti parametri includono un valore racchiuso tra parentesi angolari, con suffisso PipeBind. Ciò indica che il parametro può accettare un tipo specifico di variabile oggetto. Ad esempio, [-ContentDatabase <SPContentDatabasePipeBind>] indica che il parametro -ContentDatabase può accettare un oggetto del database del contenuto di SharePoint e che tale oggetto può essere passato all'oggetto ContentDatabase come variabile oppure può essere inviato come pipe dai risultati di un altro cmdlet. Quando si invia come pipe un oggetto in un cmdlet, non è necessario digitare o utilizzare una variabile. Quando si invia come pipe un oggetto da un cmdlet a un altro cmdlet, non è necessario specificare il parametro, poiché Windows PowerShell verifica il tipo di oggetto e lo associa al parametro corretto. Nell'esempio seguente vengono elencate tutte le raccolte siti archiviate in qualsiasi database del contenuto nel cui nome siano inclusi i caratteri oso.

Get-SPContentDatabase | where {$_.name -match "oso"} | Get-SPSite -Limit 50

Get-SPContentDatabase restituisce una raccolta di database del contenuto. Sarà quindi necessario verificare ogni database del contenuto per verificare se soddisfa la condizione specificata. Il cmdlet Where-object, i cui alias sono where o ?, funziona come un ciclo e quindi verifica ogni oggetto di database del contenuto restituito dal cmdlet Get-SPContentDatabase. La variabile $_ rappresenta un oggetto del database del contenuto e .name è la proprietà del database del contenuto che deve essere soddisfatta per la query specifica. L'operatore è -match.

Windows PowerShell include alcuni operatori, ad esempio -eq (uguale a), -ne (diverso da), -lt (minore di), -ge (maggiore di o uguale a), -like (corrispondenza con la sequenza con carattere jolly) e -notlike (mancata corrispondenza con la sequenza con carattere jolly). Gli operatori -like, -notlike, -match e -notmatch vengono utilizzati per verificare la corrispondenza con sequenze. Gli operatori -match e -notmatch utilizzano espressioni regolari per determinare se un valore include o meno una corrispondenza per un'espressione.

SuggerimentoTip
Per ulteriori informazioni sugli operatori di Windows PowerShell, vedere la sezione relativa all'utilizzo di espressioni e operatori nel Capitolo 5 relativo all'analisi delle strutture principali di Windows PowerShell nella guida rapida per l'amministratore di Windows PowerShell 2.0 di William Stanek (Microsoft Press, 2009).

Un metodo alternativo rispetto all'utilizzo di un'istruzione WHERE consiste nell'utilizzo del parametro -filter, che ha la stessa sintassi dell'istruzione WHERE e può produrre gli stessi risultati. Il parametro -filter viene tuttavia eseguito nel server. L'invio come pipe dei risultati del cmdlet Get-SPContentDatabase all'istruzione WHERE provoca un round trip SQL alla posizione in cui è in esecuzione il client Windows PowerShell. L'utilizzo del parametro -filter può avere come risultato prestazioni migliori, consentendo al comando di avvalersi delle capacità di filtro di SQL invece di tentare di eseguire una ricerca locale. Quando si utilizza il parametro -filter, è tuttavia possibile accedere alle proprietà Owner, SecondaryOwner e LockState per i cmdlet SPSite. Alcuni cmdlet dispongono di altri parametri che consentono di filtrare l'output risultante. Ad esempio, SPWeb offre i parametri per filtrare l'output nel modello o nel titolo del sito (Web). In molti casi, tuttavia, il parametro -filter consente un risparmio di tempo. L'individuazione di tutti i siti blog di una farm che include 4300 Web richiede ad esempio circa 1,2 secondi se si utilizza il parametro -filter, ma richiede circa 15 minuti se si utilizza un'istruzione WHERE. Di seguito sono riportati alcuni esempi che utilizzano il parametro -filter.

  • Questo esempio restituisce tutte le raccolte siti il cui proprietario principale ha nome utente barbara.

    Get-SPSite -Filter {$_.Owner -eq "contoso\barbara"}

  • Questo esempio restituisce tutti i siti Web disponibili nella raccolta siti http://teams/sites/HR e creati utilizzando il modello Area di lavoro riunioni vuota.

    Get-SPSite http://teams/sites/HR | Get-SPWeb -Filter {$_.Template -eq "STS#03"}

NotaNote
Se non si specifica alcun modello o non è possibile trovare alcun modello quando si crea una nuova raccolta siti, sarà necessario creare un sito Web come radice della raccolta siti. A tale scopo, utilizzare il comando New-SPWeb oppure selezionare il modello di sito appropriato quando si visualizza per la prima volta la raccolta siti nel browser.

Per visualizzare informazioni dettagliate sui modelli installati, insieme agli ID di modello appropriati, utilizzare il cmdlet Get-SPWebTemplate. Di seguito viene mostrato un esempio dell'output di questo comando.

Name                 Title                                    LocaleId   Custom
----                 -----                                    --------   ------
GLOBAL#0             Global template                          1033       False
STS#0                Team Site                                1033       False
STS#1                Blank Site                               1033       False
STS#2                Document Workspace                       1033       False
MPS#0                Basic Meeting Workspace                  1033       False
MPS#1                Blank Meeting Workspace                  1033       False
MPS#2                Decision Meeting Workspace               1033       False
MPS#3                Social Meeting Workspace                 1033       False
MPS#4                Multipage Meeting Workspace              1033       False
CENTRALADMIN#0       Central Admin Site                       1033       False
WIKI#0               Wiki Site                                1033       False
BLOG#0               Blog                                     1033       False
SGS#0                Group Work Site                          1033       False
TENANTADMIN#0        Tenant Admin Site                        1033       False
ACCSRV#0             Access Services Site                     1033       False
ACCSRV#1             Assets Web Database                      1033       False
ACCSRV#3             Charitable Contributions Web Database    1033       False

In Get-SPSite e Get-SPSiteAdministration specificare altri due filtri che utilizzano i filtri basati su SQL, ovvero gli URL con caratteri jolly e il parametro di espressione regolare (-RegEx), ad esempio:

  • Get-SPSite http://intranet/sites/*

  • Get-SPSite "http://intranet/(sites|teams)/HR" -RegEx

Considerazioni sulla memoria per l'utilizzo di Windows PowerShell

Il comportamento predefinito di Windows PowerShell prevede l'esecuzione in un ambiente a thread multipli e l'esecuzione di ogni riga, funzione o script nel proprio thread ($host.Runspace.ThreadOptions == "Default"). Ciò può provocare perdite di memoria. Come è stato illustrato in precedenza in questo capitolo nella sezione "Utilizzo di SharePoint 2010 Management Shell", SharePoint 2010 Management Shell esegue ogni riga, funzione o script primo thread ($host.Runspace.ThreadOptions ="ReuseThread"), in modo da ridurre il problema, anche se sono ancora possibili perdite di memoria. È pertanto consigliabile imparare a utilizzare i cmdlet Start-SPAssignment e Stop-SPAssignment di SharePoint. Tali cmdlet sono correlati al parametro -SPAssignmentCollection, che, come si può notare, viene utilizzato con alcuni cmdlet di SharePoint per restituire un oggetto "Disposable", ovvero un oggetto che implementa l'interfaccia IDisposable. Se tali oggetti non vengono eliminati correttamente, possono provocare perdite di memoria. In particolare, questo problema interessa gli oggetti SPSite, SPWeb e SPSiteAdministration. Se si utilizzano cmdlet associati a questi oggetti in una pipe e non si utilizzano variabili per l'archiviazione degli oggetti, la memoria utilizzata verrà eliminata automaticamente al termine della pipe. Se si utilizza una pipe lunga che ottiene molti oggetti, ciò può provocare un'insufficienza di memoria nel server SharePoint e ciò può avere un effetto significativo sulle richieste di pagine da tale server.

Quando si archivia uno di tali oggetti in una variabile, è pertanto necessario eliminare la memoria assegnata a quell'oggetto. Negli esempi seguenti vengono illustrati i metodi principali di utilizzo di questi oggetti con variabili e viene spiegato come eliminare la memoria.

  • Utilizzare il semplice metodo che prevede l'utilizzo dei cmdlet SPAssignment, nei quali tutti gli oggetti vengono mantenuti in un archivio di memoria globale, che viene rilasciata quando il cmdlet Stop-SPAssignment viene chiamato.

    Start-SPAssignment -Global
    $sc = Get-SPSite http://intranet
    $sc.Title
    Stop-SPAssignment -Global
    
  • Utilizzare il metodo avanzato che prevede l'utilizzo del cmdlet SPAssignment e fare in modo che tenga traccia della memoria assegnata a una variabile specifica. Nell'esempio seguente, il cmdlet Start-SPAssignment crea un archivio con nome a cui fa riferimento $o e la variabile $sc è associata a tale archivio con nome e viene compilata con informazioni relative all'oggetto raccolta siti Internet. Il cmdlet Stop-SPAssignment rilascia quindi la memoria associata all'archivio con nome.

    $o = Start-SPAssignment
    $sc = $o | Get-SPSite http://intranet
    Get-SPSite -Limit all
    $sc.Title
    $o | Stop-SPAssignment
    
  • Se si è abituati allo sviluppo sulla piattaforma di SharePoint, è possibile utilizzare una tecnica analoga a quella adottata nel codice per risolvere questo problema. Ad esempio, utilizzare variabili in una riga di Windows PowerShell e quindi eliminarle al termine di tale riga.

    $sc = New-SPSite("http://Intranet"); $sc.Title; $sc.Dispose()
    

    L'oggetto raccolta siti verrà archiviato nella variabile $sc. Il comando successivo stampa il titolo della raccolta siti Intranet e l'ultimo comando rilascia la memoria in cui è stato archiviato l'oggetto raccolta siti.

    NotaNote
    È possibile eseguire in modo sicuro lo stesso comando utilizzando la sintassi seguente.
    New-SPSite(http://intranet) | Select Title

Si noti che anche il semplice metodo qui illustrato, che prevede la chiamata di SPAssignment, può causare problemi di memoria. Qualsiasi oggetto ottenuto tra i comandi Stop e Stop SPAssignment verrà mantenuto nell'archivio di assegnazioni globale e verrà rilasciato solo dopo l'esecuzione del cmdlet Stop-SPAssignment. Quando invece si utilizza il metodo avanzato che prevede la chiamata di SPAssignment, verrà mantenuta fino all'esecuzione del cmdlet Stop-SPAssignment solo la memoria associata alle variabili di cui SPAssignment deve tenere traccia. Se pertanto si necessita di visualizzare una quantità elevata di informazioni durante il completamento di un'attività e non si desidera sottrarre una quantità eccessiva di memoria al server SharePoint, è consigliabile utilizzare il metodo avanzato basato su SPAssigment. Per ottenere maggiori informazioni, utilizzare Get-Help About_SPAssignment.

SharePoint Foundation 2010 include oltre 240 cmdlet correlati a SharePoint. Per ottenere il numero esatto, digitare il comando seguente.

@(Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell").count

Gli oggetti più comuni modificati da tali cmdlet sono gli oggetti SPSite, SPServer, SPWeb, SPBusinessDataCatalogue e SPConfigurationDatabase. Poiché Windows PowerShell è principalmente uno strumento per amministratori e questi sono componenti gestiti da un amministratore, la diffusione di cmdlet è prevedibile. Questi cmdlet sono disponibili anche in SharePoint 2010, che è basato su SharePoint Foundation.

SuggerimentoTip
I materiali di supporto inclusi in questo manuale contengono un documento di riferimento ai cmdlet di Microsoft SharePoint Foundation 2010. Tale documento include l'output visualizzato se si digita il comando seguente in SharePoint 2010 Management Shell.
PS C:\Users\Peter>Get-Command -PSSnapin Microsoft.SharePoint.PowerShell | 
>>Sort Noun, Verb | Get-Help -detailed > CmdletHelp.txt
>><ENTER>

Questo comando genera un elenco di argomenti della Guida relativi ai cmdlet, ordinato in base al nome. Questo elenco include informazioni della Guida per ogni cmdlet uguali a quelle visualizzate in SharePoint 2010 Management Shell digitando il comando seguente.

Get-Help <Cmdlet-Name> -detailed

Il documento include informazioni della Guida in linea attuali al momento in cui è stato creato. È consigliabile verificare online per ottenere le informazioni e gli esempi più aggiornati. Il collegamento alla versione online è disponibile nella sezione Collegamenti correlati quando si utilizza il comando Get-Help.

Se si utilizza lo stesso comando di Windows PowerShell mostrato nella sezione seguente per determinare il numero dei cmdlet disponibili in SharePoint 2010, verranno rilevati oltre 530 cmdlet correlati a SharePoint associati a SharePoint 2010. In particolare, questo è il numero di cmdlet associati a un'installazione completa di SharePoint 2010 Enterprise Edition senza installazione di FAST Search. Per identificare i cmdlet aggiuntivi offerti da SharePoint, è possibile utilizzare Windows PowerShell. In un computer in cui sono installati sia SharePoint Foundation sia SharePoint Server, digitare il comando seguente, modificando il nome del file di reindirizzamento per riflettere l'installazione di SharePoint.

PS C:\users\peter>Get-Command -PSSnapin "Microsoft.SharePoint.PowerShell" | 
>> Sort noun, verb |group -Property noun -NoElement > cmdlet_sps.txt
>><Enter>

Copiare i file nello stesso server e quindi digitare il comando seguente.

PS C:\Users\Peter>Compare-Object -ReferenceObject $(Get-Content .\cmdlet_sps.txt) ' 
>>-DifferenceObject $(Get-Content .\cmdlet_spf.txt)
>><ENTER>

L'output avrà aspetto analogo a quello dell'esempio seguente.

InputObject                                                 SideIndicator
-----------                                                 -------------
    8 SPContentDatabase                                     =>
    3 PluggableSecurityTrimmer                              <=
    3 SPAccessServiceApplica...                             <=
    9 SPContentDatabase                                     <=
    5 SPContentDeploymentJob                                <=
    4 SPContentDeploymentPath                               <=
    4 SPDataConnectionFile                                  <=
    1 SPDataConnectionFileDe...                             <=
    2 SPEnterpriseSearchAdmi...                             <=
    3 SPEnterpriseSearchLang...                             <=
    4 SPEnterpriseSearchMeta...                             <=
...

L'elenco include solo gli oggetti non presenti in entrambe le installazioni e gli oggetti per i quali il numero di cmdlet per oggetto presenta differenze. La colonna SideIndicator indica il file di origine dell'oggetto con il rispettivo numero di cmdlet.

In SharePoint 2010 gli oggetti più comuni modificati da cmdlet sono simili a quelli disponibili in SharePoint Foundation. I comandi aggiuntivi principali disponibili in SharePoint 2010 sono tuttavia i 131 cmdlet che agevolano la gestione del processo di ricerca. Sono disponibili solo quattro cmdlet associati alle ricerche per SharePoint Foundation. Per una verifica diretta, digitare il comando seguente.

PS C:\Users\Peter>@(gcm -PSSnapin "Microsoft.SharePoint.PowerShell" | 
>>where {$_.name -like "*search*"}).count
>><ENTER>

SharePoint 2010 include un numero di servizi applicazione superiore rispetto a SharePoint Foundation, ad esempio Excel Services, InfoPath Services, Archiviazione protetta, Servizio informazioni sullo stato, Microsoft Visio e PerformancePoint. In una farm di SharePoint Server sono pertanto disponibili più cmdlet utilizzabili per creare, modificare ed eliminare oggetti di servizio applicazioni.

In un'installazione di SharePoint sono necessari due tipi di attività amministrative, ovvero attività che devono essere completate una volta sola da qualsiasi serve, ad esempio la creazione di una nuova applicazione Web, la configurazione del proprietario principale di una raccolta siti o l'eliminazione di un sito Web specifico, e attività che devono essere completate più di una volta su un server specifico o su più server, ad esempio l'avvio di un servizio su un server, l'aggiunta o la rimozione di un server dalla farm oppure la connessione del server a un database di configurazione specifico. La maggior parte delle attività da eseguire in qualità di amministratore di SharePoint appartiene al primo tipo, ovvero non è importante eseguire l'accesso a un server specifico, poiché è possibile completare tali attività da qualsiasi server.

Windows PowerShell semplifica il completamento di entrambi i tipi di attività amministrative. È possibile eseguire un ciclo intorno a un numero elevato di oggetti e incorporare gli script in attività automatizzate, in modo da consentire il completamento delle attività amministrative in un periodo di tempo ridotto. Anche se è possibile che le attività amministrative vengano completate con facilità tramite Windows PowerShell, è tuttavia consigliabile non utilizzare questa modalità per evitare eventuali controlli impostati. Alcune di tali attività a livello di farm sono molto pericolose e possono influire sull'intera installazione. In un ambiente di produzione è consigliabile applicare una rigorosa gestione delle modifiche a tali attività.

ImportanteImportant
Molte organizzazioni consentono il completamento delle attività amministrative solo tramite l'accesso remoto ai server di produzione. L'accesso alla stanza dei computer viene controllato rigorosamente, pertanto l'accesso interattivo alla console server viene consentito raramente, in genere per la risoluzione di problemi relativi all'hardware. In ambienti di questo tipo anche l'accesso remoto ai server di produzione viene limitato a un numero ridotto di computer di amministrazione, a cui gli amministratori devono connettersi tramite VPN o Desktop remoto. È consigliabile configurare un computer di amministrazione in modo da consentire solo a determinati utenti o indirizzi IP di generare sessioni di desktop remoto. Se questo è lo scenario in uso, è inoltre consigliabile limitare la gestione remota dell'installazione di SharePoint tramite Windows PowerShell solo a tale computer di amministrazione. In Windows PowerShell sono disponibili alcune capacità integrate che agevolano la riduzione del rischio relativo ad attività che interessano l'intera installazione di SharePoint. La sezione intitolata "Gestione remota dei sistemi tramite WinRM" disponibile in precedenza in questo capitolo fa riferimento a tali capacità.

Windows PowerShell offre alcune capacità "volontarie", che possono essere classificate come procedure consigliate. Nelle sezioni successive sono disponibili ulteriori informazioni su due di tali capacità, ovvero il parametro -whatif e le trascrizioni.

Windows PowerShell è uno strumento avanzato e, analogamente ad altri linguaggi di scripting, è soggetto al rischio derivante dalla facilità estrema di utilizzo di codice altrui o di download di frammenti di codice da Internet. È possibile che tale codice venga eseguito senza conoscerne esattamente la funzione. Per proteggere le risorse, è possibile utilizzare script firmati e i criteri di esecuzione di Windows PowerShell, oltre a limitare solo ad alcuni utenti la possibilità di caricare file di script nel server SharePoint.

In Windows PowerShell è disponibile un meccanismo che consente di verificare un comando prima di eseguirlo. Si tratta del parametro -whatif. Digitare il comando seguente.

PS C:\Users\Peter> Get-SPSite http://teams/sites/* | Remove-SPSite -whatif

Questo comando produce l'output di esempio seguente, in cui sono elencate tutte le raccolte siti e le operazioni che verrebbero eseguite su questi oggetti se si eseguisse il comando senza specificare il parametro -whatif.

What if: Performing operation "Remove-SPSite" on Target "http://teams/sites/Sales".
What if: Performing operation "Remove-SPSite" on Target "http://teams/sites/Blogs".
What if: Performing operation "Remove-SPSite" on Target "http://teams/sites/Finance".
What if: Performing operation "Remove-SPSite" on Target "http://teams/sites/Wikis".
What if: Performing operation "Remove-SPSite" on Target "http://teams/sites/HR".

Se si verifica il comando con il parametro -whatif, non verrà eliminato nulla. Il parametro richiede al cmdlet Remove-SPSite di visualizzare l'oggetto interessato dall'esecuzione del comando, senza eseguire il comando. In questo esempio vengono visualizzati gli oggetti che verrebbero eliminati in modo permanente.

Due cmdlet di Windows PowerShell, Start-Transcripts e Stop-Transcripts, consentono di registrare tutti i comandi digitati al prompt dei comandi, insieme al relativo output. Vengono registrate tutte le attività eseguite tra i comandi start e stop. Se non si digita stop, la trascrizione verrà terminata al termine della sessione della console. Ciò può risultare molto utile nell'ambiente di produzione, nel quale il profilo a livello di macchina include il cmdlet Start-Transcript per registrare le attività Windows PowerShell di tutti gli utenti. La registrazione nel file di trascrizione risulta completa quando gli utenti escono dalla console.

ImportanteImportant
Non utilizzare per la prima volta un cmdlet o uno script di Windows PowerShell in un ambiente di produzione. È inoltre consigliabile cercare di semplificare, ovvero non utilizzare o creare alias se gli script verranno supportati da amministratori con poca esperienza di Windows PowerShell. Utilizzare inoltre sempre i commenti di Windows PowerShell quando si creano o si modificano gli script.

Mondo reale: Conseguenze del non utilizzo del parametro –whatif

A volte anche i professionisti IT esperti possono utilizzare in modo errato i cmdlet incorporati, con gravi conseguenze, in particolare se i cmdlet vengono utilizzati insieme al carattere di barra verticale. Ad esempio, se si digita Get-SPSite | Remove-SPSite, tutte le raccolte siti della farm verranno eliminate in modo permanente. Verrebbero cancellati tutti i dati negli elenchi e nelle raccolte e tutto il contenuto dei siti Web. Questa azione potrebbe provocare richieste immediate di supporto. Se scomparisse ad esempio il sito Web principale di e-commerce su Internet, l'azienda potrebbe perdere rapidamente molto denaro e, addirittura, potrebbe perdere definitivamente potenziali clienti. Per ripristinare la farm sarebbe necessario utilizzare i nastri di backup più recenti. Questo esempio insegna una semplice lezione: utilizzare sempre prima di tutto il parametro –whatif.

Molte attività amministrative devono essere completate quotidianamente, alcune sono necessarie solo saltuariamente e alcune devono essere eseguite raramente. Windows PowerShell può semplificare l'esecuzione di tutti questi tipi di attività. È in effetti possibile che ci si renda conto che è più importante creare script per un'attività eseguita raramente che per un'attività eseguita ogni giorno. Ciò può essere dovuto alla necessità di eseguire tale attività rara in modo rapido e corretto, poiché le conseguenze di un errore, anche minimo, durante il completamento di tale attività potrebbero essere catastrofiche. In questo manuale sono disponibili molti esempi relativi a quando e come utilizzare Windows PowerShell. Nelle sezioni seguenti vengono illustrati alcuni esempi specifici.

SuggerimentoTip
Una sezione di Microsoft Script Center, all'indirizzo https://gallery.technet.microsoft.com/scriptcenter/it-it (le informazioni potrebbero essere in lingua inglese), include script correlati a SharePoint.

Durante il periodo di utilizzo di un'installazione di SharePoint dovrebbe essere necessario completare alcune attività solo una volta, ad esempio l'installazione di SharePoint e la creazione della farm. In organizzazioni di grandi dimensioni con diversi ambienti e molti sviluppatori da supportare, tuttavia, potrebbe essere consigliabile sviluppare fin dall'inizio script che consentono la creazione dei server Web front-end di SharePoint e dei server applicazioni di SharePoint, che ospitano i servizi applicazioni, ad esempio InfoPath Services e i servizi di query di ricerca e di indicizzazione. Nelle versioni precedenti di SharePoint è possibile completare tali attività utilizzando i file batch e gli strumenti psconfig e stsadm della riga di comando di SharePoint. Questi strumenti possono essere utilizzati anche per automatizzare l'installazione dei server SharePoint 2010 e SharePoint Foundation 2010. Ulteriori informazioni sull'utilizzo di tali strumenti sono disponibili nel Capitolo 4, "Installazione di SharePoint 2010", pertanto non vengono qui forniti dettagli in merito. Microsoft ha tuttavia sviluppato uno script il cui utilizzo è consigliato per la creazione iniziale di una farm di SharePoint tramite Windows PowerShell. L'ordine di esecuzione di questi comandi e parametri può essere complesso ed è pertanto consigliabile utilizzare il modulo di Windows PowerShell, SPModule, illustrato nell'articolo nella libreria Microsoft TechNet all'indirizzo Installare SharePoint Server 2010 tramite Windows PowerShell.

SuggerimentoTip
Per informazioni sull'automatizzazione di SharePoint e sull'utilizzo di psconfig, stsadm e Windows PowerShell, vedere il sito Web all'indirizzo http://stsadm.blogspot.com/ (le informazioni potrebbero essere in lingua inglese).

Quando esegue un'installazione di SharePoint, è possibile che sia necessario unire i registri. I sistemi operativi Windows rendono disponibili registri eventi per agevolare le attività amministrative ed è possibile utilizzare il cmdlet Get-Eventlog di Windows PowerShell per ottenere informazioni dettagliate da tali registri. In SharePoint è inoltre disponibile il servizio ULS (Unified Logging Service), che include tutti gli eventi del registro applicazioni. È inoltre possibile integrare in tali registri il software di registrazione di terze parti. SharePoint 2010 include alcuni cmdlet di Windows PowerShell per il recupero di informazioni e per la configurazione di ULS. Per verificare la configurazione di ULS nella farm in uso, digitare il comando seguente. Di seguito viene mostrato l'output di esempio di questo comando.

Get-SPDiagnosticConfig

AllowLegacyTraceProviders                   : False
CustomerExperienceImprovementProgramEnabled : True
ErrorReportingEnabled                       : True
ErrorReportingAutomaticUploadEnabled        : True
DownloadErrorReportingUpdatesEnabled        : True
DaysToKeepLogs                              : 14
LogMaxDiskSpaceUsageEnabled                 : True
LogDiskSpaceUsageGB                         : 3
LogLocation                                 : %CommonProgramFiles%\Microsoft Sh
                                             ared\Web Server Extensions\14\LOG
                                             S\
LogCutInterval                              : 30
EventLogFloodProtectionEnabled              : True
EventLogFloodProtectionThreshold            : 5
EventLogFloodProtectionTriggerPeriod        : 2
EventLogFloodProtectionQuietPeriod          : 2
EventLogFloodProtectionNotifyInterval       : 5
ScriptErrorReportingEnabled                 : True
ScriptErrorReportingRequireAuth             : True
ScriptErrorReportingDelay                   : 60
 AllowLegacyTraceProviders                   : FalseCustomerExperienceImprovementProgramEnabled : TrueErrorReportingEnabled                       : TrueErrorReportingAutomaticUploadEnabled        : TrueDownloadErrorReportingUpdatesEnabled        : TrueDaysToKeepLogs                              : 14LogMaxDiskSpaceUsageEnabled                 : TrueLogDiskSpaceUsageGB                         : 3LogLocation                                 : %CommonProgramFiles%\Microsoft Sh                                             ared\Web Server Extensions\14\LOG                                             S\LogCutInterval                              : 30EventLogFloodProtectionEnabled              : TrueEventLogFloodProtectionThreshold            : 5EventLogFloodProtectionTriggerPeriod        : 2EventLogFloodProtectionQuietPeriod          : 2EventLogFloodProtectionNotifyInterval       : 5ScriptErrorReportingEnabled                 : TrueScriptErrorReportingRequireAuth             : TrueScriptErrorReportingDelay                   : 60

Durante la diagnosi di un problema è possibile utilizzare i cmdlet associati all'oggetto SPLogEvent. Per eseguire tali cmdlet sono necessari privilegi di amministratore della macchina. È pertanto possibile che sia necessario avviare SharePoint 2010 Management Shell utilizzando l'opzione Esegui come amministratore. Utilizzare quindi i comandi attenendosi a una procedura analoga a quella illustrata nell'esempio seguente.

  1. Configurare due variabili per l'archiviazione dei valori relativi ad esempio al giorno di inizio e alla data di fine.

    $SDate = Get-Date -Day 13 -Month 04 -Year 2010
    $EDate = Get-Date -Day 14 -Month 04 -Year 2010
    

    In alternativa, è possibile specificare la data odierna, ma per un evento che si è verificato circa 15 minuti prima rispetto all'ora corrente. In tale caso, è necessario impostare la variabile su 20 minuti prima dell'ora corrente e 10 minuti prima dell'ora corrente.

    $SDate = (Get-Date).AddMinutes(-20)
    $EDate = (Get-Date).AddMinutes(-10)
    
  2. Ottenere un elenco di eventi verificatisi nell'intervallo incluso tra tali due date e orari.

    Get-SPLogEvent -StartDate $SDate -EndTime $Edate

    Se il parametro -EndTime non viene specificato, i registri eventi verranno visualizzati fino alla data e all'ora correnti.

Un numero di controllo, definito ID correlazione, viene associato a ogni richiesta per SharePoint. Tale numero viene archiviato come valore in una proprietà associata all'oggetto SPLogEvent. Gli ID correlazione vengono mostrati anche nelle tracce di SQL Profiler. Questo numero viene visualizzato in una pagina di errore, come mostrato nella Figura 5-5.

Messaggio di errore di SharePoint Foundation

Figura 5-5 Pagina di errore con ID correlazione

In installazioni di SharePoint di grandi dimensioni o a utilizzo elevato è possibile che molti registri vengano prodotti durante il verificarsi di un problema. È possibile utilizzare il valore di ID correlazione per agevolare la risoluzione degli errori, riducendo la quantità di informazioni del registro restituite alle voci associate al problema. È necessario impostare le variabili $sdate e $edate in modo da riflettere il periodo in cui si è verificato il problema. Nel caso di un problema che non si è in grado di riprodurre ma che può essere sempre riprodotto da uno degli utenti, è possibile richiedere al supporto tecnico di ottenere una schermata della pagina di errore da parte dell'utente, in modo da assicurarsi di ottenere il numero esatto di ID correlazione. È quindi possibile inviare come pipe al cmdlet Where-Object i risultati del comando mostrato nel passaggio 2, come illustrato nell'esempio seguente.

PS C:\Users\Peter>Get-SPLogEvent -StartDate $SDate -EndTime $EDate |
  where {$_.Correlation -eq "68bc5cf4-5a8c-4517-a879-86e35e57c862"}

Nell'output verranno visualizzati solo i registri eventi inclusi tra le due date relative al problema associato a tale ID correlazione.

Dopoo l'esecuzione della Configurazione guidata Prodotti SharePoint 2010 per installare SharePoint nei server, è possibile utilizzare il sito Web Amministrazione centrale di SharePoint 2010 per avviare la Configurazione guidata farm, che consente di iniziare a utilizzare rapidamente la farm, anche se è possibile che la farm non venga configurata come si desidera. Ad esempio, il formato dei nomi di database creati sarà nome_GUID, dove GUIDè un identificatore univoco globale, generato casualmente. Durante la Configurazione guidata farm viene inoltre utilizzato l'account immesso come Identità pool di applicazioni per l'applicazione Web del contenuto predefinita e viene avviato per impostazione predefinita il servizio Web Analytics. È possibile che tutto ciò non sia desiderabile in una farm di produzione.

L'utilizzo della procedura guidata può essere sufficiente se si desidera creare un prototipo rapido o se si utilizza SharePoint in un ambiente di sviluppo. Se tuttavia tali ambienti presentano risorse CPU limitate o poca memoria disponibile, è possibile che non sia consigliabile eseguire la configurazione guidata della farm. Ad esempio, il servizio Web Analytics utilizza una quantità elevata di CPU, pertanto è possibile che gli sviluppatori desiderino interrompere tale servizio. È inoltre possibile che desiderino avviare e interrompere altri servizi su base regolare, in particolare se utilizzano i propri computer come connessioni desktop quotidiane, per la lettura dei messaggi di posta elettronicaa e il completamento della documentazione, oltre che per l'esecuzione di SharePoint per lo sviluppo o per la creazione di prototipi.

Per gestire la configurazione, è possibile utilizzare strumenti quali il sito Web Amministrazione centrale. È tuttavia possibile dimenticare di eseguire tutte le attività necessarie per il completamento di una modifica alla configurazione. L'utilizzo degli script di Windows PowerShell, dopo averli testati per verificare di non aver dimenticato alcuna attività, potrebbe invece rendere più affidabile e priva di errori la gestione delle modifiche alla configurazione. Dopo lo sviluppo, è consigliabile archiviare tali script in una posizione centrale, in modo da agevolarne l'utilizzo e l'inclusione negli ambienti da parte di altri amministratori. Questi script potrebbero risultare utili anche agli sviluppatori. Le attività automatizzate possono includere gli elementi seguenti.

  • Per eliminare rapidamente un'applicazione Web specifica, digitare

    Get-SPWebApplication http://teams | Remove-SPWebApplication –Confirm

  • Per rimuovere l'applicazione Web, il sito Web IIS e tutti i database associati, digitare

    Remove-SPWebApplication http://teams –Confirm –DeleteIISSite ' -RemoveContentDatabases

Se non si esegue la Configurazione guidata farm, è possibile che un servizio che non si riteneva necessario risulti necessario. Ad esempio, se non viene avviato alcun servizio applicazione e si tenta di utilizzare uno dei flussi di lavoro di SharePoint 2010, non verrà visualizzato il diagramma di Microsoft Visio relativo allo stato del flusso di lavoro. Per risolvere questo problema, non sarà tuttavia sufficiente creare il servizio applicazione Visio. È necessario tenere conto di altre dipendenze, ad esempio l'applicazione servizio informazioni sullo stato. I servizi relativi allo stato possono essere creati solo nel sito Amministrazione centrale, utilizzando la Configurazione guidata farm. In qualità di amministratore, si desidera evitare tale situazione. Per creare il servizio relativo allo stato utilizzando Windows PowerShell, digitare i comandi seguenti.

PS: C:\Users\Peter>New-SPStateServiceDatabase -Name Contoso_StateService_DB |
>>New-SPStateServiceApplication -Name Contoso_StateService |
>>New-SPStateServiceApplicationProxy -Name Contoso_StateService_Proxy -Default
>><ENTER>
NotaNote
È possibile che questo comando non funzioni nell'ambiente in uso se l'instanza del servizio associato non è in esecuzione. Per uno script più completo, vedere la pagina Web relativa alla creazione di un'applicazione di servizio con PowerShell, intitolata "SP+PS 2010: PowerShell to Create a Service Application", all'indirizzo https://sharepoint.microsoft.com/blogs/zach/Lists/Posts/Post.aspx?ID=50 (le informazioni potrebbero essere in lingua inglese).

Ogni applicazione di servizio presenta lievi differenze rispetto alle altre. Ad esempio, non tutte le applicazioni di servizio necessitano di un database. Nel Capitolo 7, intitolato "Scalabilità orizzontale di una farm di SharePoint", sono disponibili ulteriori informazioni in merito. Ogni servizio necessiterà tuttavia di un proxy dell'applicazione di servizio, che connette un'applicazione Web all'applicazione di servizio.

Nelle sezioni seguenti sono disponibili informazioni su alcuni comandi di Windows PowerShell che possono risultare utili durante un aggiornamento. Il processo di aggiornamento viene illustrato in dettaglio nel Capitolo 22, intitolato "Aggiornamento a SharePoint 2010".

Dopo avere installato SharePoint 2010 e prima di eseguire l'aggiornamento è possibile utilizzare il cmdlet Test-SPContentDatabase per verificare la presenza di problemi attuali o potenziali nei database di SharePoint Server 2007, ad esempio dati isolati, definzioni di siti mancanti, funzionalità mancanti o assembly mancanti. Questo cmdlet è complementare al report di controllo pre-aggiornamento citato nel Capitolo 22. La ricerca di tali problemi non interferisce con l'installazione di SharePoint e questo cmdlet consente anche di verificare lo stato dei database di SharePoint 2010. Ciò può risultare utile per la verifica e la gestione dell'integrità continua dell'ambiente. Nell'esempio seguente vengono mostrati il comando e il rispettivo output di esempio.

Test-SPContentDatabase -name W_intranet -WebApplication http://www.contoso.msft

Category        : SiteOrphan
Error           : True
UpgradeBlocking : False
Message         : Database [W_intranet] contains a site (Id = [46ad6d70-9a5c-4d
                  e0-8daa-0f73f2466a6a], Url = [/]) whose id is already associa
                  ted with a different database (Id = [6987d2d8-6291-4ead-9eb0-
                  aefe7097a58e], name = [W_Intranet]) in the site map. Consider
                  deleting one of these sites which have conflicting ids.
Remedy          : The orphaned sites could cause upgrade failures. Try detach a
                  nd reattach the database which contains the orphaned sites. R
                  estart upgrade if necessary.

Category        : SiteOrphan
Error           : True
UpgradeBlocking : False
Message         : Database [W_intranet] contains a site (Id = [46ad6d70-9a5c-4d
                  e0-8daa-0f73f2466a6a], Url = [/]) whose url is already used b
                  y a different site, in database (Id = [6063e77c-991f-4c4b-b3a
                  c-68cb62e66502], name = [w_Internet]), in the same web applic
                  ation. Consider deleting one of the sites which have conflict
                  ing urls.
Remedy          : The orphaned sites could cause upgrade failures. Try detach a
                  nd reattach the database which contains the orphaned sites. R
                  estart upgrade if necessary.

Il processo di aggiornamento è suddiviso in due componenti, ovvero l'aggiornamento del database del contenuto e la Console di aggiornamento. La suddivisione di tali componenti consente al team responsabile di SharePoint di decidere di aggiornare l'applicazione Web Microsoft Office SharePoint Server 2007 senza che gli utenti percepiscano il cambiamento, poiché i siti manteranno lo stesso aspetto e le stesse caratteristiche. L'utilizzo del browser consente di visualizzare l'anteprima dell'aspetto dei siti nella nuova versione di SharePoint 2010 e quindi di decidere quando passare in modo definitivo alla Console di aggiornamento. Dopo tale passaggio, il browser non consentirà il ritorno alla versione di SharePoint Server 2007.

Il cmdlet Set-SPWeb non include parametri per agevolare questa attività. Per completare questa attività, sarà necessario utilizzare le proprietà dell'oggetto SPWeb. Se si desidera tornare all'aspetto e alle caratteristiche precedenti dei siti, digitare i comandi seguenti.

Start-SPAssignment -Global
$web = Get-SPWeb http://teams ;
$web.UIVersion = 3;
$web.UIVersionConfigurationEnabled = $true;
$web.Update();
Stop-SPAssignment
NotaNote
In precedenza in questo capitolo sono state create variabili per l'archiviazione di valori e oggetti. I nomi delle variabili hanno come prefisso il simbolo del dollaro, $. Nell'esempio di codice riportato di seguito viene utilizzata la variabile $true. Tale variabile, insieme ad alcune altre parole chiave con aspetto analogo alle variabili, è un esempio di variabile speciale. È necessario gestire una variabile speciale come una parola riservata, da non utilizzare negli script per l'archiviazione di valori o oggetti. La variabile speciale $true rappresenta il valore True, $false rappresenta False, $null rappresenta null. In questo capitolo è stato utilizzato anche $_, che include il valore corrente di pipelineobject e viene utilizzato in blocchi di script, filtri e nel cmdlet Where.

Dopo l'esecuzione di questi comandi, per il sito Web verranno ripristinati l'aspetto e le caratteristiche di SharePoint Server 2007. Il pulsante Azioni sito, ad esempio, sarà situato nell'angolo superiore destro, invece che nell'angolo superiore sinistro. Nel menu Azioni sito sarà disponibile l'opzione Console di aggiornamento, benché sia possibile che tale opzione non sia abilitata a livello di raccolta siti. Per abilitare l'opzione Console di aggiornamento a livello di raccolta siti, utilizzare i comandi seguenti.

$site = Get-SPSite http://teams
$site.UIVersionConfigurationEnabled = $true

Quando si aggiornano le proprietà dell'oggetto SPSite non è disponibile alcun metodo di aggiornamento. Le modifiche apportate alle proprietà di SPSite vengono applicate immediatamente. In alternativa alle due righe di comandi precedenti, è possibile digitare la riga seguente.

(Get-SPSite http://teams).UIVersionConfigurationEnabled = $false

Per ripristinare l'aspetto e le caratteristiche di SharePoint Server 2007 per tutti i siti Web del "team" in una raccolta siti, utilizzare il comando seguente.

PS C:\Users\zzspfarm> Get-SPsite http://teams |
>> Get-SPWeb -Filter {$_.Template -eq "STS#0}|
>> ForEach-Object {
>> $_.UIVersion =3;
>> $_.UIVersionConfigurationEnabled = $false;
>> $_.Update();
>> }
>><ENTER>
NotaNote
Questi comandi possono essere eseguiti anche in una raccolta siti o un sito non sottoposto ad aggiornamento, ovvero in un sito creato come sito di versione 4, rendendo pertanto l'aspetto di un sito di SharePoint 2010 analogo a quello di un sito di SharePoint 2007.

In questo capitolo viene descritto come acquisire familiarità con i nuovi cmdlet di Windows PowerShell introdotti in SharePoint 2010. Viene esaminato SharePoint 2010 Management Shell e viene spiegato come eseguire alcune attività amministrative semplici ma efficati utilizzando comandi di una riga di Windows PowerShell.

Sono disponibili oltre 500 cmdlet di SharePoint. Non è ovviamente possibile illustrare ogni comando in questo capitolo. Lo scopo del capitolo è invece di offrire linee guida generali e procedure consigliate per l'utilizzo di SharePoint PowerShell in un ambiente di produzione, ad esempio la configurazione e l'utilizzo della gestione remota, l'utilizzo volontario delle trascrizioni e l'utilizzo del parametro –whatif. È consigliabile non esercitarsi o provare a utilizzare per la prima volta i comandi di Windows PowerShell nell'ambiente di produzione. È opportuno mantenere semplici gli script, utilizzare commenti per documentare gli script e non utilizzare o creare alias se gli script saranno supportati da amministratori con poca esperienza di Windows PowerShell.

In questo capitolo sono state fornite informazioni dettagliate su due importanti cmdlet, Start-SPAssignment e Stop-SPAssignment. Tali cmdlet agevolano l'utilizzo di cmdlet che restituiscono oggetti Disposable, ad esempio SPSite, SPWeb e SPSiteAdministration. Sono stati inoltre presentati altri cmdlet di SharePoint, al fine di approfondire la conoscenza delle tecniche di Windows PowerShell techniques. Il Capitolo 12 è una prosecuzione di questo capitolo e utilizza scenari di ricerca. Nel capitolo seguente prosegue la illustrazione della gestione delle farm di SharePoint 2010 e in particolare dell'interfaccia di Amministrazione centrale.

Mostra: