about_Assignment_Operators

Descrizione breve

Viene descritto come usare gli operatori per assegnare valori alle variabili.

Descrizione lunga

Gli operatori di assegnazione assegnano uno o più valori a una variabile. Il segno di uguale (=) è l'operatore di assegnazione di PowerShell. PowerShell include anche gli operatori di assegnazione composta seguenti: +=, *=-=, , ++%=, --??=. Gli operatori di assegnazione composti eseguono operazioni sui valori prima dell'assegnazione.

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 o un comando, un'espressione o un'istruzione.

Gli operatori di incremento e decremento sono operatori unari. Ognuno ha versioni di prefisso e di prefisso.

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

Il valore dell'espressione assegnabile deve essere un numero oppure deve essere convertibile in un numero.

Uso dell'operatore di assegnazione

Le variabili sono spazi di memoria denominati che archiviano i valori. I valori sono archiviati nelle variabili usando l'operatore di =assegnazione . Il nuovo valore può sostituire il valore esistente della variabile oppure aggiungere un nuovo valore al valore esistente. Ad esempio, l'istruzione seguente assegna il valore di PowerShell alla $MyShell variabile :

$MyShell = "PowerShell"

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

$a = 6
$a = 12

Le variabili in PowerShell non hanno un tipo di dati specifico, a meno che non vengano eseguite il cast. Quando una variabile contiene un solo oggetto, la variabile accetta il tipo di dati di tale oggetto. Quando una variabile contiene una raccolta di oggetti, la variabile ha il tipo di dati System.Object . Pertanto, è possibile assegnare qualsiasi tipo di oggetto alla raccolta. L'esempio seguente mostra che è possibile aggiungere oggetti di processo, oggetti del servizio, stringhe e numeri interi a una variabile 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 $a variabile :

$a = Get-Service | Sort-Object -Property name

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

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

In questo esempio viene assegnato zero alla $a variabile se il valore di è minore di $b zero. Assegna il valore di $b a $a se il valore di $b non è minore di zero.

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

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

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

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

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

$a = 0x10

Per assegnare un valore esponenziale a una variabile, digitare il numero radice, la lettera ee un numero che rappresenta un multiplo di 10. Ad esempio, per assegnare un valore pari a 3,1415 alla potenza di 1.000 alla $a variabile, digitare:

$a = 3.1415e3

PowerShell può anche convertire kilobyte, megabyte KBMBe gigabyte GB in byte. Ad esempio, per assegnare un valore di 10 kilobyte alla $a variabile, digitare:

$a = 10kb

Uso di operatori di assegnazione composti

Gli operatori di assegnazione composti eseguono operazioni numeriche sui valori prima dell'assegnazione.

Importante

Gli operatori di assegnazione composta non usano l'ambito dinamico. La variabile è sempre nell'ambito corrente.

Nell'esempio seguente la variabile $x viene definita nell'ambito globale. Le parentesi graffe creano un nuovo ambito. La variabile $x all'interno delle parentesi graffe è una nuova istanza e non una copia della variabile globale.

$x = 1 # Global scope
& { $x += 1; $x }
1

Quando si usa l'operatore di assegnazione regolare, si ottiene una copia della variabile dall'ambito padre. Si noti tuttavia che $x nell'ambito padre non viene modificato.

$x = 1 # Global scope
& { $x = $x + 1; $x }
"Global `$x = $x"
2
Global $x = 1

Assegnazione tramite operatore di addizione

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

L'operatore += combina due operazioni. Prima di tutto, aggiunge e quindi assegna. Di conseguenza, le istruzioni seguenti sono equivalenti:

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

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

$a = 4
$a += 2
$a
6

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

$a = "Windows"
$a += " PowerShell"
$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 venga digitata in modo esplicito tramite cast, è possibile aggiungere qualsiasi tipo di valore alla matrice, come indicato di seguito:

$a = 1,2,3
$a += 2
$a
1
2
3
2

e

$a += "String"
$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 hanno esito negativo.

