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:
- $$
- $?
- $^
- $_
- $args
- $ConsoleFileName
- $EnabledExperimentalFeatures
- $Error
- $Event
- $EventArgs
- $EventSubscriber
- $ExecutionContext
- $false
- $foreach
- $HOME
- $Host
- $input
- $IsCoreCLR
- $IsLinux
- $IsMacOS
- $IsWindows
- $LASTEXITCODE
- $Matches
- $MyInvocation
- $NestedPromptLevel
- $null
- $PID
- $PROFILE
- $PSBoundParameters
- $PSCmdlet
- $PSCommandPath
- $PSCulture
- $PSDebugContext
- $PSEdition
- $PSHOME
- $PSItem
- $PSScriptRoot
- $PSSenderInfo
- $PSUICulture
- $PSVersionTable
- $PWD
- $Sender
- $ShellId
- $StackTrace
- $switch
- $this
- $true
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. Parseringsfouten resulteren niet in de uitvoering, dus ze hebben geen invloed op de waarde van $?
.
Voor cmdlets en geavanceerde functies die worden uitgevoerd in meerdere fasen in een pijplijn, bijvoorbeeld in zowel als process
end
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
Tot powerShell 7 verpakt u een instructie tussen haakjes, subexpressiesyntaxis (...)
$(...)
of een matrixexpressie altijd reset$?
@(...)
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 current 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 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 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 vindt u ook in de eigenschap SourceEventArgs van het PSEventArgs object dat Get-Event
wordt geretourneerd.
$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 herhaling van de current lus 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 current hosttoepassing voor PowerShell vertegenwoordigt.
U kunt deze variabele gebruiken om de current 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
, of $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
,process
ofend
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 current 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 hetprocess
blok als hetend
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 herhaling van de current lus 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 current sessie wordt uitgevoerd op de .NET Core Runtime (CoreCLR). Anders bevat .$false
$IsLinux
Bevat $true
als de current sessie wordt uitgevoerd op een Linux-besturingssysteem.
Anders bevat .$false
$IsMacOS
Bevat $true
of de current sessie wordt uitgevoerd op een MacOS-besturingssysteem.
Anders bevat .$false
$IsWindows
Bevat $true
als de current 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 hetexit
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
- Het script roept een ander script aan dat gebruikmaakt van het
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, is dat niet reset$Matches
het $null
volgende. De eerder overeenkomende waarde wordt bewaard $Matches
totdat een andere overeenkomst wordt gevonden.
$MyInvocation
Bevat informatie over de current 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 current opdracht heet.
$MyInvocation
wordt alleen ingevuld voor scripts, functies en scriptblokken. U kunt de informatie in het object System.Management.Automation.InvocationInfo gebruiken dat $MyInvocation
in het current script wordt geretourneerd, zoals de naam van een functie ($MyInvocation.MyCommand.Name
) om de current opdracht te identificeren.
Dit is handig voor het vinden van de naam van het current script.
Vanaf PowerShell 3.0 MyInvocation
zijn de volgende nieuwe eigenschappen beschikbaar.
- PSScriptRoot : bevat het volledige pad naar het script dat de current 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 current 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 current script.
$NestedPromptLevel
Bevat het current 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, wordt de current opdracht onderbroken, wordt de uitvoeringscontext opgeslagen 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 exit
u .
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 current PowerShell-sessie.
$PROFILE
Bevat het volledige pad van het PowerShell-profiel voor de current gebruiker en de current 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 bijbehorende current 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 current 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 $PSCulture
weerspiegelt u de cultuur van de current 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 C:\Program Files\PowerShell\7
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 het woord Help:
Select-String -Pattern Help -Path $PSHOME\en-US\*.txt
$PSItem
Hetzelfde als $_
. Bevat het current 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 de eigenschap System.Globalization.CultureInfo.CurrentUICulture.Name 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 in de current sessie wordt uitgevoerd. 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 current 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 current maplocatie voor de current PowerShell-runspace vertegenwoordigt.
Notitie
PowerShell ondersteunt meerdere runspaces per proces. Elke runspace heeft een eigen current map. Dit is niet hetzelfde als de current 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 current 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 herhaling van de current lus 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
, $foreach
en $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 door te gaan of reset 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 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óór het eerste element in de verzameling.
Current
De Current eigenschap haalt het element op in de verzameling of pijplijn op de current 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 current 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.
- Als u MoveNext aanroept, wordt de
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 current 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 current verzamelingselement en de Reset en MoveNext-methoden 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 current 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