Exchange Server 2007

Prendere il comando con l'Exchange Management Shell

David Strome

 

Panoramica:

  • Funzionamento dell'Exchange Management Shell
  • Utilizzo dei cmdlet
  • Differenze tra cmdlet e comandi

Gli amministratori di ambienti Exchange hanno di certo già sentito parlare della nuova interfaccia a riga di comando di Exchange Server 2007, denominata Exchange Management Shell. Derivata dalla tecnologia Microsoft Windows PowerShell, l'Exchange

Management Shell è una potente interfaccia per la gestione di qualsiasi aspetto di Exchange Server 2007 da una riga di comando. Consente infatti di interagire direttamente con l'Exchange Management Shell, scrivere script per l'automazione delle operazioni o integrare le applicazioni già esistenti con il modulo sottostante. Nella Figura 1 è illustrata la shell al lavoro.

Figura 1 L'Exchange Management Shell

Figura 1** L'Exchange Management Shell **(Fare clic sull'immagine per ingrandirla)

Con l'Exchange Management Console non si utilizza l'Exchange Management Shell per l'esecuzione delle operazioni, ma nelle procedure guidate vengono mostrati i comandi in esecuzione. È sufficiente copiare i comandi creati dalla procedura guidata e incollarli direttamente nella riga di comando o in uno script. Dopo aver modificato i parametri secondo necessità, è possibile sottoporre a test gli script o i comandi utilizzando il parametro WhatIf, che consente di visualizzare i risultati prima di apportare modifiche all'ambiente.

L'Exchange Management Shell costituisce una piattaforma di scripting solida e flessibile da integrare con le soluzioni di scripting giù in uso e consente di comunicare in modo nativo con origini dati come COM e Strumentazione gestione Windows (WMI). Per l'Exchange Management Shell, basata su .NET Framework, si utilizzano i cmdlet, l'unità di funzionalità più piccola dell'Exchange Management Shell, per accettare e restituire dati strutturati invece di testo semplice. I cmdlet verranno analizzati in maggior dettaglio in seguito.

Snap-in di Windows PowerShell

Il primo passo per la comprensione del funzionamento dell'Exchange Management Shell è l'analisi delle relazioni con Windows PowerShell™, una nuova interfaccia a riga di comando potente e flessibile basata su .NET Framework in cui si combinano le migliori funzionalità di altre shell con molte nuove e utili funzioni. Windows PowerShell è stato progettato in modo da costituire un host per altre applicazioni, come già Microsoft Management Console (MMC) agisce da host per i vari snap-in forniti con le applicazioni. Exchange Management Shell è il primo snap-in di Windows PowerShell realizzato.

Gli snap-in sono raccolte di cmdlet utilizzati per l'amministrazione di un'applicazione o di un componente principale. Non è possibile utilizzarli senza prima caricarli. È, per fortuna, molto facile avviare lo snap-in Exchange Management Shell, ma prima di considerare questo aspetto è necessario spiegare alcuni concetti chiave da comprendere per un corretto utilizzo dell'Exchange Management Shell.

I cmdlet sono simili ai comandi incorporati di altre shell, ad esempio, il comando dir in cmd.exe. Come i comandi già noti di cmd.exe, i cmdlet possono essere chiamati dalla riga di comando nell'Exchange Management Shell ed eseguiti nel contesto della shell e non come processi separati. A differenza dei comandi delle altre shell, i nomi dei cmdlet sono una combinazione descrittiva di verbo-nome. Il verbo descrive l'azione eseguita dal cmdlet, mentre il nome descrive il componente o la funzione su cui agisce.

Non è necessario tirare a indovinare sulla funzione di un cmdlet. Quando si legge Move-Mailbox, si intuisce subito l'operazione che viene eseguita da questo cmdlet.

Per ulteriori informazioni sulle differenze tra cmdlet e comandi normali, leggere il riquadro "Differenze tra cmdlet e comandi", tratto dalla sezione dedicata a .NET Framework 3.0 del SDK di Windows® e consultabile all'indirizzo windowssdk.msdn.microsoft.com/en-us/library/ms714395.aspx (in inglese).

