about_Automatic_Variables

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 ska de inte skrivas till för bakåtkompatibilitet.

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 cmdlet:ar och avancerade funktioner som körs i flera steg i en pipeline, till exempel i både - och -block, kommer anrop eller vid någon punkt att anges till Falskt , som kommer och process end this.WriteError() $PSCmdlet.WriteError() $? this.ThrowTerminatingError() $PSCmdlet.ThrowTerminatingError() .

Cmdleten ställer alltid in på False omedelbart efter att den har körts, men har inte angetts till Write-Error False för en funktion som $? $? anropar den:

function Test-WriteError
{
    Write-Error "Bad"
    $? # $false
}

Test-WriteError
$? # $true

För det senare syftet $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 inställt på Falskt när är ett $LASTEXITCODE annat värde.

Anteckning

Tills PowerShell 7, som innehåller en -instruktion inom parenteser, återställs alltid underuttryckssyntaxen eller matrisuttrycket till Sant , så att (...) $(...) visas som @(...) $? (Write-Error) $? 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 pipeline-objektet. 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 eller genom att lägga till en kommaavgränsad lista med parametrar inom parentes efter param funktionsnamnet.

I en händelseåtgärd innehåller $args variabeln objekt som representerar händelseargumenten för den händelse som bearbetas. Den här variabeln fylls bara i inom Action blocket för 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 för att exportera Export-Console snapin-namn till en konsolfil.

När du använder Export-Console cmdleten utan parametrar uppdateras automatiskt den konsolfil 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 använder du den $Error vanliga errorAction-parametern med värdet Ignorera. Mer information finns i about_CommonParameters.

$ErrorView

Innehåller det värde som styr i vilken vy fel visas. Variabeln $ErrorView accepterar strängar eller ErrorView-objekt och har standardvärdet ConciseView . Om en annan sträng än ett godkänt värde definieras uppstår ett fel.

Godkända värden:

  • CategoryView – Visar endast felkategoriinformationen.
  • ConciseView – Visar endast felmeddelandet. Om felet är ett parserfel eller kommer från ett skript inkluderas en plats pekare. Den här vyn har lagts till i PowerShell 7.0
  • NormalView – Tillhandahåller en standardvy för PowerShell-fel som innehåller felmeddelande, plats, kategoriinformation med mera.

$Event

Innehåller ett PSEventArgs-objekt som representerar den händelse som bearbetas. Den här variabeln fylls bara i i Action blocket för ett händelseregistreringskommando, till exempel Register-ObjectEvent . Värdet för den här variabeln är samma objekt som Get-Event cmdleten returnerar. Därför kan du använda egenskaperna för Event variabeln, 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 den händelse som bearbetas. Den här variabeln fylls bara i inom Action blocket för 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 den händelse som bearbetas. Den här variabeln fylls bara i inom Action blocket för ett händelseregistreringskommando. Värdet för den här variabeln är samma objekt som Get-EventSubscriber cmdleten 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 cmdlets.

$false

Innehåller False. Du kan använda den här variabeln för att representera Falskt 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äkningsatorn (inte de resulterande värdena) för en ForEach-loop. Variabeln $ForEach finns bara när ForEach loopen körs. Den tas bort när loopen har slutförts.

Uppräkningar innehåller egenskaper och metoder som du kan använda för att hämta loopvärden och ändra den aktuella iterationen av loopen. Mer information finns i Använda uppräkningar.

$HOME

Innehåller den fullständiga sökvägen till användarens arbetskatalog. Den här variabeln motsvarar de "$env:homedrive$env:homepath" Windows miljövariablerna, 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 egenskaperna för värden, till $Host.version exempel $Host.CurrentCulture eller 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 Begin ett Process - eller End -block räknar $input variabeln upp samlingen med alla indata till funktionen.

  • I Begin -blocket innehåller $input variabeln inga data.

  • I Process -blocket innehåller $input variabeln objektet som för närvarande finns i pipelinen.

  • I End -blocket $input räknar variabeln upp samlingen med alla indata till funktionen.

    Anteckning

    Du kan inte använda $input variabeln i både Process-blocket och End-blocket i samma funktion eller skriptblock.

Eftersom $input är en uppräkning kommer åtkomst till någon av dess egenskaper att $input inte längre vara tillgänglig. Du kan lagra i $input en annan variabel för att återanvända $input egenskaperna.

Uppräkningar innehåller egenskaper och metoder som du kan använda för att hämta loopvärden och ändra den aktuella iterationen av loopen. Mer information finns i Använda uppräkningar.

Variabeln $input är också tillgänglig för kommandot som anges av -Command parametern för när den pwsh anropas från kommandoraden. Följande exempel körs från Windows Kommandogränssnitt.

echo Hello | pwsh -Command """$input World!"""

$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 interna programmet som har körts.

$Matches

Variabeln $Matches fungerar med -match operatorerna och -notmatch . När du skickar skalära indata till operatorn eller och någon av dem identifierar en matchning returnerar de ett booleskt värde och fyller i den automatiska variabeln med en hash-tabell med alla strängvärden som -match -notmatch $Matches matchades. $MatchesHash-tabellen kan också fyllas med infångade värden när du använder reguljära uttryck med -match operatorn .

