about_Automatic_Variables

Korte beschrijving

Hierin worden variabelen beschreven waarin statusgegevens voor PowerShell worden opgeslagen. Deze variabelen worden gemaakt en onderhouden door PowerShell.

Lange beschrijving

Conceptueel gezien worden deze variabelen beschouwd als alleen-lezen. Hoewel ze kunnen worden geschreven naar, moeten ze niet naar achterwaartse compatibiliteit worden geschreven.

Hier volgt een lijst met de automatische variabelen in PowerShell:

$$

Bevat het laatste token in de laatste regel die door de sessie is ontvangen.

$?

Bevat de uitvoeringsstatus van de laatste opdracht. Deze bevat Waar als de laatste opdracht is geslaagd en Onwaar als deze is mislukt.

Voor cmdlets en geavanceerde functies die in meerdere fasen in een pijplijn worden uitgevoerd, bijvoorbeeld in zowel als endprocess blokken, worden aanroepen this.WriteError() of $PSCmdlet.WriteError() respectievelijk op elk punt ingesteld $? op Onwaar, zoals wel this.ThrowTerminatingError() en $PSCmdlet.ThrowTerminatingError().

De Write-Error cmdlet wordt $? altijd ingesteld op False direct nadat deze is uitgevoerd, maar wordt niet ingesteld op $?False voor een functie die deze aanroept:

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

Test-WriteError
$? # $true

Voor het laatste doel $PSCmdlet.WriteError() moet in plaats daarvan worden gebruikt.

Voor systeemeigen opdrachten (uitvoerbare bestanden) $? wordt ingesteld op Waar als $LASTEXITCODE 0 en ingesteld op Onwaar wanneer $LASTEXITCODE dit een andere waarde is.

Notitie

Totdat PowerShell 7, met een instructie tussen haakjes, subexpressiesyntaxis (...)$(...) of matrixexpressie @(...) altijd opnieuw wordt ingesteld $? op Waar, zodat deze (Write-Error) wordt weergegeven $? als Waar. Dit is gewijzigd in PowerShell 7, zodat $? dit altijd overeenkomt met het werkelijke succes van de laatste opdracht die in deze expressies wordt uitgevoerd.

$^

Bevat het eerste token in de laatste regel die door de sessie is ontvangen.

$_

Hetzelfde als $PSItem. Bevat het huidige object in het pijplijnobject. U kunt deze variabele gebruiken in opdrachten die een actie uitvoeren op elk object of op geselecteerde objecten in een pijplijn.

$args

Bevat een matrix met waarden voor niet-declaratiede parameters die worden doorgegeven aan een functie, script of scriptblok. Wanneer u een functie maakt, kunt u de parameters declareren met behulp van het param trefwoord of door een door komma's gescheiden lijst met parameters toe te voegen tussen haakjes na de functienaam.

In een gebeurtenisactie bevat de $args variabele objecten die de gebeurtenisargumenten vertegenwoordigen van de gebeurtenis die wordt verwerkt. Deze variabele wordt alleen ingevuld binnen het Action blok van een opdracht voor gebeurtenisregistratie. De waarde van deze variabele is ook te vinden in de eigenschap SourceArgs van het PSEventArgs-object dat Get-Event retourneert.

$ConsoleFileName

Bevat het pad van het consolebestand (.psc1) dat het laatst is gebruikt in de sessie. Deze variabele wordt ingevuld wanneer u PowerShell start met de parameter PSConsoleFile of wanneer u de Export-Console cmdlet gebruikt om modulenamen te exporteren naar een consolebestand.

Wanneer u de Export-Console cmdlet zonder parameters gebruikt, wordt automatisch het consolebestand bijgewerkt dat het meest recent is gebruikt in de sessie. U kunt deze automatische variabele gebruiken om te bepalen welk bestand wordt bijgewerkt.

$Error

Bevat een matrix met foutobjecten die de meest recente fouten vertegenwoordigen. De meest recente fout is het eerste foutobject in de matrix $Error[0].

Als u wilt voorkomen dat een fout wordt toegevoegd aan de $Error matrix, gebruikt u de algemene parameter ErrorAction met de waarde Ignore. Zie about_CommonParameters voor meer informatie.

$ErrorView