Parametro posizionale Identity È possibile utilizzare il parametro Identity in quasi tutti i cmdlet correlati a Exchange. Il parametro consente di accedere agli identificativi univoci che si riferiscono a un particolare oggetto di Exchange Server 2007, in modo che sia possibile eseguire delle azioni su un oggetto Exchange specifico impostando il valore desiderato.

In Identity si raccolgono valori di altri parametri univoci entro l'intero insieme di oggetti. È possibile specificare i valori di questi altri parametri, ad esempio per Name e DistinguishedName, oppure lasciare che vengano generati dal sistema, come per il GUID. Gli eventuali parametri aggiuntivi utilizzati e le modalità di compilazione dipendono dall'oggetto a cui si fa riferimento.

Il parametro Identity viene inoltre considerato un parametro posizionale, ovvero un parametro che consente di specificare il valore senza la necessità di specificare il nome. Un parametro viene considerato posizionale quando l'attributo Parameter Position è un numero intero. Il numero intero indica la posizione nella riga di comando in cui il cmdlet trova il valore del parametro. Poiché Identity è un parametro posizionale che risiede nella posizione 0, ovvero nella prima posizione, gli eventuali valori immessi in questa posizione senza nome del parametro vengono considerati valori del parametro Identity. Il numero di digitazioni necessarie per la scrittura dei comandi viene così drasticamente ridotto. Ad esempio

Get-Mailbox –Identity "Kim Akers" 

esegue la medesima azione di:

Get-Mailbox "Kim Akers"

Pipelining Il pipelining nell'Exchange Management Shell avviene quando un cmdlet utilizza l'output di un altro cmdlet per eseguire un'operazione. Il pipelining viene specificato nei comandi con il simbolo pipe "|". L'utilizzo di informazioni ottenute con un altro comando e passate tramite pipe è consentito con tutti i verbi del medesimo insieme nome-cmdlet. Alcuni insiemi di nome-cmdlet consentono inoltre di passare i dati tramite pipeline a un altro insieme nome-cmdlet.

L'utilizzo del pipelining per correlare le azioni di due o più cmdlet consente di assumere piccoli componenti e convertirli in comandi o script più complessi. È possibile, ad esempio, utilizzare un cmdlet per raccogliere dati, passare i dati raccolti a un secondo cmdlet che applica un filtro per selezionarne solo una parte e, infine, passare i dati selezionati a un terzo cmdlet che esegue un'operazione sui dati selezionati.

Avvio dell'Exchange Management Shell

La modalità più semplice di avvio della shell consiste nel fare clic su Start, Programmi, Microsoft Exchange Server 2007 e infine su Exchange Management Shell.

È tuttavia possibile caricare manualmente lo snap-in Exchange Management Shell da una sessione di Windows PowerShell. Fare clic su Start, Programmi e Windows PowerShell. Dopo l'avvio, caricare Exchange Management Shell eseguendo il comando:

Add-PSSnapin Microsoft.Exchange.Management.PowerShell.Admin

Esistono alcune differenze tra il caricamento dello snap-in Exchange Management Shell dal menu Programmi o tramite il cmdlet Add-PSSnapin. Quando si utilizza il menu Programmi, non viene caricato solo lo snap-in Exchange Management Shell, ma anche uno script di Windows PowerShell per l'impostazione di un ambiente di amministrazione di Exchange personalizzato. Per configurare un ambiente di amministrazione simile dopo il caricamento manuale di Exchange Management Shell, è necessario passare alla directory di installazione bin di Exchange, ad esempio C:\Programmi\Microsoft\Exchange Server\Bin, ed eseguire il comando:

.\Exchange.ps1

Per un esempio di personalizzazione dell'ambiente Windows PowerShell, vedere lo script Exchange.ps1. Quando si carica l'Exchange Management Shell, il risultato sarà simile alla Figura 2.

Figura 2 Schermata iniziale di Exchange Management Shell

