Om automatiska variabler
Kort beskrivning
Beskriver variabler som lagrar tillståndsinformation för PowerShell. Dessa variabler skapas och underhålls av PowerShell.
Lång beskrivning
Begreppsmässigt anses dessa variabler vara skrivskyddade. Även om de kan skrivas till, för bakåtkompatibilitet bör de inte skrivas till.
Här är en lista över de automatiska variablerna i PowerShell:
$$
Innehåller den sista token på den sista raden som togs emot av sessionen.
$?
Innehåller körningsstatus för det senaste kommandot. Den innehåller True om det senaste kommandot lyckades och False om det misslyckades.
För cmdletar och avancerade funktioner som körs i flera steg i en pipeline, till exempel i både process
och end
block, kommer anrop this.WriteError()
eller $PSCmdlet.WriteError()
vid någon tidpunkt att anges $?
till Falskt, liksom och this.ThrowTerminatingError()
$PSCmdlet.ThrowTerminatingError()
.
Cmdleten Write-Error
ställer alltid in $?
på Falskt direkt efter att den har körts, men kommer inte att anges $?
till False för en funktion som anropar den:
function Test-WriteError
{
Write-Error "Bad"
$? # $false
}
Test-WriteError
$? # $true
För det senare ändamålet $PSCmdlet.WriteError()
bör användas i stället.
För interna kommandon (körbara filer) $?
anges till Sant när $LASTEXITCODE
är 0 och anges till Falskt när $LASTEXITCODE
är något annat värde.
Anteckning
Tills PowerShell 7, som innehåller en -instruktion inom parenteser (...)
, återställs $?
underuttryckssyntaxen $(...)
eller matrisuttrycket @(...)
alltid till Sant, så det (Write-Error)
visas $?
som Sant.
Detta har ändrats i PowerShell 7, så det $?
återspeglar alltid den faktiska framgången för den senaste kommandokörningen i dessa uttryck.
$^
Innehåller den första token på den sista raden som togs emot av sessionen.
$_
Samma som $PSItem
. Innehåller det aktuella objektet i pipelineobjektet. Du kan använda den här variabeln i kommandon som utför en åtgärd på varje objekt eller på valda objekt i en pipeline.
$args
Innehåller en matris med värden för odeklarerade parametrar som skickas till en funktion, ett skript eller ett skriptblock. När du skapar en funktion kan du deklarera parametrarna med hjälp av nyckelordet param
eller genom att lägga till en kommaavgränsad lista med parametrar inom parentes efter funktionsnamnet.
I en händelseåtgärd innehåller variabeln $Args
objekt som representerar händelseargumenten för händelsen som bearbetas. Den här variabeln fylls endast i i blocket för Action
ett händelseregistreringskommando.
Värdet för den här variabeln finns också i egenskapen SourceArgs för PSEventArgs-objektet som Get-Event
returneras.
$ConsoleFileName
Innehåller sökvägen till konsolfilen (.psc1
) som senast användes i sessionen. Den här variabeln fylls i när du startar PowerShell med parametern PSConsoleFile eller när du använder cmdleten Export-Console
för att exportera snapin-namn till en konsolfil.
När du använder cmdleten Export-Console
utan parametrar uppdateras automatiskt konsolfilen som senast användes i sessionen. Du kan använda den här automatiska variabeln för att avgöra vilken fil som ska uppdateras.
$Error
Innehåller en matris med felobjekt som representerar de senaste felen.
Det senaste felet är det första felobjektet i matrisen $Error[0]
.
Om du vill förhindra att ett fel läggs till i matrisen $Error
använder du den vanliga parametern ErrorAction med värdet Ignorera. Mer information finns i about_CommonParameters.
$Event
Innehåller ett PSEventArgs-objekt som representerar händelsen som bearbetas. Den här variabeln fylls endast i i blocket för Action
ett händelseregistreringskommando, till exempel Register-ObjectEvent
. Värdet för den här variabeln är samma objekt som cmdleten Get-Event
returnerar. Därför kan du använda egenskaperna för variabeln Event
, till exempel $Event.TimeGenerated
, i ett Action
skriptblock.
$EventArgs
Innehåller ett objekt som representerar det första händelseargumentet som härleds från EventArgs för händelsen som bearbetas. Den här variabeln fylls endast i i blocket för Action
ett händelseregistreringskommando.
Värdet för den här variabeln finns också i egenskapen SourceEventArgs för PSEventArgs-objektet som Get-Event
returneras.
$EventSubscriber
Innehåller ett PSEventSubscriber-objekt som representerar händelseprenumeranten för händelsen som bearbetas. Den här variabeln fylls endast i i blocket för Action
ett händelseregistreringskommando. Värdet för den här variabeln är samma objekt som cmdleten Get-EventSubscriber
returnerar.
$ExecutionContext
Innehåller ett EngineIntrinsics-objekt som representerar körningskontexten för PowerShell-värden. Du kan använda den här variabeln för att hitta de körningsobjekt som är tillgängliga för cmdletar.
$false
Innehåller Falskt. Du kan använda den här variabeln för att representera False i kommandon och skript i stället för att använda strängen "false". Strängen kan tolkas som True om den konverteras till en icke-tom sträng eller till ett heltal som inte är noll.
$foreach
Innehåller uppräknaren (inte de resulterande värdena) i en ForEach-loop . Variabeln finns bara när loopen ForEach
körs. Den $ForEach
tas bort när loopen har slutförts.
Uppräknare innehåller egenskaper och metoder som du kan använda för att hämta loopvärden och ändra den aktuella loop-iterationen. Mer information finns i Använda uppräknare.
$HOME
Innehåller den fullständiga sökvägen till användarens hemkatalog. Den här variabeln motsvarar miljövariablerna i "$env:homedrive$env:homepath"
Windows, vanligtvis C:\Users\<UserName>
.
$Host
Innehåller ett objekt som representerar det aktuella värdprogrammet för PowerShell. Du kan använda den här variabeln för att representera den aktuella värden i kommandon eller för att visa eller ändra värdens egenskaper, till exempel $Host.version
eller $Host.CurrentCulture
, eller $host.ui.rawui.setbackgroundcolor("Red")
.
$input
Innehåller en uppräkning som räknar upp alla indata som skickas till en funktion. Variabeln $input
är endast tillgänglig för funktioner och skriptblock (som är namnlösa funktioner).
I en funktion utan ett
Begin
,Process
ellerEnd
-block räknar variabeln$input
upp samlingen med alla indata till funktionen.I blocket
Begin
innehåller variabeln$input
inga data.Process
I blocket innehåller variabeln$input
objektet som för närvarande finns i pipelinen.End
I blocket räknar variabeln$input
upp samlingen med alla indata till funktionen.Anteckning
Du kan inte använda variabeln
$input
i både processblocket och slutblocket i samma funktion eller skriptblock.
Eftersom $input
är en uppräknare blir $input
det inte längre tillgängligt att komma åt någon av dess egenskaper. Du kan lagra $input
i en annan variabel för att återanvända $input
egenskaperna.
Uppräknare innehåller egenskaper och metoder som du kan använda för att hämta loopvärden och ändra den aktuella loop-iterationen. Mer information finns i Använda uppräknare.
$IsCoreCLR
Innehåller $True
om den aktuella sessionen körs på .NET Core Runtime (CoreCLR). Annars innehåller $False
.
$IsLinux
Innehåller $True
om den aktuella sessionen körs på ett Linux-operativsystem.
Annars innehåller $False
.
$IsMacOS
Innehåller $True
om den aktuella sessionen körs på ett MacOS-operativsystem.
Annars innehåller $False
.
$IsWindows
Innehåller $TRUE
om den aktuella sessionen körs på ett Windows-operativsystem. Annars innehåller $FALSE
.
$LastExitCode
Innehåller slutkoden för det senaste Windows-baserade programmet som kördes.
$Matches
Variabeln Matches
fungerar med operatorerna -match
och -notmatch
.
När du skickar skalära indata till operatorn -match
eller -notmatch
och antingen identifierar en matchning returnerar de ett booleskt värde och fyller i den $Matches
automatiska variabeln med en hash-tabell med alla strängvärden som matchades. Hash-tabellen $Matches
kan också fyllas i med avbildningar när du använder reguljära uttryck med operatorn -match
.
Mer information om operatorn finns i -match
about_Comparison_Operators. Mer information om reguljära uttryck finns i about_Regular_Expressions.
$MyInvocation
Innehåller information om det aktuella kommandot, till exempel namn, parametrar, parametervärden och information om hur kommandot startades, anropades eller anropades, till exempel namnet på skriptet som anropade det aktuella kommandot.
$MyInvocation
fylls endast i för skript, funktioner och skriptblock. Du kan använda informationen i objektet System.Management.Automation.InvocationInfo som returneras i det $MyInvocation
aktuella skriptet, till exempel sökvägen och filnamnet för skriptet ($MyInvocation.MyCommand.Path
) eller namnet på en funktion ($MyInvocation.MyCommand.Name
) för att identifiera det aktuella kommandot. Detta är särskilt användbart för att hitta namnet på det aktuella skriptet.
Från och med PowerShell 3.0 MyInvocation
har följande nya egenskaper.
Egenskap | Beskrivning |
---|---|
PSScriptRoot | Innehåller den fullständiga sökvägen till skriptet som anropades |
det aktuella kommandot. Värdet för den här egenskapen är | |
fylls endast i när anroparen är ett skript. | |
PSCommandPath | Innehåller den fullständiga sökvägen och filnamnet för skriptet |
som anropade det aktuella kommandot. Värdet för detta | |
egenskapen fylls endast i när anroparen är en | |
Skript. |
Till skillnad från variablerna $PSScriptRoot
och $PSCommandPath
de automatiska variablerna innehåller egenskaperna PSScriptRoot och PSCommandPath för den $MyInvocation
automatiska variabeln information om anroparen eller anropar skriptet, inte det aktuella skriptet.
$NestedPromptLevel
Innehåller den aktuella promptnivån. Värdet 0 anger den ursprungliga promptnivån. Värdet ökas när du anger en kapslad nivå och minskar när du avslutar den.
PowerShell visar till exempel en kapslad kommandotolk när du använder $Host.EnterNestedPrompt
metoden. PowerShell visar också en kapslad kommandotolk när du når en brytpunkt i PowerShell-felsökningsprogrammet.
När du anger en kapslad fråga pausar PowerShell det aktuella kommandot, sparar körningskontexten och ökar värdet för variabeln $NestedPromptLevel
. Om du vill skapa ytterligare kapslade kommandotolk (upp till 128 nivåer) eller återgå till den ursprungliga kommandotolken slutför du kommandot eller skriver exit
.
Variabeln $NestedPromptLevel
hjälper dig att spåra promptnivån. Du kan skapa en alternativ PowerShell-kommandotolk som innehåller det här värdet så att det alltid visas.
$null
$null
är en automatisk variabel som innehåller ett null - eller tomt värde. Du kan använda den här variabeln för att representera ett frånvarande eller odefinierat värde i kommandon och skript.
PowerShell behandlar $null
som ett objekt med ett värde, dvs. som en explicit platshållare, så att du kan använda $null
för att representera ett tomt värde i en serie med värden.
När $null
det till exempel ingår i en samling räknas det som ett av objekten.
$a = "one", $null, "three"
$a.count
3
Om du skickar variabeln $null
till cmdleten ForEach-Object
genererar den ett värde för $null
, precis som för de andra objekten
"one", $null, "three" | ForEach-Object { "Hello " + $_}
Hello one
Hello
Hello three
Därför kan du inte använda $null
för att ange något parametervärde. Ett parametervärde $null
för åsidosätter standardparametervärdet.
Men eftersom PowerShell behandlar variabeln $null
som platshållare kan du använda den i skript som följande, vilket inte skulle fungera om $null
den ignorerades.
$calendar = @($null, $null, "Meeting", $null, $null, "Team Lunch", $null)
$days = "Sunday","Monday","Tuesday","Wednesday","Thursday",
"Friday","Saturday"
$currentDay = 0
foreach($day in $calendar)
{
if($day -ne $null)
{
"Appointment on $($days[$currentDay]): $day"
}
$currentDay++
}
Appointment on Tuesday: Meeting
Appointment on Friday: Team lunch
$PID
Innehåller processidentifieraren (PID) för den process som är värd för den aktuella PowerShell-sessionen.
$PROFILE
Innehåller den fullständiga sökvägen för PowerShell-profilen för den aktuella användaren och det aktuella värdprogrammet. Du kan använda den här variabeln för att representera profilen i kommandon. Du kan till exempel använda den i ett kommando för att avgöra om en profil har skapats:
Test-Path $PROFILE
Eller så kan du använda det i ett kommando för att skapa en profil:
New-Item -ItemType file -Path $PROFILE -Force
Du kan använda den i ett kommando för att öppna profilen i notepad.exe:
notepad.exe $PROFILE
$PSBoundParameters
Innehåller en ordlista över de parametrar som skickas till ett skript eller en funktion och deras aktuella värden. Den här variabeln har endast ett värde i ett omfång där parametrar deklareras, till exempel ett skript eller en funktion. Du kan använda den för att visa eller ändra aktuella värden för parametrar eller för att skicka parametervärden till ett annat skript eller en annan funktion.
I det här exemplet skickar $PSBoundParameters
funktionen Test2 till funktionen Test1. $PSBoundParameters
Visas i formatet Nyckel och Värde.
function Test1 {
param($a, $b)
# Display the parameters in dictionary format.
$PSBoundParameters
}
function Test2 {
param($a, $b)
# Run the Test1 function with $a and $b.
Test1 @PSBoundParameters
}
Test2 -a Power -b Shell
Key Value
--- -----
a Power
b Shell
$PSCmdlet
Innehåller ett objekt som representerar cmdleten eller den avancerade funktion som körs.
Du kan använda egenskaperna och metoderna för objektet i cmdleten eller funktionskoden för att svara på användningsvillkoren. Egenskapen ParameterSetName innehåller till exempel namnet på parameteruppsättningen som används, och metoden ShouldProcess lägger till parametrarna WhatIf och Confirm i cmdleten dynamiskt.
Mer information om den $PSCmdlet
automatiska variabeln finns i about_Functions_CmdletBindingAttribute och about_Functions_Advanced.
$PSCommandPath
Innehåller den fullständiga sökvägen och filnamnet för skriptet som körs. Den här variabeln är giltig i alla skript.
$PSCulture
Innehåller namnet på den kultur som för närvarande används i operativsystemet. Kulturen avgör visningsformatet för objekt som tal, valuta och datum och lagras i ett System.Globalization.CultureInfo-objekt . Använd Get-Culture
för att visa datorns kultur. $PSCulture
innehåller namnegenskapens värde.
$PSDebugContext
Under felsökningen innehåller den här variabeln information om felsökningsmiljön. Annars innehåller den ett null-värde . Därför kan du använda den för att ange om felsökaren har kontroll. När det är ifyllt innehåller det ett PsDebugContext-objekt som har egenskaper för Brytpunkter och InvocationInfo . Egenskapen InvocationInfo har flera användbara egenskaper, inklusive egenskapen Plats . Egenskapen Location anger sökvägen till skriptet som debugged.
$PSHOME
Innehåller den fullständiga sökvägen till installationskatalogen för PowerShell, vanligtvis $env:windir\System32\PowerShell\v1.0
i Windows-system. Du kan använda den här variabeln i sökvägarna för PowerShell-filer. Följande kommando söker till exempel i de konceptuella hjälpavsnitten efter ordvariabeln:
Select-String -Pattern Variable -Path $pshome\*.txt
$PSItem
Samma som $_
. Innehåller det aktuella objektet i pipelineobjektet. Du kan använda den här variabeln i kommandon som utför en åtgärd på varje objekt eller på valda objekt i en pipeline.
$PSScriptRoot
Innehåller katalogen som ett skript körs från.
I PowerShell 2.0 är den här variabeln endast giltig i skriptmoduler (.psm1
).
Från och med PowerShell 3.0 är det giltigt i alla skript.
$PSSenderInfo
Innehåller information om användaren som startade PSSession, inklusive användaridentiteten och tidszonen för den ursprungliga datorn. Den här variabeln är endast tillgänglig i PSSessions.
Variabeln $PSSenderInfo
innehåller en användarkonfigurerbar egenskap, ApplicationArguments, som som standard endast $PSVersionTable
innehåller från den ursprungliga sessionen. Om du vill lägga till data i egenskapen ApplicationArguments använder du parametern ApplicationArguments för cmdleten New-PSSessionOption
.
$PSUICulture
Innehåller namnet på användargränssnittskulturen (UI) som för närvarande används i operativsystemet. Användargränssnittskulturen avgör vilka textsträngar som används för användargränssnittselement, till exempel menyer och meddelanden. Det här är värdet för System.Globalization.CultureInfo.CurrentUICulture.Name-egenskapen för systemet. Om du vill hämta systemobjektet System.Globalization.CultureInfo använder du cmdleten Get-UICulture
.
$PSVersionTable
Innehåller en skrivskyddad hash-tabell som visar information om den version av PowerShell som körs i den aktuella sessionen. Tabellen innehåller följande objekt:
Egenskap | Beskrivning |
---|---|
PSVersion | PowerShell-versionsnumret |
PSEdition | Den här egenskapen har värdet "Desktop" för |
PowerShell 4 och nedan samt PowerShell | |
5.1 på fullständiga Windows-versioner. | |
Den här egenskapen har värdet "Core" för | |
PowerShell 6 och senare samt PowerShell | |
PowerShell 5.1 på begränsade utgåvor | |
som Windows Nano Server eller Windows IoT. | |
GitCommitId | Inchecknings-ID för källfilerna, i GitHub, |
Operativsystem | Beskrivning av det operativsystem som |
PowerShell körs på. | |
Plattform | Plattform som operativsystemet körs på |
På. Värdet i Linux och macOS är Unix. | |
Se $IsMacOs och $IsLinux . |
|
PSCompatibleVersions | Versioner av PowerShell som är kompatibla |
med den aktuella versionen | |
PSRemotingProtocolVersion | Versionen av PowerShell-fjärranslutningen |
hanteringsprotokoll. | |
SerializationVersion | Serialiseringsmetodens version |
WSManStackVersion | Versionsnumret för WS-Management-stacken |
$PWD
Innehåller ett sökvägsobjekt som representerar den aktuella katalogens fullständiga sökväg.
$Sender
Innehåller objektet som genererade händelsen. Den här variabeln fylls endast i i åtgärdsblocket för ett händelseregistreringskommando. Värdet för den här variabeln finns också i egenskapen Sender för PSEventArgs-objektet som Get-Event
returneras.
$ShellId
Innehåller identifieraren för det aktuella gränssnittet.
$StackTrace
Innehåller en stackspårning för det senaste felet.
$switch
Innehåller uppräknaren, inte de resulterande värdena för en Switch
-instruktion. Variabeln finns bara när -instruktionen Switch
körs. Den $switch
tas bort när instruktionen slutför körningenswitch
. Mer information finns i about_Switch.
Uppräknare innehåller egenskaper och metoder som du kan använda för att hämta loopvärden och ändra den aktuella loopiterationen. Mer information finns i Använda uppräknare.
$this
I ett skriptblock som definierar en skriptegenskap eller skriptmetod refererar variabeln $this
till det objekt som utökas.
I en anpassad klass refererar variabeln $this
till själva klassobjektet som ger åtkomst till egenskaper och metoder som definierats i klassen.
$true
Innehåller True. Du kan använda den här variabeln för att representera True i kommandon och skript.
Använda uppräknare
Variablerna $input
, $foreach
och $switch
är alla uppräknare som används för att iterera genom de värden som bearbetas av deras innehållande kodblock.
En uppräknare innehåller egenskaper och metoder som du kan använda för att avancera eller återställa iteration eller hämta iterationsvärden. Direkt manipulering av uppräknare anses inte vara bästa praxis.
Inom loopar bryts nyckelorden för flödeskontroll och fortsätter bör föredras.
I funktioner som accepterar pipelineindata är det bästa praxis att använda parametrar med attributen ValueFromPipeline eller ValueFromPipelineByPropertyName .
Mer information finns i about_Functions_Advanced_Parameters.
FlyttaNästa
Metoden MoveNext flyttar uppräknaren till nästa element i samlingen. MoveNext returnerar True om uppräknaren har avancerats, False om uppräknaren har passerat slutet av samlingen.
Anteckning
Det booleska värdet som returnerades min MoveNext skickas till utdataströmmen.
Du kan ignorera utdata genom att typecasting den till [void]
eller piping den till Out-Null.
$input.MoveNext() | Out-Null
[void]$input.MoveNext()
Återställ
Metoden Reset anger uppräknaren till sin ursprungliga position, som är före det första elementet i samlingen.
Aktuellt
Egenskapen Current hämtar elementet i samlingen, eller pipelinen, på den aktuella positionen för uppräknaren.
Egenskapen Current fortsätter att returnera samma egenskap tills MoveNext anropas.
Exempel
Exempel 1: Använda variabeln $input
I följande exempel rensar åtkomsten till variabeln $input
variabeln till nästa gång processblocket körs. Med hjälp av metoden Reset återställs variabeln $input
till det aktuella pipelinevärdet.
function Test
{
begin
{
$i = 0
}
process
{
"Iteration: $i"
$i++
"`tInput: $input"
"`tAccess Again: $input"
$input.Reset()
"`tAfter Reset: $input"
}
}
"one","two" | Test
Iteration: 0
Input: one
Access Again:
After Reset: one
Iteration: 1
Input: two
Access Again:
After Reset: two
Processblocket flyttar automatiskt fram variabeln $input
även om du inte har åtkomst till den.
$skip = $true
function Skip
{
begin
{
$i = 0
}
process
{
"Iteration: $i"
$i++
if ($skip)
{
"`tSkipping"
$skip = $false
}
else
{
"`tInput: $input"
}
}
}
"one","two" | Skip
Iteration: 0
Skipping
Iteration: 1
Input: two
Exempel 2: Använda $input utanför processblocket
Utanför processblocket representerar variabeln $input
alla värden som skickas till funktionen.
- Åtkomst till variabeln
$input
rensar alla värden. - Återställningsmetoden återställer hela samlingen.
- Egenskapen Aktuell fylls aldrig i.
- Metoden MoveNext returnerar false eftersom samlingen inte kan avanceras.
- Om du anropar MoveNext rensas variabeln
$input
.
- Om du anropar MoveNext rensas variabeln
Function All
{
"All Values: $input"
"Access Again: $input"
$input.Reset()
"After Reset: $input"
$input.MoveNext() | Out-Null
"After MoveNext: $input"
}
"one","two","three" | All
All Values: one two three
Access Again:
After Reset: one two three
After MoveNext:
Exempel 3: Använda $input. Aktuell egenskap
Med hjälp av egenskapen Aktuell kan det aktuella pipelinevärdet nås flera gånger utan att använda metoden Återställ . Processblocket anropar inte metoden MoveNext automatiskt.
Egenskapen Current fylls aldrig i om du inte uttryckligen anropar MoveNext. Egenskapen Aktuell kan nås flera gånger i processblocket utan att rensa dess värde.
function Current
{
begin
{
$i = 0
}
process
{
"Iteration: $i"
$i++
"`tBefore MoveNext: $($input.Current)"
$input.MoveNext() | Out-Null
"`tAfter MoveNext: $($input.Current)"
"`tAccess Again: $($input.Current)"
}
}
"one","two" | Current
Iteration: 0
Before MoveNext:
After MoveNext: one
Access Again: one
Iteration: 1
Before MoveNext:
After MoveNext: two
Access Again: two
Exempel 4: Använda variabeln $foreach
Till skillnad från variabeln $input
representerar variabeln $foreach
alltid alla objekt i samlingen när de används direkt. Använd egenskapen Aktuell för att komma åt det aktuella samlingselementet och metoderna Reset och MoveNext för att ändra dess värde.
Anteckning
Varje iteration av loopen foreach
anropar automatiskt metoden MoveNext .
Följande loop körs bara två gånger. I den andra iterationen flyttas samlingen till det tredje elementet innan iterationen är klar. Efter den andra iterationen finns det nu inga fler värden att iterera och loopen avslutas.
Egenskapen MoveNext påverkar inte variabeln som valts för att iterera genom samlingen ($Num
).
$i = 0
foreach ($num in ("one","two","three"))
{
"Iteration: $i"
$i++
"`tNum: $num"
"`tCurrent: $($foreach.Current)"
if ($foreach.Current -eq "two")
{
"Before MoveNext (Current): $($foreach.Current)"
$foreach.MoveNext() | Out-Null
"After MoveNext (Current): $($foreach.Current)"
"Num has not changed: $num"
}
}
Iteration: 0
Num: one
Current: one
Iteration: 1
Num: two
Current: two
Before MoveNext (Current): two
After MoveNext (Current): three
Num has not changed: two
Med hjälp av metoden Återställ återställs det aktuella elementet i samlingen. I följande exempel loopas de två första elementen två gånger eftersom metoden Återställ anropas. Efter de två första looparna misslyckas -instruktionen if
och loopen itererar igenom alla tre elementen normalt.
Viktigt
Detta kan resultera i en oändlig loop.
$stopLoop = 0
foreach ($num in ("one","two", "three"))
{
("`t" * $stopLoop) + "Current: $($foreach.Current)"
if ($num -eq "two" -and $stopLoop -lt 2)
{
$foreach.Reset() | Out-Null
("`t" * $stopLoop) + "Reset Loop: $stopLoop"
$stopLoop++
}
}
Current: one
Current: two
Reset Loop: 0
Current: one
Current: two
Reset Loop: 1
Current: one
Current: two
Current: three
Exempel 5: Använda variabeln $switch
Variabeln $switch
har exakt samma regler som variabeln $foreach
.
I följande exempel visas alla uppräkningsbegrepp.
Anteckning
Observera hur det NotEvaluated-fallet aldrig körs, även om det inte finns någon break
instruktion efter metoden MoveNext .
$values = "Start", "MoveNext", "NotEvaluated", "Reset", "End"
$stopInfinite = $false
switch ($values)
{
"MoveNext" {
"`tMoveNext"
$switch.MoveNext() | Out-Null
"`tAfter MoveNext: $($switch.Current)"
}
# This case is never evaluated.
"NotEvaluated" {
"`tAfterMoveNext: $($switch.Current)"
}
"Reset" {
if (!$stopInfinite)
{
"`tReset"
$switch.Reset()
$stopInfinite = $true
}
}
default {
"Default (Current): $($switch.Current)"
}
}
Default (Current): Start
MoveNext
After MoveNext: NotEvaluated
Reset
Default (Current): Start
MoveNext
After MoveNext: NotEvaluated
Default (Current): End
Se även
about_Functions_Advanced_Methods
about_Functions_Advanced_Parameters
about_Functions_OutputTypeAttribute