about_Assignment_Operators

Aggiornamento: maggio 2014

Si applica a: Windows PowerShell 2.0, Windows PowerShell 3.0, Windows PowerShell 4.0, Windows PowerShell 5.0

Inserire l'introduzione qui.

ARGOMENTO

about_assignment_operators

DESCRIZIONE BREVE

Descrive come usare gli operatori per assegnare i valori alle variabili.

DESCRIZIONE LUNGA

Gli operatori di assegnazione assegnano uno o più valori a una variabile. Possono eseguire operazioni numeriche sui valori prima dell'assegnazione.

Windows PowerShell® supporta gli operatori di assegnazione seguenti.

    Operator  Description  
    -------   -----------
    =         Sets the value of a variable to the specified value.

    +=        Increases the value of a variable by the specified value, or 
              appends the specified value to the existing value.

    -=        Decreases the value of a variable by the specified value.
 
    *=        Multiplies the value of a variable by the specified value, or
              appends the specified value to the existing value.
 
    /=        Divides the value of a variable by the specified value.
 
    %=        Divides the value of a variable by the specified value and 
              then assigns the remainder (modulus) to the variable.

    ++        Increases the value of a variable, assignable property, or 
              array element by 1.

    --        Decreases the value of a variable, assignable property, or 
              array element by 1.

SINTASSI

La sintassi degli operatori di assegnazione è la seguente:

<assignable-expression> <assignment-operator> <value>

Le espressioni assegnabili includono variabili e proprietà. Il valore può essere un singolo valore, una matrice di valori oppure un comando, un'espressione o un'istruzione.

Gli operatori di incremento e decremento sono operatori unari. Ognuno può essere usato sia come prefisso che come suffisso.

        <assignable-expression><operator>
        <operator><assignable-expression>

L'espressione assegnabile deve essere un numero o deve essere convertibile in un numero.

ASSEGNAZIONE DI VALORI

Le variabili sono denominate spazi di memoria in cui vengono archiviati i valori. I valori vengono archiviati nelle variabili con l'operatore di assegnazione (=). Il nuovo valore può sostituire il valore della variabile esistente oppure è possibile aggiungere un nuovo valore al valore esistente.

L'operatore di assegnazione di base è il segno di uguale (=) (ASCII 61). Ad esempio, l'istruzione seguente assegna il valore Windows PowerShell alla variabile $MyShell:

        $MyShell = "Windows PowerShell" 

Quando si assegna un valore a una variabile in Windows PowerShell, se la variabile non esiste già, verrà creata. Ad esempio, la prima delle due istruzioni di assegnazione seguenti crea la variabile $a e assegna il valore 6 a $a. La seconda istruzione di assegnazione assegna il valore 12 a $a. La prima istruzione crea una nuova variabile. La seconda istruzione ne modifica solo il valore:

        $a = 6
        $a = 12

Le variabili in Windows PowerShell non hanno un tipo di dati specifico a meno che non ne venga eseguito il cast. Quando una variabile contiene solo un oggetto, la variabile prende il tipo di dati di tale oggetto. Quando una variabile contiene una raccolta di oggetti, il tipo di dati della variabile è System.Object. Pertanto, è possibile assegnare alla raccolta qualsiasi tipo di oggetto. L'esempio seguente illustra che a una variabile è possibile aggiungere oggetti processo, oggetti servizio, stringhe e numeri interi senza generare un errore:

        $a = get-process
        $a += get-service
        $a += "string"
        $a += 12

Poiché l'operatore di assegnazione (=) ha una precedenza inferiore rispetto all'operatore pipeline (|), le parentesi non sono necessarie per assegnare il risultato di una pipeline di comandi a una variabile. Ad esempio, il comando seguente ordina i servizi nel computer e quindi assegna i servizi ordinati alla variabile $a:

        $a = get-service | sort name