Bevat de waarde waarmee de weergave wordt bepaald waarin fouten worden weergegeven. De $ErrorView variabele accepteert tekenreeksen of ErrorView-objecten en heeft een standaardwaarde van ConciseView. Als een andere tekenreeks dan een geaccepteerde waarde is gedefinieerd, wordt er een fout gegenereerd.

Geaccepteerde waarden:

  • CategoryView - Alleen de informatie over de foutcategorie wordt weergegeven.
  • ConciseView - Alleen het foutbericht wordt weergegeven. Als de fout een parserfout is of afkomstig is van een script, wordt er een locatiepointer opgenomen. Deze weergave is toegevoegd in PowerShell 7.0
  • NormalView - Biedt een standaard PowerShell-foutweergave met het foutbericht, de locatie, de categoriegegevens en meer.

$Event

Bevat een PSEventArgs-object dat de gebeurtenis vertegenwoordigt die wordt verwerkt. Deze variabele wordt alleen ingevuld binnen het Action blok van een opdracht voor gebeurtenisregistratie, zoals Register-ObjectEvent. De waarde van deze variabele is hetzelfde object dat door de Get-Event cmdlet wordt geretourneerd. Daarom kunt u de eigenschappen van de Event variabele, zoals $Event.TimeGenerated, in een Action scriptblok gebruiken.

$EventArgs

Bevat een object dat het eerste gebeurtenisargument vertegenwoordigt dat is afgeleid van EventArgs van de gebeurtenis die wordt verwerkt. Deze variabele wordt alleen ingevuld binnen het Action blok van een opdracht voor gebeurtenisregistratie. De waarde van deze variabele is ook te vinden in de eigenschap SourceEventArgs van het PSEventArgs-object dat Get-Event retourneert.

$EventSubscriber

Bevat een PSEventSubscriber-object dat de gebeurtenisabonnee vertegenwoordigt van de gebeurtenis die wordt verwerkt. Deze variabele wordt alleen ingevuld binnen het Action blok van een opdracht voor gebeurtenisregistratie. De waarde van deze variabele is hetzelfde object dat door de Get-EventSubscriber cmdlet wordt geretourneerd.

$ExecutionContext

Bevat een EngineIntrinsics-object dat de uitvoeringscontext van de PowerShell-host vertegenwoordigt. U kunt deze variabele gebruiken om de uitvoeringsobjecten te vinden die beschikbaar zijn voor cmdlets.

$false

Bevat onwaar. U kunt deze variabele gebruiken om Onwaar weer te geven in opdrachten en scripts in plaats van de tekenreeks 'false'. De tekenreeks kan worden geïnterpreteerd als Waar als deze wordt geconverteerd naar een niet-lege tekenreeks of naar een geheel getal dat niet nul is.

$foreach

Bevat de opsommingsfunctie (niet de resulterende waarden) van een ForEach-lus . De $ForEach variabele bestaat alleen terwijl de ForEach lus wordt uitgevoerd. Deze wordt verwijderd nadat de lus is voltooid.

Opsommingen bevatten eigenschappen en methoden die u kunt gebruiken om luswaarden op te halen en de huidige lus-iteratie te wijzigen. Zie Enumerators gebruiken voor meer informatie.

$HOME

Bevat het volledige pad van de basismap van de gebruiker. Deze variabele is het equivalent van de "$env:homedrive$env:homepath" Windows-omgevingsvariabelen, meestal C:\Users\<UserName>.

$Host

Bevat een object dat de huidige hosttoepassing voor PowerShell vertegenwoordigt. U kunt deze variabele gebruiken om de huidige host weer te geven in opdrachten of om de eigenschappen van de host weer te geven of te wijzigen, zoals $Host.version of $Host.CurrentCulture$host.ui.rawui.setbackgroundcolor("Red").

$input

Bevat een opsommingsprogramma waarmee alle invoer wordt opgesomd die wordt doorgegeven aan een functie. De $input variabele is alleen beschikbaar voor functies en scriptblokken (die naamloze functies zijn).

  • In een functie zonder een Begin, Processof End blok, inventariseert de $input variabele de verzameling van alle invoer voor de functie.

  • In het Begin blok bevat de $input variabele geen gegevens.

  • In het Process blok bevat de $input variabele het object dat zich momenteel in de pijplijn bevindt.

  • In het End blok inventariseert de $input variabele de verzameling van alle invoer voor de functie.

    Notitie

    U kunt de $input variabele niet gebruiken in zowel het procesblok als het eindblok in dezelfde functie of hetzelfde scriptblok.

