about_Automatic_Variables

Korte beschrijving

Beschrijft variabelen voor het opslaan van statusinformatie voor en worden gemaakt en onderhouden door PowerShell.

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

Hier volgt een lijst met de automatische variabelen in PowerShell:

Lange beschrijving

$$

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 worden uitgevoerd in meerdere fasen in een pijplijn, bijvoorbeeld in zowel als processend blokken, aanroepen this.WriteError() of $PSCmdlet.WriteError() respectievelijk op een willekeurig punt ingesteld $? op Onwaar, zoals dat 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"
    "The `$? variable is: $?"
}

Test-WriteError
"Now the `$? variable is: $?"
Test-WriteError:
Line |
   7 |  Test-WriteError
     |  ~~~~~~~~~~~~~~~
     | Bad
The $? variable is: False
Now the $? variable is: True

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

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

Notitie

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

$^

Bevat het eerste token op 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 waarmee een actie wordt uitgevoerd op elk object in een pijplijn.

Zie about_PSItem voor meer informatie.

$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 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 vindt u ook 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 laatst in de sessie is gebruikt. U kunt deze automatische variabele gebruiken om het bestand te bepalen dat moet worden bijgewerkt.

$EnabledExperimentalFeatures

Bevat een lijst met namen van de experimentele functies die zijn ingeschakeld.

$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 Negeren. Zie about_CommonParameters voor meer informatie.

$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. U kunt 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"te gebruiken. 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 enumerator (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.

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

$HOME

Bevat het volledige pad van de basismap van de gebruiker. In Windows gebruikt deze variabele doorgaans de waarde van de "$env:USERPROFILE" Windows-omgevingsvariabele C:\Users\<UserName>. In Unix gebruikt deze variabele de waarde van de HOME omgevingsvariabele.

Belangrijk

Windows kan de locatie van het gebruikersprofiel omleiden. Dit betekent dat $HOME deze waarde mogelijk niet dezelfde waarde heeft als "$env:HOMEDRIVE$env:HOMEPATH".

$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.BackGroundColor = "Red"

Notitie

De kleurinstellingen zijn $Host.PrivateData vervangen door de $PSStyle voorkeursvariabele. Zie about_ANSI_Terminals voor meer informatie.

$input

Bevat een enumerator die alle invoer opsommen die wordt doorgegeven aan een functie. De $input variabele is alleen beschikbaar voor functies, scriptblokken (die niet-benoemde functies zijn) en scriptbestanden (die scriptblokken zijn opgeslagen).

  • In een functie zonder een begin, processof end blok wordt de $input verzameling van alle invoer voor de functie opgesomd.

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

  • In het process blok bevat de $input variabele het huidige object in de pijplijn.

  • 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 process blok als het end blok in dezelfde functie of hetzelfde scriptblok.

Omdat $input het een enumerator is, is het openen van een van de eigenschappen ervoor dat $input deze niet meer beschikbaar is. U kunt in een andere variabele opslaan om de $input eigenschappen opnieuw te gebruiken$input.

Enumerators bevatten eigenschappen en methoden die u kunt gebruiken om luswaarden op te halen en de huidige lusiteratie 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 Command Shell.

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 of 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 of PowerShell-script dat is uitgevoerd.

Voor PowerShell-scripts is de waarde afhankelijk van $LASTEXITCODE hoe het script is aangeroepen en of het exit trefwoord is gebruikt:

  • Wanneer een script het exit trefwoord gebruikt:

    $LASTEXITCODE is ingesteld op waarde die is opgegeven door het exit trefwoord. Zie about_Language_Keywords voor meer informatie.

  • Wanneer een script rechtstreeks wordt aangeroepen, zoals ./Test.ps1, of met de aanroepoperator (&) zoals & ./Test.ps1:

    De waarde van $LASTEXITCODE is niet gewijzigd, tenzij:

    • Het script roept een ander script aan dat gebruikmaakt van het exit trefwoord
    • Het script roept een systeemeigen opdracht aan
    • Het script gebruikt het exit trefwoord
  • Wanneer een script wordt aangeroepen met pwsh de parameter Bestand , $LASTEXITCODE is ingesteld op:

    • 1 als het script is beëindigd vanwege een uitzondering
    • De waarde die is opgegeven door het exit trefwoord, indien gebruikt in het script
    • 0 als het script is voltooid
  • Wanneer een script wordt aangeroepen met pwsh de opdrachtparameter , $LASTEXITCODE is ingesteld op:

    • 1 als het script is beëindigd vanwege een uitzondering of als het resultaat van de laatste opdracht is ingesteld $? op $false
    • 0 als het script is voltooid en het resultaat van de laatste opdracht is ingesteld $? op $true

