Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Nota editoriale
Importante
La specifica del linguaggio di Windows PowerShell 3.0 è stata pubblicata nel dicembre 2012 ed è basata su Windows PowerShell 3.0. Questa specifica non riflette lo stato corrente di PowerShell. Non è previsto l'aggiornamento di questa documentazione per riflettere lo stato corrente. Questa documentazione è presentata qui per riferimento cronologico.
Il documento di specifica è disponibile come documento di Microsoft Word dal Centro download Microsoft all'indirizzo: https://www.microsoft.com/download/details.aspx?id=36389. Il documento di Word è stato convertito per la presentazione su Microsoft Learn. Durante la conversione sono state apportate alcune modifiche editoriali per supportare la formattazione per la piattaforma Docs. Sono stati corretti alcuni errori di digitazioni e errori secondari.
Una variabile rappresenta una posizione di archiviazione per un valore e tale valore ha un tipo. I linguaggi di programmazione procedurale tradizionali sono tipizzati in modo statico; ovvero, il tipo al momento dell'esecuzione di una variabile è quello con cui è stata dichiarata in fase di compilazione. I linguaggi orientati agli oggetti aggiungono l'idea dell'ereditarietà, che consente al tipo di runtime di una variabile di essere quella con cui è stata dichiarata in fase di compilazione o un tipo derivato da tale tipo. Essendo un linguaggio tipizzato in modo dinamico, le variabili di PowerShell non hanno tipi, per se. Infatti, le variabili non sono definite; vengono semplicemente in essere quando vengono assegnati per la prima volta un valore. Mentre una variabile può essere vincolata (§5.3) per contenere un valore di un determinato tipo, le informazioni sul tipo in un'assegnazione non possono essere sempre verificate in modo statico.
In momenti diversi, una variabile può essere associata a valori di tipi diversi tramite assegnazione (§7.11) o l'uso degli operatori ++ e ‑‑ (§7.1.5, §7.2.6). Quando il valore associato a una variabile viene modificato, il tipo di tale valore può cambiare. Per esempio
$i = "abc" # $i holds a value of type string
$i = 2147483647 # $i holds a value of type int
++$i # $i now holds a value of type double because
# 2147483648 is too big to fit in type int
Qualsiasi uso di una variabile che non è stata creata restituisce il valore $null. Per verificare se è stata definita una variabile, usare il cmdlet test-path
5.1 Locazione scrivibile
Una posizione scrivibile è un'espressione che indica una risorsa a cui un comando ha accesso sia in lettura che in scrittura. Una posizione scrivibile può essere una variabile (§5), un elemento di matrice (§9), un valore associato in una tabella Hash accessibile tramite un pedice (§10), una proprietà (§7.1.2) o l'archiviazione gestita da un provider (§3.1).
5.2 Categorie di variabili
PowerShell definisce le categorie di variabili seguenti: variabili statiche, variabili di istanza, elementi di matrice, coppie chiave/valore hashtable, parametri, variabili normali e variabili nelle unità del provider. Le sottosezioni che seguono descrivono ognuna di queste categorie.
Nell'esempio seguente
function F ($p1, $p2) {
$radius = 2.45
$circumference = 2 * ([Math]::PI) * $radius
$date = Get-Date -Date "2010-2-1 10:12:14 pm"
$month = $date.Month
$values = 10, 55, 93, 102
$value = $values[2]
$h1 = @{ FirstName = "James"; LastName = "Anderson" }
$h1.FirstName = "Smith"
$Alias:A = "Help"
$Env:MyPath = "E:\Temp"
${E:output.txt} = 123
$Function:F = { "Hello there" }
$Variable:v = 10
}
-
[Math::PI]è una variabile statica -
$date.Monthè una variabile di istanza -
$values[2]è un elemento di matrice -
$h1.FirstNameè una chiave diHashtableil cui valore corrispondente è $h 1['FirstName']' -
$p1e$p2sono parametri -
$radius,$circumference,$date,$month,$values,$valuee$h1sono variabili comuni -
$Alias:A,$Env:MyPath,${E:output.txt}e$Function:Fsono variabili nelle unità disco dei fornitori corrispondenti. -
$Variable:vè in realtà una variabile comune scritta con la sua unità di archiviazione del provider completa.
5.2.1 Variabili statiche
Un membro dati di un oggetto che appartiene al tipo dell'oggetto anziché a quella specifica istanza del tipo viene chiamata variabile statica . Per alcuni esempi, vedere §4.2.3, §4.2.4.1e §4.3.8.
PowerShell non consente di creare nuovi tipi contenenti variabili statiche; Tuttavia, gli oggetti di tali tipi possono essere forniti dall'ambiente host.
La memoria per la creazione e l'eliminazione di oggetti contenenti variabili statiche viene gestita dall'ambiente host e dal sistema di Garbage Collection.
Per informazioni sull'accesso a una variabile statica, vedere §7.1.2.
Un membro dati statico può essere un campo o una proprietà.
5.2.2 Variabili di istanza
Un membro dati di un oggetto che appartiene a una particolare istanza del tipo dell'oggetto, piuttosto che al tipo stesso, è chiamato variabile di istanza . Per alcuni esempi, vedere §4.3.1, §4.3.2e §4.3.3.
Un ambiente host di PowerShell può fornire un modo per creare nuovi tipi contenenti variabili di istanza o per aggiungere nuove variabili di istanza ai tipi esistenti.
La memoria per la creazione e l'eliminazione di oggetti contenenti variabili statiche viene gestita dall'ambiente host e dal sistema di Garbage Collection.
Per informazioni sull'accesso a una variabile di istanza, vedere §7.1.2.
Un membro dati dell'istanza può essere un campo o una proprietà.
5.2.3 Elementi della matrice
È possibile creare una matrice tramite un operatore virgola unaria (§7.2.1), sottoespressione (§7.1.6), espressione di matrice (§7.1.7), operatore binario virgola (§7.3), operatore di intervallo (§7.4) o cmdlet New-Object.
La memoria per la creazione e l'eliminazione di matrici viene gestita dall'ambiente host e dal sistema di Garbage Collection.
Le matrici e gli elementi della matrice sono descritti in §9.
5.2.4 Coppie chiave/valore della tabella hash
Una Hashtable viene creata tramite un hash letterale (§2.3.5.6) o il cmdlet New-Object. È possibile aggiungere una nuova coppia chiave/valore tramite l'operatore [] (§7.1.4.3).
La memoria per la creazione e l'eliminazione di tabelle hash viene gestita dall'ambiente host e dal sistema di Garbage Collection.
Le tabelle hash sono descritte in §10.
5.2.5 Parametri
Un parametro viene creato quando viene richiamato il comando padre e viene inizializzato con il valore dell'argomento fornito nella chiamata o dall'ambiente host. Un parametro smette di esistere quando termina il comando padre.
I parametri sono descritti in §8.10.
5.2.6 Variabili ordinari
Una variabile comune è definita da un'espressione di assegnazione (§7.11) o da un'istruzione foreach (§8.4.4). Alcune variabili ordinarie sono predefinite dall'ambiente host, mentre altre sono temporanee, che compaiono e scompaiono nel runtime.
La durata di una variabile ordinaria è quella parte dell'esecuzione del programma durante la quale è garantito che lo spazio di archiviazione sia riservato per essa. La durata inizia al momento dell'ingresso nell'ambito a cui è associata e termina non prima della conclusione dell'esecuzione di quell'ambito. Se l'ambito padre viene immesso in modo ricorsivo o iterativo, ogni volta viene creata una nuova istanza della variabile locale.
L'archiviazione a cui fa riferimento una variabile comune viene recuperata indipendentemente dalla durata di tale variabile.
Una variabile comune può essere denominata in modo esplicito con una variabile : prefisso dello spazio dei nomi (§5.2.7).
5.2.7 Variabili nei drive del provider
Il concetto di provider e di unità viene introdotto in §3.1, dove ogni provider è in grado di fornire il proprio namespace unità. In questo modo è possibile accedere alle risorse in tali unità come se fossero variabili normali (§5.2.6). Infatti, una variabile comune viene archiviata nell'unità del provider del file system Variabile: (§3.1.5) e può essere accessibile con il suo nome ordinario o il nome completo dello spazio dei nomi.
Alcuni tipi di variabili dello spazio dei nomi sono vincolati in modo implicito (§5.3).
5.3 Variabili vincolate
Per impostazione predefinita, una variabile può designare un valore di qualsiasi tipo. Tuttavia, una variabile può essere vincolata per designare i valori di un determinato tipo specificando tale tipo come valore letterale di tipo prima del nome in un'assegnazione o in un parametro. Per esempio
[int]$i = 10 # constrains $i to designating ints only
$i = "Hello" # error, no conversion to int
$i = "0x10" # ok, conversion to int
$i = $true # ok, conversion to int
function F ([int]$p1, [switch]$p2, [regex]$p3) { ... }
Qualsiasi variabile appartenente allo spazio dei nomi Env:, Alias:o allo spazio dei nomi del file system (§2.3.2, §3.1) è vincolata in modo implicito al tipo string. Qualsiasi variabile appartenente allo spazio dei nomi Funzione: (§2.3.2, §3.1) è vincolata in modo implicito al tipo scriptblock.