Omdat $input het een opsommingsator is, is het openen van een van de eigenschappen ervan $input niet langer beschikbaar. U kunt $input in een andere variabele opslaan om de $input eigenschappen opnieuw te gebruiken.

Opsommingen bevatten eigenschappen en methoden die u kunt gebruiken om luswaarden op te halen en de huidige lus-iteratie te wijzigen. Zie Enumerators gebruiken voor meer informatie.

De $input variabele is ook beschikbaar voor de opdracht die is opgegeven door de -Command parameter van pwsh wanneer deze wordt aangeroepen vanaf de opdrachtregel. Het volgende voorbeeld wordt uitgevoerd vanuit de Windows-opdrachtshell.

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

$IsCoreCLR

Bevat $True als de huidige sessie wordt uitgevoerd op de .NET Core Runtime (CoreCLR). Anders bevat $False.

$IsLinux

Bevat $True als de huidige sessie wordt uitgevoerd op een Linux-besturingssysteem. Anders bevat $False.

$IsMacOS

Bevat $True als de huidige sessie wordt uitgevoerd op een MacOS-besturingssysteem. Anders bevat $False.

$IsWindows

Bevat $TRUE als de huidige sessie wordt uitgevoerd op een Windows-besturingssysteem. Anders bevat $FALSE.

$LastExitCode

Bevat de afsluitcode van het laatste systeemeigen programma dat is uitgevoerd.

$Matches

De $Matches variabele werkt met de operatoren en -notmatch de -match operatoren. Wanneer u scalaire invoer naar de -match of -notmatch operator verzendt en een van beide een overeenkomst detecteert, retourneren ze een Booleaanse waarde en vullen ze de $Matches automatische variabele in met een hash-tabel met tekenreekswaarden die overeenkomen. De $Matches hashtabel kan ook worden gevuld met captures wanneer u reguliere expressies met de -match operator gebruikt.

Zie about_Comparison_Operators voor meer informatie over de -match operator. Zie about_Regular_Expressions voor meer informatie over reguliere expressies.

De $Matches variabele werkt ook in een switch instructie met de -Regex parameter. Deze wordt op dezelfde manier gevuld als de -match operatoren.-notmatch Zie about_Switch voor meer informatie over de switch instructie.

Notitie

Wanneer $Matches een sessie wordt ingevuld, blijft de overeenkomende waarde behouden totdat deze wordt overschreven door een andere overeenkomst. Als -match deze opnieuw wordt gebruikt en er geen overeenkomst wordt gevonden, wordt deze niet opnieuw ingesteld $Matches op $null. De eerder overeenkomende waarde wordt bewaard $Matches totdat een andere overeenkomst wordt gevonden.

$MyInvocation

Bevat informatie over de huidige opdracht, zoals de naam, parameters, parameterwaarden en informatie over hoe de opdracht is gestart, aangeroepen of aangeroepen, zoals de naam van het script met de naam van de huidige opdracht.

$MyInvocation is alleen gevuld voor scripts, functies en scriptblokken. U kunt de informatie in het object System.Management.Automation.InvocationInfo gebruiken dat $MyInvocation wordt geretourneerd in het huidige script, zoals het pad en de bestandsnaam van het script ($MyInvocation.MyCommand.Path) of de naam van een functie ($MyInvocation.MyCommand.Name) om de huidige opdracht te identificeren. Dit is vooral handig voor het vinden van de naam van het huidige script.

Vanaf PowerShell 3.0 MyInvocation zijn de volgende nieuwe eigenschappen beschikbaar.

  • PSScriptRoot : bevat het volledige pad naar het script dat de huidige opdracht heeft aangeroepen. De waarde van deze eigenschap wordt alleen ingevuld wanneer de aanroeper een script is.
  • PSCommandPath - Bevat het volledige pad en de bestandsnaam van het script dat de huidige opdracht heeft aangeroepen. De waarde van deze eigenschap wordt alleen ingevuld wanneer de aanroeper een script is.

