Om variabler

Kort beskrivning

Beskriver hur variabler lagrar värden som kan användas i PowerShell.

Lång beskrivning

Du kan lagra alla typer av värden i PowerShell-variabler. Lagra till exempel resultatet av kommandon och lagra element som används i kommandon och uttryck, till exempel namn, sökvägar, inställningar och värden.

En variabel är en minnesenhet där värden lagras. I PowerShell representeras variabler av textsträngar som börjar med ett dollartecken ($), till exempel $a, $processeller $my_var.

Variabelnamn är inte skiftlägeskänsliga och kan innehålla blanksteg och specialtecken. Men variabelnamn som innehåller specialtecken och blanksteg är svåra att använda och bör undvikas. Mer information finns i Variabelnamn som innehåller specialtecken.

Det finns flera olika typer av variabler i PowerShell.

  • Användarskapade variabler: Användarskapade variabler skapas och underhålls av användaren. Som standard finns de variabler som du skapar på PowerShell-kommandoraden bara när PowerShell-fönstret är öppet. När PowerShell-fönstren stängs tas variablerna bort. Om du vill spara en variabel lägger du till den i PowerShell-profilen. Du kan också skapa variabler i skript med globalt, skript eller lokalt omfång.

  • Automatiska variabler: Automatiska variabler lagrar tillståndet för PowerShell. Dessa variabler skapas av PowerShell och PowerShell ändrar sina värden efter behov för att upprätthålla deras noggrannhet. Användarna kan inte ändra värdet för dessa variabler. Variabeln $PSHOME lagrar till exempel sökvägen till PowerShell-installationskatalogen.

    Mer information, en lista och en beskrivning av de automatiska variablerna finns i about_Automatic_Variables.

  • Inställningsvariabler: Inställningsvariabler lagrar användarinställningar för PowerShell. Dessa variabler skapas av PowerShell och fylls i med standardvärden. Användare kan ändra värdena för dessa variabler. Variabeln $MaximumHistoryCount avgör till exempel det maximala antalet poster i sessionshistoriken.

    Mer information, en lista och en beskrivning av inställningsvariablerna finns i about_Preference_Variables.

Arbeta med variabler

Om du vill skapa en ny variabel använder du en tilldelningsuttryck för att tilldela variabeln ett värde. Du behöver inte deklarera variabeln innan du använder den. Standardvärdet för alla variabler är $null.

Om du vill hämta en lista över alla variabler i PowerShell-sessionen skriver du Get-Variable. Variabelnamnen visas utan föregående dollartecken ($) som används för att referera till variabler.

Exempel:

$MyVariable = 1, 2, 3

$Path = "C:\Windows\System32"

Variabler är användbara för att lagra resultatet av kommandon.

Exempel:

$Processes = Get-Process

$Today = (Get-Date).DateTime

Om du vill visa värdet för en variabel skriver du variabelnamnet före ett dollartecken ($).

Exempel:

$MyVariable
1
2
3
$Today
Tuesday, September 3, 2019 09:46:46

Om du vill ändra värdet för en variabel tilldelar du ett nytt värde till variabeln.

Följande exempel visar värdet för variabeln $MyVariable , ändrar värdet för variabeln och visar sedan det nya värdet.

$MyVariable = 1, 2, 3
$MyVariable
1
2
3
$MyVariable = "The green cat."
$MyVariable
The green cat.

Om du vill ta bort värdet för en variabel använder du cmdleten Clear-Variable eller ändrar värdet till $null.

Clear-Variable -Name MyVariable
$MyVariable = $null

Om du vill ta bort variabeln använder du Remove-Variable eller Remove-Item.

Remove-Variable -Name MyVariable
Remove-Item -Path Variable:\MyVariable

Typer av variabler

Du kan lagra alla typer av objekt i en variabel, inklusive heltal, strängar, matriser och hash-tabeller. Och objekt som representerar processer, tjänster, händelseloggar och datorer.

PowerShell-variabler skrivs löst, vilket innebär att de inte är begränsade till en viss typ av objekt. En enskild variabel kan till och med innehålla en samling, eller matris, av olika typer av objekt samtidigt.

Datatypen för en variabel bestäms av .NET-typerna för variabelns värden. Om du vill visa en variabels objekttyp använder du Get-Member.

