Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Korte beschrijving
Beschrijft variabelen voor het opslaan van statusinformatie voor en worden gemaakt en onderhouden door PowerShell.
Lange beschrijving
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
$$
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 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
Tot PowerShell 7 zorgde het omgeven van een instructie met haakjes (...), subexpressiesyntaxis $(...)of een matrixexpressie @(...) ervoor dat het altijd $? opnieuw werd ingesteld op True. 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 pipeline-object. 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 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, 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,processofendblok wordt de$inputverzameling van alle invoer voor de functie opgesomd.In het
beginblok bevat de$inputvariabele geen gegevens.In het
processblok bevat de$inputvariabele het huidige object in de pijplijn.In het
endblok inventariseert de$inputvariabele de verzameling van alle invoer voor de functie.Notitie
U kunt de
$inputvariabele niet gebruiken in zowel hetprocessblok als hetendblok 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 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 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
exittrefwoord gebruikt:$LASTEXITCODEis ingesteld op waarde die is opgegeven door hetexittrefwoord. 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
$LASTEXITCODEis niet gewijzigd, tenzij:- Het script roept een ander script aan dat gebruikmaakt van het
exittrefwoord - Het script roept een systeemeigen opdracht aan
- Het script gebruikt het
exittrefwoord
- Het script roept een ander script aan dat gebruikmaakt van het
Wanneer een script wordt aangeroepen met
pwshde parameter Bestand ,$LASTEXITCODEis ingesteld op:-
1als het script is beëindigd vanwege een uitzondering - De waarde die is opgegeven door het
exittrefwoord, indien gebruikt in het script -
0als het script is voltooid
-
Wanneer een script wordt aangeroepen met
pwshde opdrachtparameter ,$LASTEXITCODEis ingesteld op:-
1als het script is beëindigd vanwege een uitzondering of als het resultaat van de laatste opdracht is ingesteld$?op$false -
0als 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 scalaireen een van beide een overeenkomst detecteert, retourneren ze een Booleaanse waarde en vullen ze de -match 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 -match voor meer informatie over de 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 switch voor meer informatie over de instructie.
Notitie
Wanneer $Matches een sessie wordt ingevuld, blijft de overeenkomende waarde behouden totdat deze wordt overschreven door een andere overeenkomst. Als -match opnieuw wordt gebruikt en er geen overeenkomst wordt gevonden, wordt $Matches niet opnieuw ingesteld 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 uitgevoerd, zoals de naam van het script dat de huidige opdracht heeft aangeroepen.
$MyInvocation wordt alleen ingevuld voor scripts, functies en scriptblokken. U kunt de informatie in het System.Management.Automation.InvocationInfo object gebruiken dat $MyInvocation retourneert 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 automatische variabelen $PSScriptRoot en $PSCommandPath bevatten de eigenschappen PSScriptRoot en PSCommandPath van de automatische variabele $MyInvocation informatie over het aanroepende of oproepende script, niet over 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, wordt de huidige 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 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 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 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 huidige object in het pipeline-object. 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 cmdlet om het Get-UICulture 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
CorePowerShell 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
$IsMacOSen$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 werkmap. 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 identificatiecode 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.
Opsommingen 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.
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óórhet eerste element in de verzameling.
Current
De eigenschap Current haalt het element in de verzameling of de pijplijn op dat zich op de huidige positie van de enumerator bevindt.
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 behulp van de methode Reset 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
$inputvariabele 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
$inputvariabele 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 eigenschap Current kan de huidige pijplijnwaarde meerdere keren worden geopend zonder de methode Reset 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 eigenschap Current om toegang te krijgen tot het huidige verzamelingselement en de methoden Reset en 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 behulp van de methode Reset 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