In tegenstelling tot de $PSScriptRoot en $PSCommandPath automatische variabelen bevatten de eigenschappen PSScriptRoot en PSCommandPath van de $MyInvocation automatische variabele informatie over het aanroepende of aanroepende script, niet het huidige script.

$NestedPromptLevel

Bevat het huidige promptniveau. Een waarde van 0 geeft het oorspronkelijke promptniveau aan. De waarde wordt verhoogd wanneer u een geneste niveau invoert en wordt afgebroken wanneer u deze afsluit.

PowerShell geeft bijvoorbeeld een geneste opdrachtprompt weer wanneer u de $Host.EnterNestedPrompt methode gebruikt. PowerShell geeft ook een geneste opdrachtprompt weer wanneer u een onderbrekingspunt bereikt in het PowerShell-foutopsporingsprogramma.

Wanneer u een geneste prompt invoert, onderbreekt PowerShell de huidige opdracht, slaat de uitvoeringscontext op en wordt de waarde van de $NestedPromptLevel variabele verhoogd. Als u extra geneste opdrachtprompts (maximaal 128 niveaus) wilt maken of wilt terugkeren naar de oorspronkelijke opdrachtprompt, voltooit u de opdracht of typt exitu .

Met de $NestedPromptLevel variabele kunt u het promptniveau bijhouden. U kunt een alternatieve PowerShell-opdrachtprompt maken die deze waarde bevat, zodat deze altijd zichtbaar is.

$null

$null is een automatische variabele die een null - of lege waarde bevat. U kunt deze variabele gebruiken om een afwezige of niet-gedefinieerde waarde in opdrachten en scripts weer te geven.

PowerShell wordt behandeld $null als een object met een waarde, dat wil zeggen, als een expliciete tijdelijke aanduiding, zodat u een lege waarde in een reeks waarden kunt $null weergeven.

Wanneer $null deze bijvoorbeeld is opgenomen in een verzameling, wordt deze geteld als een van de objecten.

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

Als u de $null variabele doorgeeft aan de ForEach-Object cmdlet, wordt er een waarde gegenereerd voor $null, net zoals voor de andere objecten

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

Als gevolg hiervan kunt u niet gebruiken $null om geen parameterwaarde te betekenen. Een parameterwaarde van $null overschrijft de standaardparameterwaarde.

Omdat PowerShell de variabele echter als tijdelijke aanduiding behandelt, kunt u deze $null gebruiken in scripts zoals de volgende, die niet werkt als $null deze worden genegeerd.

$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

Bevat de proces-id (PID) van het proces dat als host fungeert voor de huidige PowerShell-sessie.

$PROFILE

Bevat het volledige pad van het PowerShell-profiel voor de huidige gebruiker en de huidige hosttoepassing. U kunt deze variabele gebruiken om het profiel weer te geven in opdrachten. U kunt deze bijvoorbeeld gebruiken in een opdracht om te bepalen of er een profiel is gemaakt:

Test-Path $PROFILE

U kunt deze ook gebruiken in een opdracht om een profiel te maken:

New-Item -ItemType file -Path $PROFILE -Force

U kunt het in een opdracht gebruiken om het profiel te openen in notepad.exe:

notepad.exe $PROFILE

$PSBoundParameters

Bevat een woordenlijst met de parameters die worden doorgegeven aan een script of functie en hun huidige waarden. Deze variabele heeft alleen een waarde in een bereik waarin parameters worden gedeclareerd, zoals een script of functie. U kunt deze gebruiken om de huidige waarden van parameters weer te geven of te wijzigen of om parameterwaarden door te geven aan een ander script of een andere functie.

In dit voorbeeld wordt de $PSBoundParameters functie Test2 doorgegeven aan de functie Test1. De $PSBoundParameters waarden worden weergegeven in de notatie Sleutel en Waarde.

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

Bevat een object dat de cmdlet of geavanceerde functie vertegenwoordigt die wordt uitgevoerd.

U kunt de eigenschappen en methoden van het object in uw cmdlet of functiecode gebruiken om te reageren op de gebruiksvoorwaarden. De eigenschap ParameterSetName bevat bijvoorbeeld de naam van de parameterset die wordt gebruikt en de methode ShouldProcess voegt de parameters WhatIf en Confirm dynamisch toe aan de cmdlet.