Exempel:

$a = 12                         # System.Int32
$a = "Word"                     # System.String
$a = 12, "Word"                 # array of System.Int32, System.String
$a = Get-ChildItem C:\Windows   # FileInfo and DirectoryInfo types

Du kan använda ett typattribut och gjuten notation för att säkerställa att en variabel endast kan innehålla specifika objekttyper eller objekt som kan konverteras till den typen. Om du försöker tilldela ett värde av en annan typ försöker PowerShell konvertera värdet till dess typ. Om typen inte kan konverteras misslyckas tilldelningssatsen.

Om du vill använda gjuten notation anger du ett typnamn, omgivet av hakparenteser, före variabelnamnet (till vänster i tilldelningsinstruktionen). I följande exempel skapas en $number variabel som bara kan innehålla heltal, en $words variabel som bara kan innehålla strängar och en $dates variabel som bara kan innehålla DateTime-objekt .

[int]$number = 8
$number = "12345"  # The string is converted to an integer.
$number = "Hello"
Cannot convert value "Hello" to type "System.Int32". Error: "Input string was
 not in a correct format."
At line:1 char:1
+ $number = "Hello"
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo          : MetadataError: (:) [],
    ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
[string]$words = "Hello"
$words = 2       # The integer is converted to a string.
$words += 10     # The plus (+) sign concatenates the strings.
$words
210
[datetime] $dates = "09/12/91"  # The string is converted to a DateTime object.
$dates
Thursday, September 12, 1991 00:00:00
$dates = 10    # The integer is converted to a DateTime object.
$dates
Monday, January 1, 0001 00:00:00

Använda variabler i kommandon och uttryck

Om du vill använda en variabel i ett kommando eller uttryck skriver du variabelnamnet före dollartecknet ($).