Zie about_Pwsh voor meer informatie over de parameters Bestand en Opdracht.

$Matches

De $Matches variabele werkt met de -match en -notmatch operators. 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 hash-tabel kan ook worden gevuld met captures wanneer u reguliere expressies gebruikt met de -match operator.

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. Het wordt op dezelfde manier gevuld als de -match operators en -notmatch de operatoren. 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 dat de huidige opdracht wordt genoemd.

$MyInvocation wordt alleen ingevuld 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 de naam van een functie ($MyInvocation.MyCommand.Name) om de huidige opdracht te identificeren. Dit is handig voor het zoeken naar 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 aanroeper- 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 genest niveau invoert en afgebroken wanneer u deze afsluit.

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

Wanneer u een geneste prompt invoert, onderbreekt PowerShell de huidige opdracht, slaat u 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, voert u de opdracht uit 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 of een tijdelijke aanduiding, zodat u een lege waarde in een verzameling waarden kunt $null weergeven.

Wanneer deze bijvoorbeeld $null 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. Met een parameterwaarde $null wordt de standaardparameterwaarde overschreven.

Omdat PowerShell de $null variabele echter als tijdelijke aanduiding behandelt, kunt u deze 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 deze gebruiken in een opdracht 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 de 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 geeft de functie Test2 de $PSBoundParameters functie Test1 door. 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 weerspiegelt $PSCulture 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 deze functie om de cultuur van de computer weer te geven. $PSCulture bevat de waarde van de eigenschap Name .

$PSDebugContext

Tijdens foutopsporing bevat deze variabele informatie over de foutopsporingsomgeving. Anders bevat deze een null-waarde . Als gevolg hiervan kunt u dit gebruiken om te bepalen of het foutopsporingsprogramma controle heeft. Wanneer het 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 Locatie geeft het pad aan van het script dat wordt opgespoord.

$PSEdition

Bevat dezelfde waarde in $PSVersionTable.PSEdition. Deze variabele is beschikbaar voor gebruik in modulemanifestbestanden, terwijl $PSVersionTable dat niet zo is.

$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 in een pijplijn.

Zie about_PSItem voor meer informatie.

$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 deze 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 is geconfigureerd 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, evenals PowerShell 5.1 op volledige Windows-edities. Deze eigenschap heeft de waarde voor Core PowerShell 6 en hoger en Windows PowerShell 5.1 op edities met verminderde 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 stack-trace voor de meest recente fout.

$switch

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

Enumerators bevatten eigenschappen en methoden die u kunt gebruiken om luswaarden op te halen en de huidige lusiteratie 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 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 een 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 als gemachtigden voor de gebeurtenis-handler nemen. 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.

Enumerators gebruiken

De $input, $foreachen $switch variabelen zijn alle enumerators die worden gebruikt om de waarden te herhalen die worden verwerkt door het bijbehorende codeblok.

Een enumerator 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.

Movenext

Met de Methode MoveNext wordt de enumerator naar het volgende element van de verzameling verplaatst. MoveNext retourneert True als de enumerator succesvol is gevorderd, 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 naar [void] of door te voeren naar Out-Null.

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

Reset

De Reset methode stelt de enumerator in op de oorspronkelijke positie, vóórhet eerste element in de verzameling.

Current

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

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 MoveNext-methode 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 de Current eigenschap kan de huidige pijplijnwaarde meerdere keren worden geopend zonder de Reset methode te gebruiken. Het procesblok roept de MoveNext-methode niet automatisch 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 voor toegang tot het huidige verzamelingselement en de Reset methoden MoveNext om de 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 hasn't changed: $num"
    }
}
Iteration: 0
        Num: one
        Current: one
Iteration: 1
        Num: two
        Current: two
Before MoveNext (Current): two
After MoveNext (Current): three
Num hasn't 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()
        ("`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 enumeratorconcepten.

Notitie

Let op hoe 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