È possibile anche assegnare il valore creato da un'istruzione a una variabile, come illustrato nell'esempio seguente:

        $a = if ($b -lt 0) { 0 } else { $b }

Questo esempio assegna 0 alla variabile $a, se il valore di $b è minore di 0. Assegna il valore di $b a $a se il valore di $b non è minore di zero.

OPERATORE DI ASSEGNAZIONE (=)

L'operatore di assegnazione (=) assegna i valori alle variabili. Se la variabile ha già un valore, l'operatore di assegnazione (=) sostituisce il valore senza generare alcun avviso.

L'istruzione seguente assegna il valore intero 6 alla variabile $a:

        $a = 6 

Per assegnare un valore stringa a una variabile, racchiudere il valore stringa tra virgolette, come indicato di seguito:

        $a = "baseball" 

Per assegnare una matrice (più valori) a una variabile, separare i valori con una virgola, come indicato di seguito:

        $a = "apple", "orange", "lemon", "grape"

Per assegnare una tabella hash a una variabile, usare la notazione standard per la tabella hash in Windows PowerShell. Digitare il simbolo di chiocciola (@) seguito da coppie chiave/valore separate da punti e virgola (;) e racchiuse tra parentesi graffe ({ }). Ad esempio, per assegnare una tabella hash alla variabile $a, digitare:

        $a = @{one=1; two=2; three=3} 

Per assegnare valori esadecimali a una variabile, far precedere il valore da "0x". Windows PowerShell converte il valore esadecimale (0x10) in un valore decimale (in questo caso, 16) e assegna tale valore alla variabile $a. Ad esempio, per assegnare il valore 0x10 alla variabile $a, digitare:

        $a = 0x10 

Per assegnare un valore esponenziale a una variabile, digitare il numero della radice, la lettera "e" e un numero che rappresenta un multiplo di 10. Ad esempio, per assegnare il valore 3.1415 alla potenza di 1,000 per la variabile $a, digitare:

        $a = 3.1415e3 

Windows PowerShell può anche convertire kilobyte (KB), megabyte (MB) e gigabyte (GB) in byte. Ad esempio, per assegnare il valore 10 kilobyte alla variabile $a, digitare:

        $a = 10kb

OPERATORE DI ASSEGNAZIONE DI ADDIZIONE (+=)

L'operatore di assegnazione di addizione (+=) incrementa il valore di una variabile o aggiunge il valore specificato al valore esistente. L'azione varia a seconda che la variabile contenga un tipo numerico o un tipo stringa e che la variabile contenga un singolo valore (scalare) o più valori (raccolta).

L'operatore += combina due operazioni. Prima esegue un'operazione di aggiunta e poi un'operazione di assegnazione. Pertanto, le istruzioni seguenti sono equivalenti:

        $a += 2
        $a = ($a + 2)

Quando la variabile contiene un singolo valore numerico, l'operatore += incrementa il valore esistente della quantità a destra dell'operatore. L'operatore assegna quindi il valore risultante alla variabile. L'esempio seguente illustra come usare l'operatore += per incrementare il valore di una variabile:

        C:\PS> $a = 4
        C:\PS> $a += 2
        C:\PS> $a
        6

Quando il valore della variabile è una stringa, il valore a destra dell'operatore viene aggiunto alla stringa, come indicato di seguito:

        C:\PS> $a = "Windows"
        C:\PS> $a += " PowerShell"
        C:\PS> $a
        Windows PowerShell 

Quando il valore della variabile è una matrice, l'operatore += aggiunge i valori a destra dell'operatore alla matrice. A meno che la matrice non sia tipizzata in modo esplicito con un'operazione di cast, è possibile aggiungere qualsiasi tipo di valore alla matrice, come indicato di seguito:

        C:\PS> $a = 1,2,3
        C:\PS> $a += 2
        C:\PS> $a
        1
        2
        3
        2
        C:\PS> $a += "String"
        C:\PS> $a
        1
        2
        3
        2
        String