Zie about_Functions_CmdletBindingAttribute en about_Functions_Advanced voor meer informatie over de $PSCmdlet automatische variabele.

$PSCommandPath

Bevat het volledige pad en de bestandsnaam van het script dat wordt uitgevoerd. Deze variabele is geldig in alle scripts.

$PSCulture

Vanaf PowerShell 7 $PSCulture weerspiegelt u de cultuur van de huidige PowerShell-runspace (sessie). Als de cultuur wordt gewijzigd in een PowerShell-runspace, wordt de $PSCulture waarde voor die runspace bijgewerkt.

De cultuur bepaalt de weergave-indeling van items zoals getallen, valuta en datums en wordt opgeslagen in een System.Globalization.CultureInfo-object . Gebruik Get-Culture dit om de computercultuur weer te geven. $PSCulture bevat de waarde van de eigenschap Naam .

$PSDebugContext

Tijdens foutopsporing bevat deze variabele informatie over de foutopsporingsomgeving. Anders bevat deze een null-waarde . Als gevolg hiervan kunt u deze gebruiken om aan te geven of het foutopsporingsprogramma controle heeft. Wanneer dit is ingevuld, bevat het een PsDebugContext-object met de eigenschappen Breakpoints en InvocationInfo . De eigenschap InvocationInfo heeft verschillende nuttige eigenschappen, waaronder de eigenschap Location . De eigenschap Location geeft het pad aan van het script dat wordt opgespoord.

$PSHOME

Bevat het volledige pad van de installatiemap voor PowerShell, meestal $env:windir\System32\PowerShell\v1.0 in Windows-systemen. U kunt deze variabele gebruiken in de paden van PowerShell-bestanden. Met de volgende opdracht wordt bijvoorbeeld gezocht in de conceptuele Help-onderwerpen voor de woordvariabele:

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

$PSItem

Hetzelfde als $_. Bevat het huidige object in het pijplijnobject. U kunt deze variabele gebruiken in opdrachten waarmee een actie wordt uitgevoerd op elk object of op geselecteerde objecten in een pijplijn.

$PSScriptRoot

Bevat het volledige pad van de bovenliggende map van het script.

In PowerShell 2.0 is deze variabele alleen geldig in scriptmodules (.psm1). Vanaf PowerShell 3.0 is het geldig in alle scripts.

$PSSenderInfo

Bevat informatie over de gebruiker die de PSSession heeft gestart, inclusief de gebruikersidentiteit en de tijdzone van de oorspronkelijke computer. Deze variabele is alleen beschikbaar in PSSessions.

De $PSSenderInfo variabele bevat een door de gebruiker configureerbare eigenschap ApplicationArguments, die standaard alleen de $PSVersionTable oorspronkelijke sessie bevat. Als u gegevens wilt toevoegen aan de eigenschap ApplicationArguments , gebruikt u de parameter ApplicationArguments van de New-PSSessionOption cmdlet.

$PSUICulture

Bevat de naam van de gebruikersinterfacecultuur (UI) die momenteel in gebruik is in het besturingssysteem. De ui-cultuur bepaalt welke teksttekenreeksen worden gebruikt voor elementen van de gebruikersinterface, zoals menu's en berichten. Dit is de waarde van System.Globalization.CultureInfo.Current UICulture.Name eigenschap van het systeem. Gebruik de Get-UICulture cmdlet om het object System.Globalization.CultureInfo voor het systeem op te halen.

$PSVersionTable

Bevat een alleen-lezen hashtabel met details over de versie van PowerShell die wordt uitgevoerd in de huidige sessie. De tabel bevat de volgende items:

  • PSVersion - Het PowerShell-versienummer
  • PSEdition Deze eigenschap heeft de waarde 'Desktop' voor PowerShell 4 en lager en PowerShell 5.1 op volledig aanbevolen Windows-edities. Deze eigenschap heeft de waarde voor Core PowerShell 6 en hoger en PowerShell PowerShell 5.1 op edities met beperkte footprint, zoals Windows Nano Server of Windows IoT.
  • GitCommitId - De doorvoer-id van de bronbestanden, in GitHub,
  • Besturingssysteem : beschrijving van het besturingssysteem waarop PowerShell wordt uitgevoerd.
  • Platform : platform waarop het besturingssysteem wordt uitgevoerd. De waarde in Linux en macOS is Unix. Zie $IsMacOs en $IsLinux.
  • PSCompatibleVersions - Versies van PowerShell die compatibel zijn met de huidige versie
  • PSRemotingProtocolVersion : de versie van het externe beheerprotocol van PowerShell.
  • SerializationVersion - De versie van de serialisatiemethode
  • WSManStackVersion - Het versienummer van de WS-Management stack