Figura 2** Schermata iniziale di Exchange Management Shell **(Fare clic sull'immagine per ingrandirla)

Prime operazioni

Poiché nella shell è disponibile un'ampia gamma di cmdlet, il cmdlet Get-Help e il file della Guida di Exchange Server 2007 sono risorse preziose. Nella sezione Operazioni del file della Guida di Exchange Server 2007 sono disponibili moltissime procedure illustrate per le attività di amministrazione più comuni.

Quando si digita Get-Help, si ottengono informazioni di carattere generale su come accedere alle informazioni della Guida. Per ottenere informazioni su un cmdlet specifico, digitare Get-Help seguito dal cmdlet desiderato. È possibile controllare le informazioni visualizzate utilizzando i parametri Detailed, Full ed Example. È sufficiente aggiungerli alla fine del comando. Con Get-Help nome cmdlet –Full, ad esempio, si ottengono tutte le sezioni della Guida disponibili per il cmdlet.

Per recuperare informazioni su uno o più parametri specifici di un cmdlet, è possibile aggiungere a Get-Help il parametro Parameters. Quando, ad esempio, si desidera visualizzare tutti i parametri e le relative descrizioni per il cmdlet Set-Mailbox che contengano la parola "quota", è possibile utilizzare il comando:

Get-Help Set-Mailbox –Parameter *quota*

È inoltre possibile visualizzare un elenco dei cmdlet che consentono di gestire un ruolo del server o una funzionalità del componente specifica oppure che influiscono sugli oggetti di un determinato ambito o funzionalità. Il cmdlet Get-Help consente di eseguire queste operazioni con tre parametri: Role, Component e Functionality. Quando si utilizza il cmdlet Get-Help con questi parametri, è necessario inserire i valori specificati dai parametri tra caratteri jolly "*". I seguenti sono esempi dell'utilizzo di Get-Help con ciascuno dei tre parametri:

Get-Help -Role *Mailbox*
Get-Help -Component *Recipient*
Get-Help -Functionality *Server*

Per ulteriori informazioni, consultare l'argomento sull'utilizzo della Guida in linea del file della Guida di Exchange Server 2007 dove è possibile trovare un elenco di tutti i valori di ruoli, componenti e funzionalità che è possibile utilizzare.

Formattazione dell'output dei comandi

Per impostazione predefinita, quando l'output viene visualizzato sullo schermo, nell'Exchange Management Shell viene visualizzata solo una parte delle proprietà disponibili per ciascun oggetto. È tuttavia possibile accedere a tutte le proprietà passando tramite pipeline l'output di un comando ai tre seguenti cmdlet di formattazione: Format-List, Format-Table e Format-Wide. Si esamineranno qui Format-List e Format-Table, che sono di utilizzo più frequente.

Quando si passa l'input dalla pipeline al cmdlet Format-List, si ottiene come output un elenco in colonne verticali con tutte le proprietà specificate di ciascun oggetto. È possibile specificare le proprietà che si desidera visualizzare utilizzando il parametro Property (anche il parametro Property, tuttavia, è un parametro posizionale, quindi è sufficiente specificare solo i valori senza il nome del parametro). Se il cmdlet Format-List viene chiamato senza specificare alcun parametro, nell'output saranno visualizzate tutte le proprietà. Nell'output del cmdlet si utilizza il ritorno a capo del testo delle righe, senza troncamenti. Format-List è particolarmente utile quando si desidera sostituire l'output predefinito di un cmdlet per recuperare informazioni aggiuntive o più dettagliate. Ad esempio,

Get-DistributionGroup | Format-List Name, *OnlyFrom, 
PrimarySmtpAddress, *Size*

Nella Figura 3 è illustrato l'output di questo comando.

Figura 3 Esempio di output di Format-List

Figura 3** Esempio di output di Format-List **(Fare clic sull'immagine per ingrandirla)

Il cmdlet Format-Table consente di visualizzare l'output in una tabella, completa di intestazioni e colonne di dati delle proprietà. Per impostazione predefinita, per molti cmdlet, come Get-Mailbox e Get-JournalRule, è previsto un output in formato tabellare. Tra i parametri del cmdlet Format-Table è opportuno segnalare Properties e GroupBy. Il funzionamento di questi parametri è identico a quello illustrato per il cmdlet Format-List. Per ottenere la visualizzazione completa delle informazioni delle righe più lunghe senza troncamenti, è possibile utilizzare il parametro Wrap nel modo seguente:

Get-Mailbox –Database Research | Format-Table Name, 
ProhibitSendQuota, Database –Wrap 

L'output è riportato nella Figura 4.

Figura 4 Esempio di output di Format-Table

Figura 4** Esempio di output di Format-Table **(Fare clic sull'immagine per ingrandirla)

Se si inserisce un carattere jolly, sarà possibile specificare più proprietà senza digitarne singolarmente il nome. Con il comando seguente, ad esempio, si ottengono tutte le proprietà che iniziano per E-mail:

Get-Mailbox | Format-List Email* 

Esercitazioni

Ora che si sono apprese le funzionalità di alcuni comandi di base, è possibile esercitarsi con gli esempi riportati di seguito, che dimostrano la potenza e la flessibilità dell'Exchange Management Shell e consentono di fare un po' di pratica.

Con il primo comando si creeranno 10 utenti, con nomi da User1 a User10:

1..10 | ForEach { Net User "User$_" MyPassword=01 /ADD 
/Domain; Enable-Mailbox "User$_" -Database "Mailbox 
Database" }

Esaminiamo le diverse parti dello script. Con il comando 1.0 si ottiene come output la serie di numeri interi da 1 a 10 che viene quindi passata tramite pipeline al cmdlet ForEach. L'applicazione del cmdlet ForEach a ciascun oggetto ricevuto consente di eseguire i comandi compresi tra parentesi graffe { } per ciascuno degli oggetti. Con il comando Net User si crea un nuovo utente del dominio, mentre con il cmdlet Enable-Mailbox si crea una nuova cassetta postale nel "Mailbox Database" del server locale. Un punto e virgola separa i due comandi, in modo che sia possibile inserirli nella stessa riga. $_ è una variabile speciale che contiene il valore dell'oggetto corrente nella pipeline. Nell'esempio la variabile $_ contiene il numero intero corrente nella pipeline.

Nell'esempio successivo sarà possibile visualizzare le cassette postali residenti sul server MBX e ottenere nome, database delle cassette postali e quota per ciascuna cassetta postale.

Get-Mailbox –Server MBX | Format-Table 
Name,Database,*quota*

Con il cmdlet Get-Mailbox si ottiene ciascuna cassetta postale specificata con il parametro Server, quindi gli oggetti cassette postali dell'output vengono passati tramite pipeline al cmdlet Format-Table. Per impostazione predefinita, con il cmdlet Format-Table si visualizzano tutte le proprietà restituite da un cmdlet, a meno che non si specifichino le proprietà da visualizzare. In questo caso sono state richieste solo le proprietà Name e Database, oltre a tutte le proprietà che contengono la stringa "quota". Nella Figura 5 è mostrato il possibile aspetto dell'output.

Figura 5 Output del comando Get-Mailbox

Figura 5** Output del comando Get-Mailbox **(Fare clic sull'immagine per ingrandirla)

Con l'esempio si imposta il limite della quota di invio a 600 MB per tutti gli utenti con la posta elettronica abilitata dell'intera organizzazione con la parola "Manager" compresa nel titolo.

Get-User –Filter { Title –Like "*Manager*"} 
–RecipientTypeDetails UserMailbox | Set-Mailbox 
–ProhibitSendQuota 600MB

Se eseguito da solo, il cmdlet Get-User restituisce tutti gli oggetti utente in Active Directory, compresi gli utenti con la cassetta postale non abilitata. Per recuperare solo l'insieme di oggetti utente da passare al cmdlet Set-Mailbox, è necessario specificare che con il cmdlet Get-User si intende estrarre solo gli oggetti utente Active Directory che sono utenti di posta abilitati. Il parametro RecipientTypeDetails consente di specificare il tipo di destinatario di Active Directory, in questo caso, UserMailbox. Quindi è necessario recuperare l'insieme di utenti Manager con la posta abilitata. Nell'esempio la proprietà Title di ciascun oggetto utente di Active Directory è compilata. È possibile utilizzare questo valore per determinare quali utenti sono manager impostando il parametro Filter, con cui si richiede al server di restituire solo gli oggetti Active Directory che corrispondono ai criteri specificati. Questa operazione viene definita filtraggio sul lato server. L'insieme di oggetti ottenuto viene quindi passato al cmdlet Set-Mailbox, con cui si imposta a 600 MB la proprietà ProhibitSendQuota per ciascuna cassetta postale.

A questo punto è possibile analizzare il risultato di un comando che consente di eseguire un test di rimozione di tutte le cassette postali membri di un gruppo di distribuzione. Ecco il comando:

Get-DistributionGroupMember "Fourth Year Students" |
 Where { $_.RecipientType –Eq "UserMailbox" } | Remove-
 Mailbox -WhatIf

Con il primo cmdlet si recuperano gli oggetti destinatario membri del gruppo di distribuzione Fourth Year Students. Quindi si passano al cmdlet Remove-Mailbox solo gli oggetti destinatario che corrispondono al RecipientType "UserMailbox". Invece di rimuovere direttamente le cassette postali, si utilizza il cmdlet Remove-Mailbox per visualizzare l'azione che verrebbe eseguita e gli oggetti a cui verrebbe applicata l'azione. Con il cmdlet Get-DistributionGroupMember si recupera l'elenco di tutti gli oggetti destinatario membri del gruppo di distribuzione "Fourth Year Students". Poiché, tuttavia, il cmdlet Remove-Mailbox è applicabile solo agli utenti con la posta abilitata, è necessario filtrare ed escludere tutti i tipi di destinatario, tranne "UserMailbox". A differenza di altri cmdlet, il cmdlet Get-DistributionGroupMember non prevede un parametro Filter ed è quindi necessario procedere al filtraggio sul lato server. Per i cmdlet che non consentono di eseguire il filtraggio sul lato server (perché non se ne vedono i vantaggi in termini di prestazioni), è possibile utilizzare a tale scopo il cmdlet Where, che consente di recuperare tutti gli oggetti e applicare il filtro sul computer client locale. Con il cmdlet Where è possibile estrarre solo gli oggetti che corrispondono ai criteri specificati. Al cmdlet Remove-Mailbox vengono passati solo gli oggetti che corrispondono al RecipientType "UserMailbox". Con questo cmdlet si rimuove l'oggetto utente di Active Directory e si contrassegna la cassetta postale per la rimozione. Quando si utilizza il parametro WhatIf, con il cmdlet Remove-Mailbox si ottiene la visualizzazione di testo simile al seguente:

What if: Removing the Mailbox "contoso.com/Users
/user10" will remove the Windows user object and mark 
the mailbox in the database for removal.

Se si ritiene corretto il comportamento del comando, eseguire di nuovo il comando senza WhatIf. Per alcuni cmdlet, ad esempio tutti quelli con il verbo Remove, prima di apportare le modifiche nella shell viene automaticamente richiesta una conferma. È possibile scegliere di applicare una modifica per volta, evitare la visualizzazione di altre richieste di conferma o annullare tutte le elaborazioni seguenti. Per i cmdlet che non prevedono una richiesta di conferma automatica, è possibile forzare la richiesta di conferma con il comando Confirm.

Conclusioni

Ora che si è toccata con mano la potenza dei cmdlet, è possibile continuare a sperimentare per rendersi conto quanto possono essere utili l'Exchange Management Shell e Microsoft Windows PowerShell per le attività di gestione dei sistemi. Per ulteriori informazioni su questi argomenti, è possibile consultare le risorse indicate di seguito. Per l'Exchange Management Shell, vedere il file della Guida di Exchange Server 2007 all'indirizzo go.microsoft.com/fwlink/?LinkId=69434 (in inglese), lo scripting center di Windows Powershell all'indirizzo go.microsoft.com/fwlink/?LinkId=71134 (in inglese) e il blog del team di Exchange all'indirizzo msexchangeteam.com (in inglese).

David Strome è Technical Writer del gruppo Exchange User Education presso Microsoft da oltre un anno. Prima dell'assunzione in Microsoft a Redmond, WA, David ha lavorato per circa 10 anni alla progettazione, implementazione e amministrazione di installazioni di Exchange Server per molte aziende in British Columbia, Canada. È possibile contattare David scrivendo all'indirizzo dstrome@microsoft.com.

© 2008 Microsoft Corporation e CMP Media, LLC. Tutti i diritti riservati. È vietata la riproduzione completa o parziale senza autorizzazione.