Quando il valore di una variabile è una tabella hash, l'operatore += aggiunge il valore a destra dell'operatore alla tabella hash. Tuttavia, poiché l'unico tipo che è possibile aggiungere a una tabella hash è un'altra tabella hash, tutte le altre assegnazioni non riescono.

Ad esempio, il comando seguente assegna una tabella hash alla variabile $a. Quindi, usa l'operatore += per aggiungere un'altra tabella hash alla tabella hash esistente, aggiungendo di fatto una nuova coppia chiave/valore alla tabella hash esistente. Questo comando riesce, come illustrato nell'output:

        C:\PS> $a = @{a = 1; b = 2; c = 3}
        C:\PS> $a += @{mode = "write"}
        C:\PS> $a
        Name                           Value
        ----                           -----
        a                              1
        b                              2
        mode                           write
        c                              3

Il comando seguente prova ad aggiungere un numero intero (1) alla tabella hash nella variabile $a. Questo comando non riesce:

        C:\PS> $a = @{a = 1; b = 2; c = 3}
        C:\PS> $a += 1
        You can add another hash table only to a hash table.
        At line:1 char:6
        + $a += <<<<  1

OPERATORE DI ASSEGNAZIONE DI SOTTRAZIONE (-=)

L'operatore di assegnazione di sottrazione (-=) decrementa il valore di una variabile del valore specificato a destra dell'operatore. Questo operatore non può essere usato con variabili di tipo stringa e non può essere usato per rimuovere un elemento da una raccolta.

L'operatore -= combina due operazioni. Prima esegue un'operazione di sottrazione e poi un'operazione di assegnazione. Pertanto, le istruzioni seguenti sono equivalenti:

        $a -= 2
        $a = ($a - 2)

L'esempio seguente illustra come usare l'operatore -= per diminuire il valore di una variabile:

        C:\PS> $a = 8
        C:\PS> $a -= 2
        C:\PS> $a
        6

È anche possibile usare l'operatore di assegnazione -= per diminuire il valore di un membro di una matrice numerica. A tale scopo, specificare l'indice dell'elemento di matrice da modificare. Nell'esempio seguente il valore del terzo elemento di una matrice (elemento 2) viene diminuito di 1:

        C:\PS> $a = 1,2,3
        C:\PS> $a[2] -= 1.
        C:\PS> $a
        1
        2
        2

Non è possibile usare l'operatore -= per eliminare i valori di una variabile. Per eliminare tutti i valori assegnati a una variabile, usare i cmdlet Clear-Item o Clear-Variable per assegnare il valore $null o "" alla variabile.

        $a = $null 

Per eliminare un valore specifico da una matrice, usare la notazione di matrice per assegnare il valore $null all'elemento specifico. Ad esempio, l'istruzione seguente elimina il secondo valore (posizione di indice 1) da una matrice:

        C:\PS> $a = 1,2,3
        C:\PS> $a
        1
        2
        3

        C:\PS> $a[1] = $null
        C:\PS> $a
        1
        3

Per eliminare una variabile, usare il cmdlet Remove-Variable. Questo metodo è utile quando viene eseguito il cast della variabile in modo esplicito in un tipo di dati specifico e si vuole una variabile non tipizzata. Il comando seguente elimina la variabile $a:

        remove-variable a

OPERATORE DI ASSEGNAZIONE DI MOLTIPLICAZIONE (*=)

L'operatore di assegnazione di moltiplicazione (*=) moltiplica un valore numerico o aggiunge il numero specificato di copie del valore stringa di una variabile.

Quando una variabile contiene un singolo valore numerico, tale valore viene moltiplicato per il valore a destra dell'operatore. L'esempio seguente illustra come usare l'operatore *= per moltiplicare il valore di una variabile:

        C:\PS> $a = 3
        C:\PS> $a *= 4
        C:\PS> $a
        12

