ARGOMENTO about_assignment_operators DESCRIZIONE BREVE Descrive come utilizzare gli operatori per assegnare valori alle variabili. DESCRIZIONE DETTAGLIATA Gli operatori di assegnazione assegnano uno o più valori a una variabile. Consentono di eseguire operazioni numeriche sui valori prima dell'assegnazione. In Windows PowerShell sono supportati gli operatori di assegnazione seguenti. Operatore Descrizione ------- ----------- = Imposta il valore di una variabile sul valore specificato. += Aumenta il valore di una variabile per il valore specificato o aggiunge il valore specificato a quello esistente. -= Diminuisce il valore di una variabile del valore specificato. *= Moltiplica il valore di una variabile per il valore specificato o aggiunge il valore specificato a quello esistente. /= Divide il valore di una variabile per il valore specificato. %= Divide il valore di una variabile per il valore specificato, quindi assegna il resto alla variabile. ++ Aumenta di 1 il valore di una variabile, una proprietà assegnabile o un elemento di matrice. -- Diminuisce di 1 il valore di una variabile, una proprietà assegnabile o un elemento di matrice. SINTASSI La sintassi degli operatori di assegnazione è la seguente: <espressione-assegnabile> <operatore di assegnazione> <valore> Le espressioni assegnabili includono variabili e proprietà. Il valore può essere un valore singolo, una matrice di valori o un comando, un'espressione o un'istruzione. Gli operatori di incremento e di decremento sono operatori unari. Ciascuno dispone di versioni con prefisso e con suffisso. <espressione-assegnabile><operatore> <operatore><espressione-assegnabile> L'espressione assegnabile deve essere un numero o un elemento convertibile in un numero. ASSEGNAZIONE DI VALORI Le variabili sono spazi di memoria denominati in cui vengono archiviati valori. I valori vengono archiviati nelle variabili tramite l'operatore di assegnazione (=).Il nuovo valore può sostituire il valore esistente della variabile oppure è possibile aggiungere un nuovo valore a quello 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, la variabile viene creata se non è già esistente. Ad esempio, con la prima delle due istruzioni di assegnazione seguenti viene creata la variabile $a alla quale viene assegnato un valore di 6. Con la seconda istruzione di assegnazione viene assegnato un valore di 12 alla variabile $a. La prima istruzione crea una nuova variabile. La seconda ne modifica solo il valore: $a = 6 $a = 12 Le variabili in Windows PowerShell non dispongono di un tipo di dati specifico a meno che non se ne esegua il cast. Quando una variabile contiene solo un oggetto, accetta 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 qualsiasi tipo di oggetto alla raccolta. Nell'esempio seguente viene illustrato che è possibile aggiungere oggetti processo, oggetti servizio, stringhe e valori interi a una variabile senza generare un errore: $a = get-process $a += get-service $a += "stringa" $a += 12 Poiché l'operatore di assegnazione (=) dispone di una precedenza inferiore rispetto all'operatore pipeline (|), le parentesi non sono necessarie per assegnare a una variabile il risultato di una pipeline dei comandi. Ad esempio, nel comando seguente vengono ordinati i servizi del computer, che vengono quindi assegnati alla variabile $a: $a = get-service | sort name È inoltre possibile assegnare a una variabile il valore creato da un'istruzione, come nell'esempio seguente: $a = if ($b -lt 0) { 0 } else { $b } In questo esempio viene assegnato 0 alla variabile $a se il valore di $b è minore di 0. Se tale valore non è minore di zero, viene assegnato a $a. OPERATORE DI ASSEGNAZIONE (=) L'operatore di assegnazione (=) assegna valori alle variabili. Se la variabile ha già un valore, l'operatore di assegnazione (=) sostituisce il valore senza alcun avviso. Nell'istruzione seguente il valore intero 6 viene assegnato alla variabile $a: $a = 6 Per assegnare a una variabile un valore stringa, racchiuderlo tra virgolette nel modo seguente: $a = "baseball" Per assegnare una matrice (più valori) a una variabile, separare i valori con le virgole nel modo seguente: $a = "mela", "arancia", "limone", "uva" Per assegnare una tabella hash a una variabile, utilizzare la notazione della tabella hash standard in Windows PowerShell. Digitare una chiocciola (@) seguita da coppie chiave/valore separate da punto e virgola (;) e racchiusi tra parentesi graffe ({ }). Ad esempio, per assegnare una tabella hash alla variabile $a, digitare: $a = @{uno=1; due=2; tre=3} Per assegnare valori esadecimali a una variabile, anteporre "0x" al valore. In Windows PowerShell il valore esadecimale (0x10) viene convertito in valore decimale (in questo caso 16) e tale valore viene assegnato 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 radice, la lettera "e" e un numero che rappresenta un multiplo di 10. Ad esempio, per assegnare il valore 3,1415 elevato a 1.000 alla variabile $a, digitare: $a = 3,1415e3 In Windows PowerShell è inoltre possibile convertire kilobyte (KB), megabyte (MB) e gigabyte (GB) in byte. Ad esempio, per assegnare un valore di 10 kilobyte alla variabile $a, digitare: $a = 10kb ASSEGNAZIONE MEDIANTE OPERATORE DI ADDIZIONE (+=). L'assegnazione mediante operatore di addizione (+=) aumenta il valore di una variabile o aggiunge il valore specificato al valore esistente. L'azione varia a seconda che la variabile sia di tipo numerico o stringa e contenga un solo valore (scalare) o più valori (raccolta). L'operatore += combina due operazioni. Innanzitutto aggiunge un valore, quindi lo assegna. Pertanto, le istruzioni seguenti sono equivalenti: $a += 2 $a = ($a + 2) Quando la variabile contiene un solo valore numerico, l'operatore += aumenta il valore esistente del valore specificato a destra dell'operatore. Quindi, l'operatore assegna il valore risultante alla variabile. Nell'esempio seguente viene illustrato come utilizzare l'operatore += per aumentare 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, nel modo seguente: C:\PS> $a = "Windows" C:\PS> $a +- " PowerShell" C:\PS> $a Windows PowerShell Quando il valore della variabile è una matrice, i valori a destra dell'operatore += vengono aggiunti alla matrice. A meno che la matrice non venga digitata in modo esplicito mediante cast, è possibile aggiungere a essa qualsiasi tipo di valore, nel modo seguente: C:\PS> $a = 1,2,3 C:\PS> $a += 2 C:\PS> $a 1 2 3 2 C:\PS> $a += "Stringa" C:\PS> $a 1 2 3 2 String Quando il valore di una variabile è una tabella hash, il valore a destra dell'operatore += viene aggiunto alla tabella hash. Tuttavia, poiché l'unico tipo che è possibile aggiungere a una tabella hash è un'altra tabella hash, ogni altra assegnazione ha esito negativo. Ad esempio, con il comando seguente viene assegnata una tabella hash alla variabile $a: Quindi, l'operatore + = viene utilizzato per aggiungere un'altra tabella hash alla tabella hash esistente, aggiungendo in effetti una nuova coppia chiave/valore alla tabella hash esistente. Questo comando ha esito positivo, 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 Mediante il comando seguente si tenta di aggiungere un valore intero (1) alla tabella hash nella variabile $a. Questo comando ha esito negativo: C:\PS> $a = @{a = 1; b = 2; c = 3} C:\PS> $a += 1 È possibile aggiungere un'altra tabella hash solo a una tabella hash. At line:1 char:6 + $a += <<<< 1 ASSEGNAZIONE MEDIANTE OPERATORE DI SOTTRAZIONE (-=) L'assegnazione mediante operatore di sottrazione (-=) diminuisce il valore di una variabile del valore specificato a destra dell'operatore. Questo operatore non può essere utilizzato con le variabili di stringa, né per rimuovere un elemento da una raccolta. L'operatore -= combina due operazioni. Innanzitutto sottrae un valore, quindi assegna il valore risultante. Pertanto, le istruzioni seguenti sono equivalenti: $a -= 2 $a = ($a - 2) Nell'esempio seguente viene illustrato come utilizzare l'operatore -= per diminuire il valore di una variabile: C:\PS> $a = 8 C:\PS> $a -= 2 C:\PS> $a 6 È inoltre possibile utilizzare l'operatore di assegnazione -= per diminuire il valore di un membro di una matrice numerica. A tale scopo, specificare l'indice dell'elemento della matrice che si desidera 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 utilizzare l'operatore -= per eliminare i valori di una variabile. Per eliminare tutti i valori assegnati a una variabile, utilizzare il cmdlet Clear-Item o Clear-Variable per assegnare un valore $null o "" alla variabile. $a = $null Per eliminare un determinato valore da una matrice, utilizzare la notazione di matrice per assegnare un valore $null a tale elemento. Ad esempio, mediante l'istruzione seguente viene eliminato 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, utilizzare il cmdlet Remove-Variable. Questo metodo è utile quando viene eseguito il cast esplicito della variabile a un determinato tipo di dati e si desidera una variabile non tipizzata. Nel comando seguente viene eliminata la variabile $a: remove-variable a ASSEGNAZIONE MEDIANTE OPERATORE DI MOLTIPLICAZIONE (*=) L'assegnazione mediante operatore di moltiplicazione (*=) moltiplica un valore numerico o aggiunge il numero specificato di copie del valore di stringa di una variabile. Quando una variabile contiene un solo valore numerico, tale valore viene moltiplicato per il valore a destra dell'operatore. Nell'esempio seguente viene illustrato come utilizzare 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. Innanzitutto moltiplica per un valore, quindi assegna il valore risultante. Pertanto, le istruzioni seguenti sono equivalenti: $a *= 2 $a = ($a * 2) Quando una variabile contiene un valore di stringa, il numero specificato di stringhe viene aggiunto al valore, nel modo seguente: C:\PS> $a = "file" C:\PS> $a *= 4 C:\PS> $a filefilefilefile Per moltiplicare un elemento di una matrice, utilizzare un indice per identificare l'elemento che si desidera moltiplicare. Mediante il comando seguente, ad esempio, il primo elemento della matrice, nella posizione di indice 0, viene moltiplicato per 2: $a[0] *= 2 ASSEGNAZIONE MEDIANTE OPERATORE DI DIVISIONE (/=). L'assegnazione mediante operatore di divisione (/=) divide un valore numerico per il valore specificato a destra dell'operatore. Non è possibile utilizzare questo operatore con variabili stringa. L'operatore /= combina due operazioni. Innanzitutto divide un valore, quindi assegna il valore risultante. Pertanto, le due istruzioni seguenti sono equivalenti: $a /= 2 $a = ($a / 2) Ad esempio, nel comando seguente viene utilizzato 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, utilizzare un indice per identificare l'elemento che si desidera modificare. Tramite il comando seguente, ad esempio, il secondo elemento della matrice, nella posizione di indice 1, viene diviso per 2: $a[1] /= 2 ASSEGNAZIONE MEDIANTE OPERATORE MODULO (/=). L'assegnazione mediante operatore modulo (%=) divide il valore di una variabile per il valore a destra dell'operatore. Quindi, l'operatore %= assegna il resto alla variabile. È possibile utilizzare questo operatore solo quando una variabile contiene un solo valore numerico. Non è possibile utilizzarlo quando una variabile contiene una variabile di stringa o una matrice. L'operatore %= combina due operazioni. Innanzitutto, divide un valore e calcola il resto, quindi assegna il resto alla variabile. Pertanto, le istruzioni seguenti sono equivalenti: $a %= 2 $a = ($a % 2) Nell'esempio seguente viene illustrato come utilizzare l'operatore %= per salvare il resto di un quoziente: C:\PS> $a = 7 C:\PS> $a %= 4 C:\PS> $a 3 OPERATORI DI INCREMENTO E DECREMENTO L'operatore di incremento (++) aumenta il valore di una variabile di 1. Quando si utilizza l'operatore di incremento in un'istruzione semplice, non viene restituito alcun valore. Per visualizzare il risultato, visualizzare il valore della variabile, nel modo seguente: 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, nel modo seguente: C:\PS> $a = 7 C:\PS> (++$a) 8 È possibile posizionare l'operatore di incremento prima (prefisso) o dopo (suffisso) una variabile. La versione con prefisso dell'operatore incrementa una variabile prima che il relativo valore venga utilizzato nell'istruzione, nel modo seguente: C:\PS> $a = 7 C:\PS> $c = ++$a C:\PS> $a 8 C:\PS> $c 8 La versione con suffisso dell'operatore incrementa una variabile dopo che il relativo valore viene utilizzato nell'istruzione. Nell'esempio seguente, le variabili $c e $a hanno valori diversi perché il valore viene assegnato a $c prima che $a venga modificato: 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 per l'operatore di incremento, quando si utilizza questo operatore in un'istruzione semplice non viene restituito alcun valore. Utilizzare le parentesi per restituire un valore, nel modo seguente: C:\PS> $a = 7 C:\PS> --$a C:\PS> $a 6 C:\PS> (--$a) 5 La versione con prefisso dell'operatore decrementa una variabile prima che il relativo valore venga utilizzato nell'istruzione, nel modo seguente: C:\PS> $a = 7 C:\PS> $c = --$a C:\PS> $a 6 C:\PS> $c 6 La versione con suffisso dell'operatore decrementa una variabile dopo che il relativo valore viene utilizzato nell'istruzione. Nell'esempio seguente, le variabili $d e $a hanno valori diversi perché il valore viene assegnato a $d prima che $a venga modificato: C:\PS> $a = 7 C:\PS> $d = $a-- C:\PS> $a 6 C:\PS> $d 7 TIPI MICROSOFT .NET FRAMEWORK Per impostazione predefinita, quando una variabile presenta un solo valore, il valore assegnato alla variabile determina il tipo di dati della variabile stessa. Ad esempio, nel comando seguente viene creata una variabile con tipo Integer (System.Int32): $a = 6 Per trovare il tipo .NET Framework di una variabile, utilizzare il metodo GetType e la proprietà FullName, nel modo seguente. Verificare di includere le parentesi dopo il nome del metodo GetType, anche se la chiamata al metodo non ha argomenti: C:\PS> $a = 6 C:\PS> $a.gettype().fullname System.Int32 Per creare una variabile che contiene una stringa, assegnare un valore di stringa alla variabile. Per indicare che il valore è una stringa, racchiuderlo tra virgolette nel modo seguente: C:\PS> $a = "6" C:\PS> $a.gettype().fullname System.String Se il primo valore assegnato alla variabile è una stringa, in Windows PowerShell tutte le operazioni vengono trattate come operazioni di stringa e viene eseguito il cast dei nuovi valori a stringhe. Questa condizione è illustrata nell'esempio seguente. C:\PS> $a = "file" C:\PS> $a += 3 C:\PS> $a file3 Se il primo valore è un valore intero, in Windows PowerShell tutte le operazioni vengono trattate come operazioni relative a valori interi e viene eseguito il cast dei nuovi valori a valori interi. Questa condizione è illustrata 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 specificando il nome del tipo tra parentesi davanti al nome della variabile o al primo valore di assegnazione. Quando si esegue il cast di una variabile, è possibile determinare quali tipi di dati possono essere archiviati nella variabile. È inoltre possibile determinare il comportamento della variabile quando viene modificata. Tramite il comando seguente, ad esempio, viene eseguito il cast della variabile come tipo stringa: C:\PS> [string]$a = 27 C:\PS> $a += 3 C:\PS> $a 273 Nell'esempio seguente viene eseguito il cast del primo valore, anziché della variabile: $a = [string]27 Quando si esegue il cast di una variabile a un tipo specifico, in genere si esegue il cast della variabile stessa e non del valore. Tuttavia, non è possibile eseguire nuovamente il cast del tipo di dati di una variabile esistente se non è possibile convertire tale valore nel nuovo tipo di dati. Per modificare il tipo di dati, è necessario sostituire il valore nel modo seguente: C:\PS> $a = "stringa" C:\PS> [int]$a Impossibile convertire il valore "stringa" nel tipo "System.Int32". Errore: "Stringa di input non in formato corretto." At line:1 char:8 + [int]$a <<<< C:\PS> [int]$a =3 Inoltre, anteponendo un tipo di dati a un nome di variabile, il tipo della variabile viene bloccato a meno che non lo si sostituisca in modo esplicito specificando un altro tipo di dati. Se si tenta di assegnare un valore non compatibile con il tipo esistente e non si sostituisce esplicitamente il tipo, in Windows PowerShell viene visualizzato un errore, come illustrato nell'esempio seguente. C:\PS> $a = 3 C:\PS> $a = "stringa" C:\PS> [int]$a = 3 C:\PS> $a = "stringa" Impossibile convertire il valore "stringa" nel tipo "System.Int32". Errore: "Stringa di input non in formato corretto." At line:1 char:3 + $a <<<< = "stringa" C:\PS> [string]$a = "stringa" 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 solo elemento. A meno che a una variabile di tipo matrice non venga assegnato un tipo di dati specifico, il tipo di dati è sempre System.Object []. Questo tipo di dati è specifico delle matrici. Talvolta, è possibile sostituire il tipo predefinito specificandone un altro. Ad esempio, con il comando seguente viene eseguito il cast della variabile come tipo matrice string[]: [string []] $a = "one", "two", "three" Le variabili di Windows PowerShell possono essere di qualsiasi tipo di dati .NET Framework. È inoltre possibile assegnare qualsiasi tipo di dati .NET Framework completo disponibile nel processo corrente. Ad esempio, nel comando seguente viene specificato il tipo 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: martedì, 31 maggio 2005 12.00.00 ASSEGNAZIONE DI PIÙ VARIABILI In Windows PowerShell è possibile assegnare valori a più variabili con un unico comando. Il primo elemento del valore di assegnazione viene assegnato alla prima variabile, il secondo alla seconda variabile, il terzo alla terza variabile e così via. Ad esempio, mediante il comando seguente viene assegnato 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 un numero di elementi maggiore rispetto al numero di 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 Pertanto, in Windows PowerShell il valore 1 viene assegnato alla variabile $a e il valore 2 viene assegnato alla variabile $b. I valori 3, 4 e 5 vengono assegnati alla variabile $c. Per assegnare i valori della variabile $c ad altre tre variabili, utilizzare il formato seguente: $d, $e, $f = $c Con questo comando il valore 3 viene assegnato alla variabile $d, il valore 4 alla variabile $e e il valore 5 alla variabile $f. È inoltre possibile assegnare un singolo valore a più variabili concatenando le variabili. Tramite il comando seguente, ad esempio, viene assegnato il valore "tre" a tutte e quattro le variabili: $a = $b = $c = $d = "three" CMDLET CORRELATI ALLE VARIABILI Oltre a utilizzare un'operazione di assegnazione per impostare il valore di una variabile, è inoltre possibile utilizzare il cmdlet Set- Variable. Ad esempio, nel comando seguente viene utilizzato Set-Variable per assegnare una matrice costituita da 1, 2, 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