Mer information om -match operatorn finns i about_Comparison_Operators. Mer information om reguljära uttryck finns i about_Regular_Expressions.

Variabeln $Matches fungerar också i en switch -instruktion med -Regex parametern . Den fylls i på samma sätt som operatorerna -match -notmatch och . Mer information om switch -instruktionen finns i about_Switch.

Anteckning

När $Matches har fyllts i en session behålls det matchade värdet tills det skrivs över av en annan matchning. Om -match används igen och ingen matchning hittas återställs den inte till $Matches $null . Det tidigare matchade värdet behålls $Matches tills en annan matchning hittas.

$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 aktuella skriptet, till exempel sökvägen och filnamnet för skriptet ( ) eller namnet på en funktion ( ) för att identifiera det $MyInvocation $MyInvocation.MyCommand.Path aktuella $MyInvocation.MyCommand.Name 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.

  • PSScriptRoot – Innehåller den fullständiga sökvägen till skriptet som anropade det aktuella kommandot. Värdet för den här egenskapen fylls bara 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 den här egenskapen fylls bara i när anroparen är ett skript.

Till skillnad från variablerna och $PSScriptRoot automatiska innehåller $PSCommandPath psScriptRoot- och PSCommandPath-egenskaperna för den automatiska variabeln information om anroparen eller det anropande skriptet, inte det $MyInvocation 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ökaren.