In questo caso, l'operatore *= combina due operazioni. Prima esegue un'operazione di moltiplicazione e poi un'operazione di assegnazione. Pertanto, le istruzioni seguenti sono equivalenti:

        $a *= 2
        $a = ($a * 2)

Quando una variabile contiene un valore stringa, Windows PowerShell aggiunge il numero specificato di stringhe al valore, come indicato di seguito:

        C:\PS> $a = "file"
        C:\PS> $a *= 4 
        C:\PS> $a
        filefilefilefile

Per moltiplicare un elemento di una matrice, usare un indice per identificare l'elemento da moltiplicare. Ad esempio, il comando seguente moltiplica il primo elemento nella matrice (posizione di indice 0) per 2:

        $a[0] *= 2

OPERATORE DI ASSEGNAZIONE DI DIVISIONE (/=)

L'operatore di assegnazione di divisione (/=) divide un valore numerico per il valore specificato a destra dell'operatore. L'operatore non può essere usato con le variabili di tipo stringa.

L'operatore /= combina due operazioni. Prima esegue un'operazione di divisione e poi un'operazione di assegnazione. Pertanto, le due istruzioni seguenti sono equivalenti:

        $a /= 2
        $a = ($a / 2)

Ad esempio, il comando seguente usa l'operatore /= per dividere il valore di una variabile:

        C:\PS> $a = 8
        C:\PS> $a /=2
        C:\PS> $a
        4

Per dividere un elemento di una matrice, usare un indice per identificare l'elemento da modificare. Ad esempio, il comando seguente divide il secondo elemento nella matrice (posizione di indice 1) per 2:

        $a[1] /= 2

OPERATORE DI ASSEGNAZIONE DI MODULO (%=)

L'operatore di assegnazione di modulo (%=) divide il valore di una variabile per il valore a destra dell'operatore. L'operatore %= assegna quindi il resto, noto come modulo, alla variabile. È possibile usare questo operatore solo quando una variabile contiene un singolo valore numerico. Non è possibile usarlo quando una variabile contiene una variabile di tipo stringa o una matrice.

L'operatore %= combina due operazioni. Prima esegue un'operazione di divisione determinando il resto e poi assegna il resto alla variabile. Pertanto, le istruzioni seguenti sono equivalenti:

        $a %= 2
        $a = ($a % 2)

L'esempio seguente illustra come usare l'operatore %= per salvare il modulo di un quoziente:

        C:\PS> $a = 7
        C:\PS> $a %= 4
        C:\PS> $a
        3

OPERATORI DI INCREMENTO E DECREMENTO

L'operatore di incremento (++) incrementa il valore di una variabile di 1. Quando l'operatore di incremento viene usato in un'istruzione semplice, non viene restituito alcun valore. Per visualizzare il risultato, visualizzare il valore della variabile, come indicato di seguito:

        C:\PS> $a = 7
        C:\PS> ++$a
        C:\PS> $a
        8

Per forzare la restituzione di un valore, racchiudere la variabile e l'operatore tra parentesi, come indicato di seguito:

        C:\PS> $a = 7
        C:\PS> (++$a)
        8

L'operatore di incremento può essere inserito prima di una variabile (prefisso) o dopo una variabile (suffisso). Il formato prefisso dell'operatore incrementa una variabile prima di usare il relativo valore nell'istruzione, come indicato di seguito:

        C:\PS> $a = 7
        C:\PS> $c = ++$a
        C:\PS> $a
        8
        C:\PS> $c
        8

Il formato suffisso dell'operatore incrementa una variabile dopo aver usato il relativo valore nell'istruzione. Nell'esempio seguente le variabili $c e $a hanno valori diversi perché il valore viene assegnato a $c prima della modifica di $a:

        C:\PS> $a = 7
        C:\PS> $c = $a++
        C:\PS> $a
        8
        C:\PS> $c
        7

