Variabili definite dall'utente

 

Si applica a: Exchange Server 2007 SP3, Exchange Server 2007 SP2, Exchange Server 2007 SP1, Exchange Server 2007

Ultima modifica dell'argomento: 2006-09-21

Una variabile rappresenta la posizione di memorizzazione di un'informazione. A differenza di molti ambienti di programmazione, in Exchange Management Shell non è necessario dichiarare una variabile prima di utilizzarla.

Per definire una variabile, anteporre a una stringa il segno di dollaro ($). Se la stringa include spazi o altri caratteri speciali è necessario racchiuderla tra parentesi graffe ({ }). Utilizzando la notazione di riferimento alla matrice ([ ]) è possibile indirizzare gli elementi della variabile di tipo matrice o tabella hash.

Per ulteriori informazioni sulle matrici, vedere Matrici.

Utilizzo delle variabili per archiviare valori

Le variabili si rivelano molto utili se si desidera archiviare un valore. È possibile assegnare dei valori alle variabili utilizzando un operatore di assegnazione. Per ulteriori informazioni sugli operatori, vedere Sintassi.

Ad esempio, per assegnare un valore pari a 8 alla variabile $Example, utilizzare il comando indicato di seguito:

$Example = 8

Con questo comando, il numero intero 8 è assegnato alla variabile $Example. In seguito, sarà possibile inserire la variabile $Example in un altro comando per richiamare il valore. I valori specificati in una variabile sono trattati esattamente come se venisse digitato il valore in essa incluso nel percorso che specifica la variabile. Ad esempio, i comandi indicati di seguito sono equivalenti se alla variabile $Example2 è assegnato il valore "Hello":

Write-Host $Example2
Write-Host "Hello"

Archiviazione dell'output di un comando in una variabile

È possibile archiviare l'output di comandi in una variabile per un uso successivo. Quando si assegna un comando a una variabile, il comando è analizzato nel momento in cui tale comando è eseguito. L'output di tale comando è assegnato alla variabile. Ad esempio, se si esegue la variabile $CurrentDate = Get-Date nella riga di comando e, quindi, si chiama la variabile $CurrentDate ripetutamente per diversi secondi, il valore riportato è lo stesso ogni volta che la variabile è chiamata.

Quando si assegna l'output di un comando a una variabile, è inoltre possibile accedere alle proprietà e ai metodi dell'oggetto sottostante. Ad esempio, per visualizzare le proprietà e i metodi disponibili quando si assegna Get-Date a $CurrentDate, è possibile utilizzare il comando $CurrentDate | Get-Member. Quando si utilizza il comando $CurrentDate | Get-Member, sono restituite le proprietà riportate di seguito in un elenco:

Date                 Property       System.DateTime Date {get;}
Day                  Property       System.Int32 Day {get;}
DayOfWeek            Property       System.DayOfWeek DayOfWeek {get;}
DayOfYear            Property       System.Int32 DayOfYear {get;}
Hour                 Property       System.Int32 Hour {get;}
Kind                 Property       System.DateTimeKind Kind {get;}
Millisecond          Property       System.Int32 Millisecond {get;}
Minute               Property       System.Int32 Minute {get;}
Month                Property       System.Int32 Month {get;}
Second               Property       System.Int32 Second {get;}
Ticks                Property       System.Int64 Ticks {get;}
TimeOfDay            Property       System.TimeSpan TimeOfDay {get;}
Year                 Property       System.Int32 Year {get;}
DateTime             ScriptProperty System.Object DateTime {get=if ($this.Di...

È possibile, quindi, chiamare una qualunque di tali proprietà digitando la variabile, un punto (.) e, di seguito, la proprietà che si desidera visualizzare. Ad esempio, per visualizzare l'anno archiviato in una variabile, utilizzare il seguente comando:

$CurrentDate.Year

Accedendo alle proprietà di una variabile, è possibile manipolare e utilizzare facilmente ciascuna parte di informazione archiviata nella variabile, senza l'analisi del testo.

Archiviazione dell'output del comando Dir in una variabile

È possibile archiviare l'output del comando Dir in una variabile. Visto che il comando Dir restituisce più righe quando è eseguito, ciascuna riga restituita è archiviata in una variabile come nuovo elemento della matrice. È, quindi, possibile accedere a ogni oggetto di file archiviato nella nuova matrice. Per ulteriori informazioni sulle matrici, vedere Matrici.

Con i comandi riportati di seguito si assegna l'output del comando Dir alla variabile $DirOutput:

$DirOutput = Dir

È possibile selezionare un determinato oggetto di file specificando l'indice matrice che si desidera visualizzare, come illustrato di seguito:

$DirOutput[1].Name

In alternativa, è possibile creare un loop semplice che esegue una ricerca ciclica in tutta la matrice e visualizza il nome e la dimensione del file di ogni file archiviato nella matrice, come illustrato di seguito:

0..$DirOutput.Length | ForEach { $DirOutput[$_].Name + " is " + $DirOutput[$_].Length + " bytes long." }

L'elenco riportato di seguito analizza questo esempio:

  • Il comando 0..$DirOutput.Length consente a Exchange Management Shell di generare un numero intero da 0 alla lunghezza massima della matrice, che è archiviata nella variabile $DirOutput.

  • Si esegue il piping dell'output del comando 0..$DirOutput.Length al comando ForEach che esegue il loop in ogni elemento della matrice fino alla fine. Il comando ForEach esegue i comandi racchiusi tra parentesi graffe ( { } ).

  • La variabile $_ archivia l'oggetto corrente presente nella pipeline. In tal caso, l'oggetto nella pipeline consiste in un numero intero prodotto dal comando 0..$DirOutput.Length mentre conta da 0 alla massima lunghezza della matrice. Tale variabile è utilizzata nel comando $DirOutput[$_].Name e nel comando $DirOutput[$_].Length per selezionare l'elemento di matrice a cui accedere.

  • Per ulteriori informazioni sulla variabile $_, vedere Variabili Shell.

  • I segni più ( +) concatenano l'output del comando $DirOutput[$_].Name e del comando $DirOutput[$_].Length, insieme alle stringhe fornite, per creare output simili a quello riportato di seguito:

    abv_dg.dll is 416144 bytes long.
    addxa.dll is 285056 bytes long.
    ASDat.MSI is 5626880 bytes long.
    ASEntDat.MSI is 5626880 bytes long.
    ASEntIRS.MSI is 910336 bytes long.
    ASEntSig.MSI is 45056 bytes long.
    BPA.Common.dll is 211848 bytes long.
    BPA.ConfigCollector.dll is 101272 bytes long.
    BPA.NetworkCollector.dll is 52128 bytes long.
    

Questi esempi illustrano che è possibile utilizzare la proprietà Length più di una volta per visualizzare diverse informazioni sulla stessa variabile. È possibile eseguire tale operazione perché, nella variabile $DirOutput, sono archiviati diversi tipi di dati. Il primo tipo di dati è rappresentato dallo stesso oggetto della directory, mentre il secondo tipo di dati è rappresentato dagli oggetti di file. Quando si esegue il comando $DirObject.Length senza specificare un indice matrice, si accede ai tipi di oggetto principale della directory, archiviati nella matrice. Se si specifica un indice matrice, ad esempio $DirObject[5].Length, si accede agli oggetti secondari del file, archiviati nell'oggetto della directory.

Tale comportamento si verifica in molti oggetti. In genere, è possibile accedere a molti livelli di dati oggetto inclusi in un'unica variabile. La possibilità di accedere a tali dati rende molto flessibile Exchange Management Shell.