Ad esempio, il comando seguente assegna una tabella hash alla $a variabile . Usa quindi l'operatore += per aggiungere un'altra tabella hash alla tabella hash esistente, aggiungendo in modo efficace una nuova coppia chiave-valore alla tabella hash esistente. Questo comando ha esito positivo, come illustrato nell'output:

$a = @{a = 1; b = 2; c = 3}
$a += @{mode = "write"}
$a
Name                           Value
----                           -----
a                              1
b                              2
mode                           write
c                              3

Il comando seguente tenta di aggiungere un numero intero "1" alla tabella hash nella $a variabile . Questo comando ha esito negativo:

$a = @{a = 1; b = 2; c = 3}
$a += 1
InvalidOperation:
Line |
   2 |  $a += 1
     |  ~~~~~~~
     | A hash table can only be added to another hash table.

Assegnazione tramite operatore di sottrazione

L'assegnazione tramite operatore -= di sottrazione decrementa il valore di una variabile in base al valore specificato sul lato destro dell'operatore. Questo operatore non può essere usato con le variabili stringa e non può essere usato per rimuovere un elemento da una raccolta.

L'operatore -= combina due operazioni. Prima di tutto, sottrae e quindi assegna. Di conseguenza, le istruzioni seguenti sono equivalenti:

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

Nell'esempio seguente viene illustrato come usare l'operatore -= per ridurre il valore di una variabile:

$a = 8
$a -= 2
$a
6

È anche possibile usare l'operatore -= di assegnazione per ridurre 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 ridotto di 1:

$a = 1,2,3
$a[2] -= 1
$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 un valore di $null o "" alla variabile.

$a = $null

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

$a = 1,2,3
$a
1
2
3
$a[1] = $null
$a
1
3

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

Remove-Variable -Name a

Assegnazione per operatore di moltiplicazione

L'assegnazione per operatore *= 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. Nell'esempio seguente viene illustrato ad esempio come usare l'operatore *= per moltiplicare il valore di una variabile:

$a = 3
$a *= 4
$a
12

In questo caso, l'operatore *= combina due operazioni. In primo luogo, moltiplica e quindi assegna. Di conseguenza, le istruzioni seguenti sono equivalenti:

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

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

$a = "file"
$a *= 4
$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 della matrice (posizione di indice 0) per 2:

$a[0] *= 2

Assegnazione per operatore di divisione

L'assegnazione per operatore /= divisione divide un valore numerico in base al valore specificato sul lato destro dell'operatore. L'operatore non può essere usato con le variabili stringa.

L'operatore /= combina due operazioni. Prima di tutto, divide e quindi assegna. Di conseguenza, 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:

$a = 8
$a /=2
$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

Assegnazione in base all'operatore modulo

L'assegnazione per operatore %= modulo divide il valore di una variabile in base al 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 usare questo operatore quando una variabile contiene una variabile stringa o una matrice.

L'operatore %= combina due operazioni. Prima di tutto, divide e determina il resto e quindi assegna il resto alla variabile. Di conseguenza, le istruzioni seguenti sono equivalenti:

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

Nell'esempio seguente viene illustrato come usare l'operatore %= per salvare il modulo di un quoziente:

$a = 7
$a %= 4
$a
3

Operatori di incremento e decremento

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

$a = 7
++$a
$a
8

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

$a = 7
(++$a)
8

L'operatore di incremento può essere posizionato prima (prefisso) o dopo (prefisso) di una variabile. La versione del prefisso dell'operatore incrementa una variabile prima che venga usato nell'istruzione , come indicato di seguito:

$a = 7
$c = ++$a
$a
8
$c
8

La versione del prefisso dell'operatore incrementa una variabile dopo l'uso del relativo valore nell'istruzione . Nell'esempio seguente le $c variabili e $a hanno valori diversi perché il valore viene assegnato a $c prima $a delle modifiche:

$a = 7
$c = $a++
$a
8
$c
7

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

$a = 7
--$a
$a
6
(--$a)
5

La versione del prefisso dell'operatore decrementa una variabile prima che il relativo valore venga usato nell'istruzione , come indicato di seguito:

$a = 7
$c = --$a
$a
6
$c
6