$PWD

Bevat een padobject dat het volledige pad van de huidige maplocatie voor de huidige PowerShell-runspace vertegenwoordigt.

Notitie

PowerShell ondersteunt meerdere runspaces per proces. Elke runspace heeft een eigen huidige map. Dit is niet hetzelfde als de huidige map van het proces: [System.Environment]::CurrentDirectory.

$Sender

Bevat het object dat deze gebeurtenis heeft gegenereerd. Deze variabele wordt alleen ingevuld in het actieblok van een opdracht voor gebeurtenisregistratie. De waarde van deze variabele is ook te vinden in de eigenschap Afzender van het PSEventArgs-object dat Get-Event retourneert.

$ShellId

Bevat de id van de huidige shell.

$StackTrace

Bevat een stacktracering voor de meest recente fout.

$switch

Bevat de opsommingsfunctie niet de resulterende waarden van een Switch instructie. De $switch variabele bestaat alleen terwijl de Switch instructie wordt uitgevoerd. Deze wordt verwijderd wanneer de switch instructie is voltooid. Zie about_Switch voor meer informatie.

Opsommingen bevatten eigenschappen en methoden die u kunt gebruiken om luswaarden op te halen en de huidige lus-iteratie te wijzigen. Zie Enumerators gebruiken voor meer informatie.

$this

De $this variabele wordt gebruikt in scriptblokken die klassen uitbreiden om te verwijzen naar het exemplaar van de klasse zelf.

Met het ETS (Extensible Type System) van PowerShell kunt u eigenschappen toevoegen aan klassen met behulp van scriptblokken. In een scriptblok dat een scripteigenschap of scriptmethode definieert, verwijst de $this variabele naar een exemplaar van het object van de klasse die wordt uitgebreid. PowerShell gebruikt bijvoorbeeld ETS om de eigenschap BaseName toe te voegen aan de klasse FileInfo .

PS> Get-ChildItem .\README.md | Get-Member BaseName | Format-List

TypeName   : System.IO.FileInfo
Name       : BaseName
MemberType : ScriptProperty
Definition : System.Object BaseName {get=if ($this.Extension.Length -gt 0){$this.Name.Remove($this.Name.Length -
             $this.Extension.Length)}else{$this.Name};}

Zie about_Types.ps1xml voor meer informatie.

In een PowerShell-klasse verwijst de $this variabele naar het exemplaarobject van de klasse zelf, waardoor toegang wordt geboden tot eigenschappen en methoden die in de klasse zijn gedefinieerd. Zie about_Classes voor meer informatie.

De $this variabele wordt ook gebruikt door .NET-gebeurtenisklassen die scriptblokken uitvoeren als gemachtigden voor de gebeurtenis-handler. In dit scenario $this vertegenwoordigt u het object dat afkomstig is van de gebeurtenis, ook wel de afzender van de gebeurtenis genoemd.

$true

Bevat waar. U kunt deze variabele gebruiken om Waar weer te geven in opdrachten en scripts.

Opsommingen gebruiken

$foreachDe $input, en $switch variabelen zijn allemaal opsommingen die worden gebruikt om de waarden te herhalen die worden verwerkt door het bijbehorende codeblok.

Een opsomming bevat eigenschappen en methoden die u kunt gebruiken om iteratie vooraf te gaan of opnieuw in te stellen, of iteratiewaarden op te halen. Het rechtstreeks manipuleren van opsommingen wordt niet beschouwd als best practice.

  • Binnen lussen moeten trefwoorden voor stroombeheer worden verbroken en moet doorgaan de voorkeur hebben.

  • Binnen functies die pijplijninvoer accepteren, is het raadzaam parameters te gebruiken met de kenmerken ValueFromPipeline of ValueFromPipelineByPropertyName .

    Zie about_Functions_Advanced_Parameters voor meer informatie.

