Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Redaktionell anteckning
Viktig
Windows PowerShell Language Specification 3.0 publicerades i december 2012 och baseras på Windows PowerShell 3.0. Den här specifikationen återspeglar inte det aktuella tillståndet för PowerShell. Det finns ingen plan för att uppdatera den här dokumentationen för att återspegla det aktuella tillståndet. Den här dokumentationen presenteras här för historisk referens.
Specifikationsdokumentet är tillgängligt som ett Microsoft Word-dokument från Microsoft Download Center på: https://www.microsoft.com/download/details.aspx?id=36389 Att Word-dokumentet har konverterats för presentation här på Microsoft Learn. Under konverteringen har vissa redaktionella ändringar gjorts för att anpassa formateringen för Docs-plattformen. Vissa stavfel och mindre fel har korrigerats.
En variabel representerar en lagringsplats för ett värde och det värdet har en typ. Traditionella programmeringsspråk för procedurer skrivs statiskt. Det vill: körningstypen för en variabel är den som den deklarerades med vid kompileringstillfället. Objektorienterade språk lägger till idén om arv, vilket gör att körningstypen för en variabel kan vara den som den deklarerades med vid kompileringstillfället eller någon typ som härletts från den typen. Som ett dynamiskt skrivet språk har PowerShells variabler inte typer i sig. I själva verket definieras inte variabler. de kommer helt enkelt till när de först tilldelas ett värde. Och även om en variabel kan begränsas (§5.3) för att hålla ett värde av en viss typ, kan typinformation i en tilldelning inte alltid verifieras statiskt.
Vid olika tidpunkter kan en variabel associeras med värden av olika typer antingen genom tilldelning (§7.11) eller användning av ++ och ‑‑ operatorer (§7.1.5, §7.2.6). När värdet som är associerat med en variabel ändras kan värdets typ ändras. Till exempel
$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
All användning av en variabel som inte har skapats resulterar i värdet $null. Om du vill se om en variabel har definierats använder du cmdleten Test-Path.
5.1 Skrivbar plats
En skrivbar plats är ett uttryck som anger en resurs som ett kommando har både läs- och skrivåtkomst till. En skrivbar plats kan vara en variabel (§5), ett matriselement (§9), ett associerat värde i en Hashtable som nås via ett index (§10), en egenskap (§7.1.2), eller lagring som hanteras av en leverantör (§3.1).
5.2 Variabelkategorier
PowerShell definierar följande kategorier av variabler: statiska variabler, instansvariabler, matriselement, Hashtable-nyckel/värde-par, parametrar, vanliga variabler och variabler på providerenheter. De underavsnitt som följer beskriver var och en av dessa kategorier.
I följande exempel
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]är en statisk variabel -
$date.Monthär en instansvariabel -
$values[2]är ett matriselement -
$h1.FirstNameär enHashtablenyckel vars motsvarande värde är $h 1['FirstName']' -
$p1och$p2är parametrar -
$radius,$circumference,$date,$month,$values,$valueoch$h1är vanliga variabler -
$Alias:A,$Env:MyPath,${E:output.txt}och$Function:Fär variabler på motsvarande leverantörsenheter. -
$Variable:vär faktiskt en vanlig variabel skriven med sin fullständigt kvalificerade providerenhet.
5.2.1 Statiska variabler
En datamedlem i ett objekt som tillhör objektets typ i stället för den specifika instansen av typen kallas för en statisk variabel. Se §4.2.3, §4.2.4.1och §4.3.8 för några exempel.
PowerShell ger inget sätt att skapa nya typer som innehåller statiska variabler. Objekt av sådana typer kan dock tillhandahållas av värdmiljön.
Minne för att skapa och ta bort objekt som innehåller statiska variabler hanteras av värdmiljön och skräpinsamlingssystemet.
Se §7.1.2 för information om åtkomst till en statisk variabel.
En statisk datamedlem kan vara ett fält eller en egenskap.
5.2.2 Instansvariabler
En datamedlem i ett objekt som tillhör en viss instans av objektets typ i stället för själva typen kallas för en instansvariabel. Se §4.3.1, §4.3.2och §4.3.3 för några exempel.
En PowerShell-värdmiljö kan vara ett sätt att skapa nya typer som innehåller instansvariabler eller lägga till nya instansvariabler i befintliga typer.
Minne för att skapa och ta bort objekt som innehåller statiska variabler hanteras av värdmiljön och skräpinsamlingssystemet.
Se §7.1.2 för information om åtkomst till en instansvariabel.
En instansdatamedlem kan vara ett fält eller en egenskap.
5.2.3 Matriselement
En array kan skapas via en unär kommaoperator (§7.2.1), underuttryck (§7.1.6), arrayuttryck (§7.1.7), binär kommaoperator (§7.3), intervalloperator (§7.4), eller New-Object cmdlet.
Minne för att skapa och ta bort matriser hanteras av värdmiljön och skräpinsamlingssystemet.
Matriser och matriselement beskrivs i §9.
5.2.4 Hashtabell-nyckel/värdepar
En hashtable skapas via en hashlitral (§2.3.5.6) eller cmdleten New-Object. Ett nytt nyckel/värdepar kan läggas till via [] operatorn (§7.1.4.3).
Minne för att skapa och ta bort Hashtables hanteras av värdmiljön och skräpinsamlingssystemet.
Hashtables diskuteras i §10.
5.2.5 Parametrar
En parameter skapas när dess överordnade kommando anropas och initieras med värdet för argumentet som anges i anropet eller av värdmiljön. En parameter upphör att finnas när dess överordnade kommando avslutas.
Parametrar diskuteras i §8.10.
5.2.6 Vanliga variabler
En vanlig variabel definieras av ett tilldelningsuttryck (§7.11) eller en foreach-statement (§8.4.4). Vissa vanliga variabler är fördefinierade av värdmiljön medan andra är tillfälliga, kommer och går efter behov vid körning.
Livslängden för en vanlig variabel är den del av programkörningen under vilken lagring garanterat är reserverad för den. Den här livslängden börjar vid inträdet i det omfång den är associerad med och avslutas först vid slutet av det omfångets utförande. Om det överordnade omfånget anges rekursivt eller iterativt skapas en ny instans av den lokala variabeln varje gång.
Lagringen som anges av en vanlig variabel frigörs oberoende av variabelns livslängd.
En vanlig variabel kan uttryckligen namnges med en variabel: namnområdesprefix (§5.2.7).
5.2.7 Variabler på leverantörenheter
Begreppet leverantörer och namnområdesenheter introduceras i §3.1, där varje leverantör kan tillhandahålla sina egna namnområdesenheter. Detta gör att resurser på dessa enheter kan nås som om de vore vanliga variabler (§5.2.6). I själva verket lagras en vanlig variabel på filsystemets providerenhet Variabel: (§3.1.5) och kan nås med sitt vanliga namn eller sitt fullständigt kvalificerade namnområdesnamn.
Vissa typer av namnområdesvariabler begränsas implicit (§5.3).
5.3 Begränsade variabler
Som standard kan en variabel ange ett värde av vilken typ som helst. En variabel kan dock vara begränsad att ange värden av en viss typ genom att ange den typen som en typliteral före namnet i en tilldelning eller en parameter. Till exempel
[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) { ... }
Alla variabler som tillhör namnområdet Env:, Alias:eller filsystemets namnområde (§2.3.2, §3.1) är implicit begränsad till typen string. Alla variabler som hör till namnområdet Funktion: (§2.3.2, §3.1) begränsas implicit till typen scriptblock.