L'operatore di decremento (--) diminuisce il valore di una variabile di 1. Come con l'operatore di incremento, non viene restituito alcun valore quando l'operatore viene usato in un'istruzione semplice. Usare le parentesi per restituire un valore, come indicato di seguito:

        C:\PS> $a = 7
        C:\PS> --$a
        C:\PS> $a
        6
        C:\PS> (--$a)
        5

Il formato prefisso dell'operatore decrementa una variabile prima di usare il relativo valore nell'istruzione, come indicato di seguito:

        C:\PS> $a = 7
        C:\PS> $c = --$a
        C:\PS> $a
        6
        C:\PS> $c
        6

Il formato suffisso dell'operatore decrementa una variabile dopo aver usato il relativo valore nell'istruzione. Nell'esempio seguente le variabili $d e $a hanno valori diversi perché il valore viene assegnato a $d prima della modifica di $a:

        C:\PS> $a = 7
        C:\PS> $d = $a--
        C:\PS> $a
        6
        C:\PS> $d
        7

TIPI DI MICROSOFT .NET FRAMEWORK

Per impostazione predefinita, quando una variabile ha solo un valore, il valore assegnato alla variabile determina il tipo di dati della variabile. Ad esempio, il comando seguente crea una variabile di tipo Integer (System.Int32):

        $a = 6 

Per trovare il tipo .NET Framework di una variabile, usare il metodo GetType e la relativa proprietà FullName, come indicato di seguito. Assicurarsi di includere le parentesi dopo il nome del metodo GetType, anche se la chiamata al metodo non contiene argomenti:

        C:\PS> $a = 6 
        C:\PS> $a.gettype().fullname 
        System.Int32 

Per creare una variabile che contiene una stringa, assegnare un valore stringa alla variabile. Per indicare che il valore è una stringa, racchiuderlo tra virgolette, come indicato di seguito:

        C:\PS> $a = "6"
        C:\PS> $a.gettype().fullname
        System.String

Se il primo valore assegnato alla variabile è una stringa, Windows PowerShell considera tutte le operazioni come operazioni di stringa ed esegue il cast dei nuovi valori in stringhe, come illustrato nell'esempio seguente:

        C:\PS> $a = "file"
        C:\PS> $a += 3
        C:\PS> $a
        file3

Se il primo valore è un numero intero, Windows PowerShell considera tutte le operazioni come operazioni con numeri interi ed esegue il cast dei nuovi valori in numeri interi, come illustrato nell'esempio seguente:

        C:\PS> $a = 6
        C:\PS> $a += "3"
        C:\PS> $a
        9

È possibile eseguire il cast di una nuova variabile scalare come qualsiasi tipo .NET Framework, inserendo il nome del tipo tra parentesi quadre che precedono il nome della variabile o il primo valore di assegnazione. Quando si esegue il cast di una variabile, è possibile determinare i tipi di dati che possono essere archiviati nella variabile. È possibile anche determinare il comportamento della variabile quando viene modificata.

Ad esempio, il comando seguente esegue il cast della variabile come tipo stringa:

        C:\PS> [string]$a = 27
        C:\PS> $a += 3
        C:\PS> $a
        273

L'esempio seguente esegue il cast del primo valore, anziché il cast della variabile:

        $a = [string]27

Quando si esegue il cast di una variabile in un tipo specifico, la convenzione comune consiste nell'eseguire il cast della variabile e non del valore. Tuttavia, non è possibile rieseguire cast del tipo di dati di una variabile esistente se il relativo valore non può essere convertito nel nuovo tipo di dati. Per modificare il tipo di dati, è necessario sostituirne il valore, come indicato di seguito:

        C:\PS> $a = "string"
        C:\PS> [int]$a
        Cannot convert value "string" to type "System.Int32". Error: "Input
        string was not in a correct format."
        At line:1 char:8
        + [int]$a <<<<

        C:\PS> [int]$a =3