Movenext

Met de Methode MoveNext wordt de opsommingsfunctie naar het volgende element van de verzameling verplaatst. MoveNext retourneert True als de enumerator is geavanceerd, False als de enumerator het einde van de verzameling heeft doorgegeven.

Notitie

De Booleaanse waarde die door MoveNext wordt geretourneerd, wordt verzonden naar de uitvoerstroom. U kunt de uitvoer onderdrukken door de uitvoer te typen of [void] door te sluisen naar Out-Null.

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

Reset

Met Reset de methode wordt de opsommingsfunctie ingesteld op de oorspronkelijke positie, die zich vóór het eerste element in de verzameling bevindt.

Current

De Current eigenschap haalt het element in de verzameling of pijplijn op op de huidige positie van de opsomming.

De Current eigenschap blijft dezelfde eigenschap retourneren totdat MoveNext wordt aangeroepen.

Voorbeelden

Voorbeeld 1: de variabele $input gebruiken

In het volgende voorbeeld wist het openen van de variabele de $input variabele tot de volgende keer dat het procesblok wordt uitgevoerd. Met de Reset methode wordt de $input variabele opnieuw ingesteld op de huidige pijplijnwaarde.

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

Het procesblok gaat automatisch verder met de $input variabele, zelfs als u deze niet opent.

$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

Voorbeeld 2: $input buiten het procesblok gebruiken

Buiten het procesblok vertegenwoordigt de $input variabele alle waarden die in de functie zijn doorgesluisd.

  • Als u de $input variabele opent, worden alle waarden gewist.
  • Met Reset de methode wordt de hele verzameling opnieuw ingesteld.
  • De Current eigenschap wordt nooit ingevuld.
  • De Methode MoveNext retourneert onwaar omdat de verzameling niet kan worden geavanceerd.
    • Als u MoveNext aanroept, wordt de $input variabele gewist.
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:

Voorbeeld 3: de $input gebruiken.Current Eigenschap

Met behulp van de Current eigenschap kan de huidige pijplijnwaarde meerdere keren worden geopend zonder de Reset methode te gebruiken. Het procesblok roept niet automatisch de MoveNext-methode aan.

De Current eigenschap wordt nooit ingevuld, tenzij u MoveNext expliciet aanroept. De Current eigenschap kan meerdere keren in het procesblok worden geopend zonder de waarde ervan te wissen.

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

Voorbeeld 4: De variabele $foreach gebruiken

In tegenstelling tot de $input variabele vertegenwoordigt de $foreach variabele altijd alle items in de verzameling wanneer deze rechtstreeks worden geopend. Gebruik de Current eigenschap om toegang te krijgen tot het huidige verzamelingselement en de methoden MoveNext om de Reset waarde ervan te wijzigen.

Notitie

Elke iteratie van de foreach lus roept automatisch de MoveNext-methode aan.

De volgende lus wordt slechts twee keer uitgevoerd. In de tweede iteratie wordt de verzameling verplaatst naar het derde element voordat de iteratie is voltooid. Na de tweede iteratie zijn er nu geen waarden meer om te herhalen en wordt de lus beëindigd.

De eigenschap MoveNext heeft geen invloed op de variabele die is gekozen om de verzameling te doorlopen ($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

Met de Reset methode wordt het huidige element in de verzameling opnieuw ingesteld. In het volgende voorbeeld worden de eerste twee elementen twee keer doorlopen omdat de Reset methode wordt aangeroepen. Na de eerste twee lussen mislukt de if instructie en doorloopt de lus normaal alle drie de elementen.

Belangrijk

Dit kan resulteren in een oneindige lus.

$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

Voorbeeld 5: de variabele $switch gebruiken

De $switch variabele heeft exact dezelfde regels als de $foreach variabele. In het volgende voorbeeld ziet u alle opsommingsconcepten.

Notitie

Houd er rekening mee dat de case NotEvaluated nooit wordt uitgevoerd, ook al is er geen break instructie na de MoveNext-methode .

$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

Zie ook