När du anger en kapslad kommandotolk pausar PowerShell det aktuella kommandot, sparar körningskontexten och ökar värdet för $NestedPromptLevel variabeln. Om du vill skapa ytterligare kapslade kommandotolkar (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 nullvärde eller ett tomt värde. Du kan använda den här variabeln för att representera ett värde som saknas eller är odefinierat i kommandon och skript.

PowerShell behandlar som ett objekt med ett värde, det vill säga som en explicit platshållare, så du kan använda för att representera ett tomt värde i $null $null en serie värden.

När ingår $null i en samling räknas den till exempel som ett av objekten.

$a = "one", $null, "three"
$a.count
3

Om du leder $null variabeln till cmdleten genererar den ett värde för , precis som för ForEach-Object $null de andra objekten

"one", $null, "three" | ForEach-Object { "Hello " + $_}
Hello one
Hello
Hello three

Därför kan du inte använda för att $null medelvärdet inget parametervärde. Parametervärdet $null åsidosätter standardparametervärdet.

Men eftersom PowerShell behandlar variabeln som platshållare kan du använda den i skript som följande, som inte skulle fungera om $null $null de 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 till 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 den 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 inotepad.exe:

notepad.exe $PROFILE

$PSBoundParameters

Innehåller en ordlista med de parametrar som skickas till ett skript eller en funktion och deras aktuella värden. Den här variabeln har bara 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 funktionen Test2 $PSBoundParameters till funktionen Test1. $PSBoundParametersvisas 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 den cmdlet eller avancerade funktion som körs.

Du kan använda egenskaperna och metoderna för objektet i din cmdlet eller funktionskod 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 automatiska $PSCmdlet 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

Från och med PowerShell 7 $PSCulture återspeglar kulturen i det aktuella PowerShell-runspace (session). Om kulturen ändras i ett PowerShell-runspace $PSCulture uppdateras värdet för det runspace.

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 name-egenskapens värde.

$PSDebugContext

När du felsöker 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 det för att ange om felsökaren har kontroll. När den har fyllts i innehåller den ett PsDebugContext-objekt som har egenskaperna Breakpoints och InvocationInfo. Egenskapen InvocationInfo har flera användbara egenskaper, inklusive egenskapen Location. Egenskapen Location anger sökvägen till skriptet som felsöks.

$PSHOME

Innehåller den fullständiga sökvägen till installationskatalogen för PowerShell, vanligtvis i $env:windir\System32\PowerShell\v1.0 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 igenom konceptuella hjälpavsnitt för ordvariabeln:

Select-String -Pattern Variable -Path $pshome\*.txt

$PSItem

Samma som $_ . Innehåller det aktuella objektet i pipeline-objektet. 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 den fullständiga sökvägen till körningsskriptet överordnade katalog.

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 den användare 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 innehåller från $PSVersionTable den ursprungliga sessionen. Om du vill lägga till data i egenskapen ApplicationArguments använder du parametern ApplicationArguments för New-PSSessionOption cmdleten .

$PSUICulture

Innehåller namnet på den användargränssnittskultur som för närvarande används i operativsystemet. Ui-kulturen 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. Current UICulture.Name egenskapen för systemet. Använd cmdleten för att hämta system.Globalization.CultureInfo-objektet Get-UICulture för systemet.

$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:

  • PSVersion – PowerShell-versionsnumret
  • PSEdition Den här egenskapen har värdet "Desktop" för PowerShell 4 och lägre samt PowerShell 5.1 i fullständiga Windows versioner. Den här egenskapen har värdet för för PowerShell 6 och högre samt PowerShell PowerShell 5.1 i utgåvor med begränsade fotavtryck som Core Windows Nano Server eller Windows IoT.
  • GitCommitId – genomförande-ID:t för källfilerna i GitHub,
  • Operativsystem – Beskrivning av operativsystemet som PowerShell körs på.
  • Plattform – Plattform som operativsystemet körs 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ärrhanteringsprotokollet.
  • SerializationVersion – Versionen av serialiseringsmetoden
  • WSManStackVersion – versionsnumret för WS-Management stacken

$PWD

Innehåller ett sökvägsobjekt som representerar den fullständiga sökvägen till den aktuella katalogplatsen för det aktuella PowerShell-körningsutrymmet.

Anteckning

PowerShell stöder flera runspaces per process. Varje körningsutrymme har en egen aktuell katalog. Detta är inte samma som den aktuella katalogen i processen: [System.Environment]::CurrentDirectory .

$Sender

Innehåller objektet som genererade den här händelsen. Den här variabeln fylls bara i i åtgärdsblocket för ett händelseregistreringskommando. Värdet för den här variabeln finns också i egenskapen Avsändare 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äkningsvärdena, inte de resulterande värdena för en Switch -instruktion. Variabeln $switch finns bara när Switch -instruktionen körs. Den tas bort när switch -instruktionen slutför körningen. Mer information finns i about_Switch.

Uppräkningar innehåller egenskaper och metoder som du kan använda för att hämta loopvärden och ändra den aktuella iterationen av loopen. Mer information finns i Använda uppräkningar.

$this

I ett skriptblock som definierar en skriptegenskap eller skriptmetod $this refererar variabeln till objektet som utökas.

I en anpassad klass refererar $this variabeln 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 Sant i kommandon och skript.

Använda uppräkningar

Variablerna , och är alla uppräkningar som används för att iterera genom de värden som bearbetas av $input $foreach deras innehållande $switch kodblock.

En uppräkning innehåller egenskaper och metoder som du kan använda för att gå vidare eller återställa iteration eller hämta iterationsvärden. Direkt manipulering av uppräkningar anses inte vara bästa praxis.

  • Inom loopar bör nyckelord för flödeskontroll brytas och fortsätta vara att föredra.

  • 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 upp uppräkningsatorn till nästa element i samlingen. MoveNext True returnerar om uppräkningsatorn har avancerat, om False uppräkningsatorn har passerat slutet av samlingen.

Anteckning

Det booleska värdet som returneras av MoveNext skickas till utdataströmmen. Du kan utelämna utdata genom att typcasta den [void] till eller leda den till Out-Null.

$input.MoveNext() | Out-Null
[void]$input.MoveNext()

Reset

Metoden Reset anger uppräkning till sin ursprungliga position, som är före det första elementet i samlingen.

Current

Egenskapen Current hämtar elementet i samlingen, eller pipelinen, vid den aktuella positionen för uppräkning.

Egenskapen Current fortsätter att returnera samma egenskap tills MoveNext anropas.

Exempel

Exempel 1: Använda variabeln $input

I följande exempel rensas $input variabeln vid åtkomst till variabeln tills nästa gång processblocket körs. Med hjälp Reset av metoden återställs $input variabeln 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 $input variabeln ä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: $input utanför processblocket

Utanför processblocket representerar $input variabeln alla värden som kommer in i funktionen.

  • När du öppnar $input variabeln rensas alla värden.
  • Metoden Reset återställer hela samlingen.
  • Egenskapen Current fylls aldrig i.
  • Metoden MoveNext returnerar false eftersom samlingen inte kan avanceras.
    • Om du anropar MoveNästa rensas $input 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.Current egenskap

Med hjälp av Current egenskapen kan det aktuella pipelinevärdet nås flera gånger utan att använda metoden Reset . Processblocket anropar inte metoden MoveNext automatiskt.

Egenskapen Current fylls aldrig i om du inte uttryckligen anropar MoveNext. Egenskapen Current kan nås flera gånger i processblocket utan att värdet rensas.

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 $foreach variabeln

Till skillnad $input från variabeln $foreach representerar variabeln alltid alla objekt i samlingen när de används direkt. Använd egenskapen Current för att komma åt det aktuella samlingselementet och metoderna och Reset MoveNext för att ändra dess värde.

Anteckning

Varje iteration av foreach loopen 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 Reset av metoden återställs det aktuella elementet i samlingen. I följande exempel går vi igenom de två första elementen två gånger eftersom Reset metoden anropas. Efter de två första looparna misslyckas if -instruktionen och loopen itererar genom 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 $switch variabeln

Variabeln $switch har exakt samma regler som $foreach variabeln. I följande exempel visas alla uppräkningsbegrepp.

Anteckning

Observera hur notevaluated-ärendet aldrig körs, även om det inte finns break någon -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

about_Functions_Advanced

about_Functions_Advanced_Methods

about_Functions_Advanced_Parameters

about_Functions_OutputTypeAttribute

about_Functions_CmdletBindingAttribute

about_Hash_Tables

about_Preference_Variables

about_Splatting

about_Variables