Inoltre, quando si fa precedere un nome di variabile da un tipo di dati, il tipo di tale variabile è bloccato a meno che non si esegua l'override del tipo in modo esplicito specificando un altro tipo di dati. Se si prova ad assegnare un valore che non è compatibile con il tipo esistente e non si esegue l'override del tipo in modo esplicito, Windows PowerShell visualizza un errore, come illustrato nell'esempio seguente:

        C:\PS> $a = 3
        C:\PS> $a = "string"

        C:\PS> [int]$a = 3
        C:\PS> $a = "string"
        Cannot convert value "string" to type "System.Int32". Error: "Input
        string was not in a correct format."
        At line:1 char:3
        + $a <<<<  = "string"

        C:\PS> [string]$a = "string"

In Windows PowerShell i tipi di dati delle variabili che contengono più elementi in una matrice vengono gestiti in modo diverso dai tipi di dati delle variabili che contengono un singolo elemento. A meno che un tipo di dati non venga assegnato in modo specifico a una variabile di matrice, il tipo di dati è sempre System.Object []. Questo tipo di dati è specifico delle matrici.

In alcuni casi, è possibile eseguire l'override del tipo predefinito specificando un altro tipo. Ad esempio, il comando seguente esegue il cast della variabile come tipo di matrice di stringa []:

        [string []] $a = "one", "two", "three"

Le variabili di Windows PowerShell possono essere qualsiasi tipo di dati .NET Framework. Inoltre, è possibile assegnare qualsiasi tipo di dati .NET Framework completo disponibile nel processo corrente. Ad esempio, il comando seguente specifica il tipo di dati System.DateTime:

        [system.datetime]$a = "5/31/2005"

Alla variabile verrà assegnato un valore conforme al tipo di dati System.DateTime. Il valore della variabile $a sarà il seguente:

        Tuesday, May 31, 2005 12:00:00 AM

ASSEGNAZIONE DI PIÙ VARIABILI

In Windows PowerShell è possibile assegnare i valori a più variabili con un singolo comando. Il primo elemento del valore di assegnazione viene assegnato alla prima variabile, il secondo elemento viene assegnato alla seconda variabile, il terzo elemento alla terza variabile e così via. Ad esempio, il comando seguente assegna il valore 1 alla variabile $a, il valore 2 alla variabile $b e il valore 3 alla variabile $c:

        C:\PS> $a, $b, $c = 1, 2, 3

Se il valore di assegnazione contiene più elementi delle variabili, tutti i valori rimanenti vengono assegnati all'ultima variabile. Ad esempio, il comando seguente contiene tre variabili e cinque valori:

        $a, $b, $c = 1, 2, 3, 4, 5

Di conseguenza, Windows PowerShell assegna il valore 1 alla variabile $a e il valore 2 alla variabile $b, e quindi assegna i valori 3, 4 e 5 alla variabile $c. Per assegnare i valori della variabile $c ad altre tre variabili, usare il formato seguente:

        $d, $e, $f = $c

Questo comando assegna il valore 3 alla variabile $d, il valore 4 alla variabile $e e il valore 5 alla variabile $f.

È anche possibile assegnare un singolo valore a più variabili concatenando le variabili. Ad esempio, il comando seguente assegna il valore "tre" a tutte e quattro le variabili:

        $a = $b = $c = $d = "three"

CMDLET CORRELATI ALLE VARIABILI

Oltre a usare un'operazione di assegnazione per impostare il valore di una variabile, è possibile anche usare il cmdlet Set-Variable. Ad esempio, il comando seguente usa Set-Variable per assegnare una matrice di 1, 2 e 3 alla variabile $a.

        Set-Variable -name a -value 1, 2, 3 

VEDERE ANCHE

about_Arrays

about_Hash_Tables

about_Variables

Clear-Variable

Remove-Variable

Set-Variable