Utilizzo dell'output di comando
Si applica a: Exchange Server 2013
Exchange Management Shell offre diversi metodi per formattare l'output di comando. In questa sezione vengono descritti i seguenti argomenti:
Formattazione dei dati Consente di controllare le modalità di formattazione dei dati visualizzati utilizzando i cmdlet Format-List, Format-Table e Format-Wide.
Generazione dei dati Consente di determinare se l'output dei dati viene generato nella finestra della console di Shell o in un file, utilizzando i cmdlet Out-Host e Out-File. In questo argomento è incluso uno script di esempio per l'output dei dati in Microsoft Internet Explorer.
Filtro dei dati È possibile filtrare i dati mediante uno dei metodi indicati di seguito:
Filtro sul lato server, disponibile in alcuni cmdlet.
Filtro sul lato client, disponibile in tutti i cmdlet eseguendo il piping dei risultati di un comando al cmdlet Where-Object.
Per utilizzare la funzionalità descritta in questo argomento, è necessario avere familiarità con i concetti riportati di seguito:
Formattazione dei dati
Se si utilizzano i cmdlet di formattazione alla fine della pipeline, è possibile ignorare la formattazione predefinita per controllare i dati visualizzati e la relativa modalità di visualizzazione. I cmdlet di formattazione sono Format-List, Format-Table e Format-Wide. A ciascuno è associato uno stile di output distinto e diverso dagli altri cmdlet di formattazione.
Format-List
Il cmdlet Format-List riceve l'input dalla pipeline e genera un elenco in colonna verticale di tutte le proprietà specifiche di ciascun oggetto. È possibile specificare le proprietà da visualizzare usando il parametro Property . Se il cmdlet Format-List viene eseguito senza alcun parametro specifico, vengono generate tutte le proprietà. Il cmdlet Format-List consente di andare a capo automaticamente, invece di troncare le righe. L'utilizzo del cmdlet Format-List si rivela utile per ignorare l'output predefinito di un cmdlet consentendo di recuperare informazioni aggiuntive o più dettagliate.
Ad esempio, quando si esegue il cmdlet Get-Mailbox, è possibile visualizzare solo un numero limitato di informazioni nel formato della tabella. Se si esegue il piping dell'output del cmdlet Get-Mailbox al cmdlet Format-List e si aggiungono i parametri relativi alle informazioni aggiuntive o più dettagliate che si desidera visualizzare, è possibile generare l'output desiderato.
È inoltre possibile specificare un carattere jolly "*" con un nome parziale della proprietà. Se si include un carattere jolly, è possibile applicare delle corrispondenze tra più proprietà senza che sia necessario digitare singolarmente tutti i nomi delle proprietà. Ad esempio, Get-Mailbox | Format-List -Property Email*
restituisce tutte le proprietà che iniziano con Email
.
Negli esempi seguenti sono illustrate le diverse modalità di visualizzazione degli stessi dati restituiti dal cmdlet Get-Mailbox.
Get-Mailbox TestUser1
Name Alias ServerName ProhibitSendQuota
---- ----- ---------- ---------------
TestUser1 TestUser1 mbx unlimited
Nel primo esempio, il cmdlet Get-Mailbox viene eseguito senza una specifica formattazione, pertanto l'output predefinito è in formato di tabella e contiene un insieme predeterminato di proprietà.
Get-Mailbox TestUser1 | Format-List -Property Name,Alias,EmailAddresses
Name : TestUser1
Alias : TestUser1
EmailAddresses : {SMTP:TestUser1@contoso.com}
Nel secondo esempio, l'output del cmdlet Get-Mailbox viene reindirizzato al cmdlet Format-List insieme a proprietà specifiche. È evidente che il formato e il contenuto dell'output sono significativamente diversi.
Get-Mailbox TestUser1 | Format-List -Property Name, Alias, Email*
Name : Test User
Alias : TestUser1
EmailAddresses : {SMTP:TestUser1@contoso.com}
EmailAddressPolicyEnabled : True
Nell'ultimo esempio, l'output del cmdlet Get-Mailbox viene inviato tramite pipe al cmdlet Format-List , come nel secondo esempio. Tuttavia, nell'ultimo esempio viene usato un carattere jolly per trovare la corrispondenza con tutte le proprietà che iniziano con Email
.
Se più di un oggetto viene trasmesso al cmdlet Format-List, tutte le proprietà specificate per un oggetto sono visualizzate e raggruppate per oggetto. L'ordine di visualizzazione dipende dal parametro predefinito per il cmdlet. Il parametro predefinito è il parametro Name o Identity . Ad esempio, quando si esegue il cmdlet Get-Childitem, l'ordine di visualizzazione predefinito restituisce i nomi file in ordine alfabetico. Per modificare questo comportamento, è necessario chiamare il cmdlet Format-List , insieme al parametro GroupBy , e il nome di un valore di proprietà in base al quale si vuole raggruppare l'output. Ad esempio, il seguente comando consente di elencare tutti i file in una directory e poi di raggrupparli per estensione.
Get-Childitem | Format-List Name,Length -GroupBy Extension
Extension: .xml
Name : Config_01.xml
Length : 5627
Name : Config_02.xml
Length : 3901
Extension: .bmp
Name : Image_01.bmp
Length : 746550
Name : Image_02.bmp
Length : 746550
Extension: .txt
Name : Text_01.txt
Length : 16822
Name : Text_02.txt
Length : 9835
In questo esempio, il cmdlet Format-List ha raggruppato gli elementi in base alla proprietà Extension specificata dal parametro GroupBy . È possibile utilizzare il parametro GroupBy con qualsiasi proprietà valida per gli oggetti nel flusso della pipeline.
Format-Table
Il cmdlet Format-Table consente di visualizzare gli elementi in un formato di tabella con intestazioni di etichetta e colonne di dati delle proprietà. Per impostazione predefinita, molti cmdlet, ad esempio i cmdlet Get-Process e Get-Service , usano il formato di tabella per l'output. I parametri per il cmdlet Format-Table includono i parametri Properties e GroupBy . Questi parametri funzionano esattamente come con il cmdlet Format-List .
Il cmdlet Format-Table usa anche il parametro Wrap . Questo parametro consente la visualizzazione completa di lunghe righe di informazioni sulle proprietà anziché il troncamento alla fine di una riga. Per vedere come viene usato il parametro Wrap per visualizzare le informazioni restituite, confrontare l'output del comando Get-Command nei due esempi seguenti.
Nel primo esempio, quando viene usato il cmdlet Get-Command per visualizzare le informazioni sui comandi sul cmdlet Get-Process , le informazioni per la proprietà Definition vengono troncate.
Get-Command Get-Process | Format-Table Name,Definition
Name Definition
---- ----------
get-process get-process [[-ProcessName] String[]...
Nel secondo esempio il parametro Wrap viene aggiunto al comando per forzare la visualizzazione del contenuto completo della proprietà Definition .
Get-Command Get-Process | Format-Table Name,Definition -Wrap
Get-Process Get-Process [[-Name] <String[]>] [-Comp
uterName <String[]>] [-Module] [-FileVe
rsionInfo] [-Verbose] [-Debug] [-ErrorA
ction <ActionPreference>] [-WarningActi
on <ActionPreference>] [-ErrorVariable
<String>] [-WarningVariable <String>] [
-OutVariable <String>] [-OutBuffer <Int
32>]
Get-Process -Id <Int32[]> [-ComputerNam
e <String[]>] [-Module] [-FileVersionIn
fo] [-Verbose] [-Debug] [-ErrorAction <
ActionPreference>] [-WarningAction <Act
ionPreference>] [-ErrorVariable <String
>] [-WarningVariable <String>] [-OutVar
iable <String>] [-OutBuffer <Int32>]
Get-Process [-ComputerName <String[]>]
[-Module] [-FileVersionInfo] -InputObje
ct <Process[]> [-Verbose] [-Debug] [-Er
rorAction <ActionPreference>] [-Warning
Action <ActionPreference>] [-ErrorVaria
ble <String>] [-WarningVariable <String
>] [-OutVariable <String>] [-OutBuffer
<Int32>]
Come per il cmdlet Format-List , è anche possibile specificare un carattere jolly "*
" con un nome di proprietà parziale. Se si include un carattere jolly, è possibile applicare delle corrispondenze tra più proprietà senza digitare singolarmente tutti i nomi delle proprietà.
Format-Wide
Il cmdlet Format-Wide consente un controllo più semplice dell'output rispetto agli altri cmdlet di formattazione. Per impostazione predefinita, il cmdlet Format-Wide tenta di visualizzare in una riga di output quante più colonne possibili dei valori proprietà. L'aggiunta di parametri consente di controllare il numero di colonne e di stabilire come utilizzare lo spazio di output.
Nell'utilizzo più basilare, l'esecuzione del cmdlet Format-Wide senza alcun parametro restituisce l'output in tutte le colonne che la pagina può contenere. Ad esempio, se si esegue il cmdlet Get-Childitem e si esegue il piping del relativo output al cmdlet Format-Wide, le informazioni verranno visualizzate come segue:
Get-ChildItem | Format-Wide
Directory: FileSystem::C:\WorkingFolder
Config_01.xml Config_02.xml
Config_03.xml Config_04.xml
Config_05.xml Config_06.xml
Config_07.xml Config_08.xml
Config_09.xml Image_01.bmp
Image_02.bmp Image_03.bmp
Image_04.bmp Image_05.bmp
Image_06.bmp Text_01.txt
Text_02.txt Text_03.txt
Text_04.txt Text_05.txt
Text_06.txt Text_07.txt
Text_08.txt Text_09.txt
Text_10.txt Text_11.txt
Text_12.txt
In genere, l'esecuzione del cmdlet Get-Childitem senza alcun parametro comporta la visualizzazione dei nomi di tutti i file nella directory in una tabella di proprietà. In questo esempio, eseguendo il piping dell'output del cmdlet Get-Childitem al cmdlet Format-Wide, l'output viene visualizzato in due colonne di nomi. È importante notare che è possibile visualizzare solo un tipo di proprietà alla volta, specificato da un nome proprietà posto di seguito al cmdlet Format-Wide. Se si aggiunge il parametro Autosize , l'output viene modificato da due colonne a un numero di colonne uguale alla larghezza dello schermo.
Get-ChildItem | Format-Wide -AutoSize
Directory: FileSystem::C:\WorkingFolder
Config_01.xml Config_02.xml Config_03.xml Config_04.xml Config_05.xml
Config_06.xml Config_07.xml Config_08.xml Config_09.xml Image_01.bmp
Image_02.bmp Image_03.bmp Image_04.bmp Image_05.bmp Image_06.bmp
Text_01.txt Text_02.txt Text_03.txt Text_04.txt Text_05.txt
Text_06.txt Text_07.txt Text_08.txt Text_09.txt Text_10.txt
Text_11.txt Text_12.txt
In questo esempio, la tabella è ordinata in cinque colonne invece che in due. Il parametro Column offre un maggiore controllo consentendo di specificare il numero massimo di colonne per visualizzare le informazioni come indicato di seguito:
Get-ChildItem | Format-Wide -Column 4
Directory: FileSystem::C:\WorkingFolder
Config_01.xml Config_02.xml Config_03.xml Config_04.xml
Config_05.xml Config_06.xml Config_07.xml Config_08.xml
Config_09.xml Image_01.bmp Image_02.bmp Image_03.bmp
Image_04.bmp Image_05.bmp Image_06.bmp Text_01.txt
Text_02.txt Text_03.txt Text_04.txt Text_05.txt
Text_06.txt Text_07.txt Text_08.txt Text_09.txt
Text_10.txt Text_11.txt Text_12.txt
In questo esempio, il numero di colonne è stato impostato su quattro utilizzando il parametro Column.
Generazione dei dati
Cmdlet Out-Host e Out-File
Il cmdlet Out-Host è un cmdlet predefinito non visualizzato alla fine della pipeline. Dopo l'applicazione di tutte le formattazioni, il cmdlet Out-Host invia l'output finale alla finestra di console per la visualizzazione. Non è necessario eseguire esplicitamente il cmdlet Out-Host poiché rappresenta l'output predefinito. È possibile ignorare l'invio dell'output alla finestra di console eseguendo il cmdlet Out-File per ultimo nel comando. Il cmdlet Out-File, quindi, scrive l'output nel file specificato nel comando come nell'esempio illustrato di seguito:
Get-ChildItem | Format-Wide -Column 4 | Out-File c:\OutputFile.txt
In questo esempio il cmdlet Out-File scrive le informazioni visualizzate nel comando Get-ChildItem | Format-Wide -Column 4 in un file denominato OutputFile.txt
. È anche possibile reindirizzare l'output della pipeline a un file usando l'operatore di reindirizzamento, ovvero la parentesi quadra quadra destra ( >
). Per accodare l'output della pipeline di un comando a un file esistente senza sostituire il file originale, usare le doppie parentesi graffe ( >>
), come nell'esempio seguente:
Get-ChildItem | Format-Wide -Column 4 >> C:\OutputFile.txt
In questo esempio, l'output del cmdlet Get-Childitem viene inviato tramite pipe al cmdlet Format-Wide per la formattazione e quindi scritto alla fine del OutputFile.txt
file. Si noti che se il OutputFile.txt
file non esistesse, l'uso delle doppie parentesi quadre a destra ( >>
) creerebbe il file.
Per altre informazioni sulle pipeline, vedere about_Pipelines.
Per ulteriori informazioni sulla sintassi utilizzata nell'esempio precedente, vedere Syntax.
Visualizzazione dei dati in Internet Explorer
Per la flessibilità e la facilità dell'esecuzione script in Exchange Management Shell, è possibile prelevare i dati restituiti dai comandi e formattarli e generarli in moltissimi modi.
Nell'esempio illustrato di seguito, è descritto come utilizzare uno script semplice per generare i dati restituiti da un comando e visualizzarli in Internet Explorer. Lo script preleva gli oggetti transitati tramite la pipeline, apre una finestra di Internet Explorer e visualizza i dati in Internet Explorer:
$Ie = New-Object -Com InternetExplorer.Application
$Ie.Navigate("about:blank")
While ($Ie.Busy) { Sleep 1 }
$Ie.Visible = $True
$Ie.Document.Write("$Input")
# If the previous line doesn't work on your system, uncomment the line below.
# $Ie.Document.IHtmlDocument2_Write("$Input")
$Ie
Per usare questo script, salvarlo nella C:\Program Files\Microsoft\Exchange Server\V15\Scripts
directory del computer in cui verrà eseguito lo script. Assegnare al file Out-Ie.ps1
il nome . Dopo aver salvato il file, è possibile utilizzare lo script come un cmdlet normale.
Nota
Per essere eseguiti in Exchange 2013, gli script devono essere aggiunti a un ruolo di gestione senza ambito e devono essere assegnati al ruolo direttamente o tramite un gruppo del ruolo di gestione. Per altre informazioni, vedere Informazioni sui ruoli di gestione.
Lo Out-Ie
script presuppone che i dati ricevuti siano HTML validi. Per convertire in HTML i dati che si desiderano visualizzare, è necessario eseguire il piping dei risultati del comando al cmdlet ConvertTo-Html. È quindi possibile inviare i risultati del comando tramite pipe allo Out-Ie
script. Nel seguente esempio viene descritto come visualizzare un elenco directory in una finestra di Internet Explorer:
Get-ChildItem | Select Name,Length | ConvertTo-Html | Out-Ie
Filtro dei dati
Shell consente l'accesso a un grande numero di informazioni sui server, sulle cassette postali, su Active Directory e su altri oggetti dell'organizzazione. L'accesso a tali informazioni consente una comprensione migliore dell'ambiente, ma le informazioni potrebbero essere eccessive. Shell consente di controllare queste informazioni e di restituire solo i dati che si desidera visualizzare utilizzando un filtro. Sono disponibili i tipi di filtro indicati di seguito:
Filtro lato server: il filtro lato server accetta il filtro specificato nella riga di comando e lo invia al server Exchange su cui si esegue la query. Tale server elabora la query e restituisce solo i dati che corrispondono al filtro specificato.
Il filtro sul lato server viene eseguito solo su oggetti in cui è possibile restituire decine o centinaia di migliaia di risultati. Pertanto, solo i cmdlet di gestione dei destinatari, ad esempio il cmdlet Get-Mailbox , e i cmdlet di gestione delle code, ad esempio il cmdlet Get-Queue , supportano il filtro sul lato server. Questi cmdlet supportano il parametro Filter . Questo parametro accetta l'espressione di filtro specificata e la invia al server per l'elaborazione.
Filtro lato client: il filtro lato client viene eseguito sugli oggetti nella finestra della console locale in cui si sta lavorando. Quando si usa il filtro lato client, il cmdlet recupera tutti gli oggetti corrispondenti all'attività eseguita nella finestra della console locale. La shell accetta quindi tutti i risultati restituiti, applica il filtro sul lato client a tali risultati e restituisce solo i risultati corrispondenti al filtro. Tutti i cmdlet supportano il filtro lato client. Questo viene richiamato inviando tramite pipe i risultati di un comando al cmdlet Where-Object .
Filtro sul lato server
L'implementazione del filtro sul lato server è specifica del cmdlet in cui è supportata. Il filtro sul lato server è abilitato solo su proprietà specifiche degli oggetti restituiti. Per ulteriori informazioni, vedere la Guida per i seguenti cmdlet:
Get-ActiveSyncDevice | Get-ActiveSyncDeviceClass | Get-CASMailbox | Get-Contact | Get-DistributionGroup |
Get-DynamicDistributionGroup | Get-Group | Get-Mailbox | Get-MailboxStatistics | Get-MailContact |
Get-MailPublicFolder | Get-MailUser | Get-Message | Get-MobileDevice | Get-Queue |
Get-QueueDigest | Get-Recipient | Get-RemoteMailbox | Get-RoleGroup | Get-SecurityPrincipal |
Get-StoreUsageStatistics | Get-UMMailbox | Get-User | Get-UserPhoto | Remove-Message |
Resume-Message | Resume-Queue | Retry-Queue | Suspend-Message | Suspend-Queue |
Filtro sul lato client
Il filtro lato client può essere usato con qualsiasi cmdlet. Questa funzionalità include i cmdlet che supportano anche il filtro sul lato server. Come descritto in precedenza in questo argomento, il filtro lato client accetta tutti i dati restituiti da un comando precedente nella pipeline e, a sua volta, restituisce solo i risultati corrispondenti al filtro specificato. Il cmdlet Where-Object esegue questo filtro. Può essere abbreviato in Dove.
Una volta che i dati passano attraverso la pipeline, il cmdlet Where li riceve dall'oggetto precedente, li filtra e li passa su un altro oggetto. Il filtro si basa su un blocco di script definito nel comando Where. Il blocco di script filtra i dati in base alle proprietà e ai valori dell'oggetto.
Il cmdlet Clear-Host viene utilizzato per cancellare la finestra di console. In questo esempio, è possibile trovare tutti gli alias definiti per il cmdlet Clear-Host se si esegue il comando indicato di seguito:
Get-Alias | Where {$_.Definition -eq "Clear-Host"}
CommandType Name Definition
----------- ---- ----------
Alias clear clear-host
Alias cls clear-host
Il cmdlet Get-Alias e il comando Where operano insieme per restituire l'elenco di alias definiti solo per il cmdlet Clear-Host. Nella seguente tabella vengono descritti tutti gli elementi del comando Where utilizzato nell'esempio.
Elementi del comando Where
Elemento | Descrizione |
---|---|
{ } |
Le parentesi graffe racchiudono il blocco di script che definisce il filtro. |
$_ |
Questa variabile speciale attiva e associa automaticamente gli oggetti nella pipeline. |
Definition |
La Definition proprietà è la proprietà degli oggetti pipeline correnti che archivia il nome della definizione dell'alias. Quando Definition viene utilizzato con la $_ variabile , un punto viene prima del nome della proprietà. |
-eq |
Questo operatore di confronto, corrispondente a "uguale a", è utilizzato per specificare che è necessario che i risultati corrispondano esattamente al valore proprietà fornito nell'espressione. |
"Clear-Host" | In questo esempio, "Clear-Host" indica il valore per il quale il comando sta eseguendo l'analisi. |
Nell'esempio, gli oggetti restituiti dal cmdlet Get-Alias rappresentano tutti gli alias definiti nel sistema. Anche se non è possibile visualizzarli dalla riga di comando, gli alias sono raccolti e passano al cmdlet Where attraverso la pipeline. Il cmdlet Where utilizza le informazioni nel blocco di script per applicare un filtro agli oggetti alias.
La variabile $
speciale _represents gli oggetti passati. La $_
variabile viene avviata automaticamente dalla shell ed è associata all'oggetto pipeline corrente. Per altre informazioni su questa variabile speciale, vedere Variabili della shell.
Utilizzando la notazione "dot" standard (object.property), la Definition
proprietà viene aggiunta per definire la proprietà esatta dell'oggetto da valutare. L'operatore -eq
di confronto confronta quindi il valore di questa proprietà con "Clear-Host"
. Solo gli oggetti con la Definition
proprietà che corrispondono a questo criterio vengono passati alla finestra della console per l'output. Per altre informazioni sugli operatori di confronto, vedere Operatori di confronto.
Dopo che il comando Where ha filtrato gli oggetti restituiti dal cmdlet Get-Alias, è possibile eseguire il piping degli oggetti filtrati a un altro comando. Il comando successivo elabora solo gli oggetti filtrati restituiti dal comando Where.