Om variabelnamnet och dollartecknet inte omges av citattecken eller om de omges av dubbla citattecken (") används värdet för variabeln i kommandot eller uttrycket.

Om variabelnamnet och dollartecknet omges av enkla citattecken (') används variabelnamnet i uttrycket.

Mer information om hur du använder citattecken i PowerShell finns i about_Quoting_Rules.

Det här exemplet hämtar värdet för variabeln $PROFILE , vilket är sökvägen till PowerShell-användarprofilfilen i PowerShell-konsolen.

$PROFILE
C:\Users\User01\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

I det här exemplet visas två kommandon som kan öppna PowerShell-profilen i notepad.exe. I exemplet med dubbla citattecken (") används variabelns värde.

notepad $PROFILE

notepad "$PROFILE"

I följande exempel används enkla citattecken (') som behandlar variabeln som literaltext.

'$PROFILE'
$PROFILE
'Use the $PROFILE variable.'
Use the $PROFILE variable.

Variabelnamn som innehåller specialtecken

Variabelnamn börjar med ett dollartecken ($) och kan innehålla alfanumeriska tecken och specialtecken. Variabelnamnets längd begränsas endast av tillgängligt minne.

Bästa praxis är att variabelnamn endast innehåller alfanumeriska tecken och understreck (_) tecken. Variabelnamn som innehåller blanksteg och andra specialtecken är svåra att använda och bör undvikas.

Alfanumeriska variabelnamn kan innehålla följande tecken:

  • Unicode-tecken från dessa kategorier: Lu, Ll, Lt, Lm, Lo eller Nd.
  • Understreck (_) tecken.
  • Frågetecken (?) tecken.

Följande lista innehåller Kategoribeskrivningar för Unicode. Mer information finns i UnicodeCategory.

  • Lu - UppercaseLetter
  • Ll – LowercaseLetter
  • Lt – TitlecaseLetter
  • Lm – ModifierLetter
  • Lo - OtherLetter
  • Nd – DecimalDigitNumber

Om du vill skapa eller visa ett variabelnamn som innehåller blanksteg eller specialtecken omger du variabelnamnet med klammerparenteserna ({}) tecken. Klammerparenteserna dirigerar PowerShell till att tolka variabelnamnets tecken som literaler.

Specialteckenvariabelnamn kan innehålla följande tecken:

  • Alla Unicode-tecken med följande undantag:
    • Det avslutande klammerparentestecknet (}) (U+007D).
    • Backtick-tecknet (`) (U+0060). Backticken används för att undkomma Unicode-tecken så att de behandlas som literaler.

PowerShell har reserverade variabler som $$, $?, $^och $_ som innehåller alfanumeriska och specialtecken. Mer information finns i about_Automatic_Variables.

Följande kommando skapar till exempel variabeln med namnet save-items. Klammerparenteserna ({}) behövs eftersom variabelnamnet innehåller ett bindestreck (-) specialtecken.

${save-items} = "a", "b", "c"
${save-items}
a
b
c

Följande kommando hämtar underordnade objekt i katalogen som representeras av ProgramFiles(x86) miljövariabeln.

Get-ChildItem ${env:ProgramFiles(x86)}

Om du vill referera till ett variabelnamn som innehåller klammerparenteser bifogar du variabelnamnet i klammerparenteser och använder backtick-tecknet för att undvika klammerparenteserna. Om du till exempel vill skapa en variabel med namnet this{value}is typ:

${this`{value`}is} = "This variable name uses braces and backticks."
${this`{value`}is}
This variable name uses braces and backticks.

Variabler och omfång

Som standard är variabler endast tillgängliga i omfånget där de skapas.

Till exempel är en variabel som du skapar i en funktion endast tillgänglig i funktionen. En variabel som du skapar i ett skript är endast tillgänglig i skriptet. Om du prickar skriptet läggs variabeln till i det aktuella omfånget. Mer information finns i about_Scopes.

Du kan använda en omfångsmodifierare för att ändra variabelns standardomfång. Följande uttryck skapar en variabel med namnet Computers. Variabeln har ett globalt omfång, även när den skapas i ett skript eller en funktion.

$Global:Computers = "Server01"

Spara variabler

Variabler som du skapar är endast tillgängliga i den session där du skapar dem. De går förlorade när du stänger sessionen.

Om du vill skapa variabeln i varje PowerShell-session som du startar lägger du till variabeln i din PowerShell-profil.

Om du till exempel vill ändra värdet för variabeln $VerbosePreference i varje PowerShell-session lägger du till följande kommando i din PowerShell-profil.

$VerbosePreference = "Continue"

Du kan lägga till det här kommandot i PowerShell-profilen genom att öppna $PROFILE filen i en textredigerare, till exempel notepad.exe. Mer information om PowerShell-profiler finns i about_Profiles.

Variabeln: enhet

PowerShell-variabelprovidern skapar en Variable: enhet som ser ut och fungerar som en filsystemenhet, men den innehåller variablerna i sessionen och deras värden.

Om du vill ändra till Variable: enheten använder du följande kommando:

Set-Location Variable:

Om du vill visa en lista över objekt och variabler på Variable: enheten använder du Get-Item cmdletarna eller Get-ChildItem .

Get-ChildItem Variable:

Om du vill hämta värdet för en viss variabel använder du filsystemnotation för att ange namnet på enheten och namnet på variabeln. Om du till exempel vill hämta den $PSCulture automatiska variabeln använder du följande kommando.

Get-Item Variable:\PSCulture
Name                           Value
----                           -----
PSCulture                      en-US

Om du vill visa mer information om Variable: enheten och PowerShell-variabelprovidern skriver du:

Get-Help Variable

Variabel syntax med providersökvägar

Du kan prefixa en providersökväg med dollartecknet ($) och komma åt innehållet i alla leverantörer som implementerar gränssnittet IContentCmdletProvider .

Följande inbyggda PowerShell-leverantörer stöder den här notationen:

Variabel-cmdletar

PowerShell innehåller en uppsättning cmdletar som är utformade för att hantera variabler.

Om du vill visa en lista över cmdletar skriver du:

Get-Command -Noun Variable

Om du vill få hjälp med en specifik cmdlet skriver du:

Get-Help <cmdlet-name>
Cmdlet-namn Description
Clear-Variable Tar bort värdet för en variabel.
Get-Variable Hämtar variablerna i den aktuella konsolen.
New-Variable Skapar en ny variabel.
Remove-Variable Tar bort en variabel och dess värde.
Set-Variable Ändrar värdet för en variabel.

Se även

about_Automatic_Variables

about_Environment_Variables

about_Preference_Variables

about_Profiles

about_Quoting_Rules

about_Scopes