La versione suffisso dell'operatore decrementa una variabile dopo l'uso del relativo valore nell'istruzione . Nell'esempio seguente le $d variabili e $a hanno valori diversi perché il valore viene assegnato a $d prima $a delle modifiche:

$a = 7
$d = $a--
$a
6
$d
7

Operatore di assegnazione null-coalescing

L'operatore ??= di assegnazione null-coalescing assegna il valore dell'operando di destra all'operando di sinistra solo se l'operando di sinistra restituisce Null. L'operatore ??= non valuta l'operando di destra se l'operando di sinistra restituisce un valore non Null.

$x = $null
$x ??= 100
$x
100

Per altre informazioni, vedere Operatore null-coalescing.

Tipi Microsoft .NET

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

$a = 6

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

$a = 6
$a.GetType().FullName
System.Int32

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

$a = "6"
$a.GetType().FullName
System.String

Se il primo valore assegnato alla variabile è una stringa, PowerShell considera tutte le operazioni come operazioni stringa e esegue il cast di nuovi valori alle stringhe. Questo errore si verifica nell'esempio seguente:

$a = "file"
$a += 3
$a
file3

Se il primo valore è un numero intero, PowerShell considera tutte le operazioni come operazioni integer e esegue il cast di nuovi valori a numeri interi. Questo errore si verifica nell'esempio seguente:

$a = 6
$a += "3"
$a
9

È possibile eseguire il cast di una nuova variabile scalare come qualsiasi tipo .NET 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, si definisce il tipo di dati che è possibile archiviare nella variabile .

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

[string]$a = 27
$a += 3
$a
273

Nell'esempio seguente viene eseguito il cast del primo valore anziché eseguire il cast della variabile:

$a = [string]27

Non è possibile eseguire il recast del tipo di dati di una variabile esistente se il relativo valore non può essere convertito nel nuovo tipo di dati.

$a = "string"
[int]$a
InvalidArgument: Cannot convert value "string" to type "System.Int32". Error:
"The input string 'string' was not in a correct format."

Per modificare il tipo di dati, è necessario sostituirne il valore, come indicato di seguito:

[int]$a = 3

Inoltre, quando si precede un nome di variabile con un tipo di dati, il tipo di tale variabile viene bloccato a meno che non si esegua esplicitamente l'override del tipo specificando un altro tipo di dati. Se si tenta di assegnare un valore incompatibile con il tipo esistente e non si esegue l'override esplicito del tipo, PowerShell visualizza un errore, come illustrato nell'esempio seguente:

$a = 3
$a = "string"
[int]$a = 3
$a = "string"
MetadataError:
Line |
   2 |  $a = "string"
     |  ~~~~~~~~~~~~~
     | Cannot convert value "string" to type "System.Int32". Error: "The input
string 'string' was not in a correct format."
[string]$a = "string"

In PowerShell i tipi di dati di 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 sia assegnato specificamente 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 string [] tipo di matrice:

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

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

[System.DateTime]$a = "5/31/2005"

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

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

Assegnazione di più variabili

In PowerShell è possibile assegnare valori a più variabili usando 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. Questa operazione è nota come assegnazione multipla.

Ad esempio, il comando seguente assegna il valore 1 alla $a variabile, il valore 2 alla $b variabile e il valore 3 alla $c variabile:

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

Se il valore di assegnazione contiene più elementi rispetto alle 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, PowerShell assegna il valore 1 alla $a variabile e il valore 2 alla $b variabile. Assegna i valori 3, 4 e 5 alla $c variabile. Per assegnare i valori nella $c variabile a tre altre variabili, usare il formato seguente:

$d, $e, $f = $c

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

Se il valore di assegnazione contiene meno elementi rispetto alle variabili, alle variabili rimanenti viene assegnato il valore $null. Ad esempio, il comando seguente contiene tre variabili e due valori:

$a, $b, $c = 1, 2

Di conseguenza, PowerShell assegna il valore 1 alla $a variabile e il valore 2 alla $b variabile. La $c variabile è $null.

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

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

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

Set-Variable -Name a -Value 1, 2, 3

Vedi anche