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 die statusinformatie opslaan en die worden gemaakt en onderhouden door PowerShell.
Lange beschrijving
Conceptueel gezien worden de meeste van deze variabelen beschouwd als alleen-lezen. Hoewel ze kunnen worden weggeschreven naar, mogen ze niet naar 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 leiden niet tot uitvoering, zodat ze geen invloed hebben op de waarde van $?.
Voor cmdlets en geavanceerde functies die tijdens meerdere fasen in een pijplijn worden uitgevoerd, bijvoorbeeld in zowel de process als end blokken, zorgt het oproepen van this.WriteError() of $PSCmdlet.WriteError() op enig moment ervoor dat $? op Onwaarwordt ingesteld, evenals this.ThrowTerminatingError() en $PSCmdlet.ThrowTerminatingError().
De cmdlet Write-Error stelt altijd $? in op Onwaar direct nadat deze is uitgevoerd, maar zal $? niet instellen op Onwaar 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 moet $PSCmdlet.WriteError() in plaats daarvan worden gebruikt.
Voor systeemeigen opdrachten (uitvoerbare bestanden) wordt $? ingesteld op Waar wanneer $LASTEXITCODE 0 is en ingesteld op Onwaar wanneer $LASTEXITCODE een andere waarde is.
Notitie
Totdat PowerShell 7 een instructie tussen haakjes (...)verpakt, subexpressiesyntaxis $(...)of een matrixexpressie @(...) altijd $? opnieuw instellen op True. In (Write-Error) wordt bijvoorbeeld $? weergegeven als Waar. Dit gedrag is gewijzigd in PowerShell 7, zodat $? altijd overeenkomt met het werkelijke succes van de laatste opdracht die in deze expressies wordt uitgevoerd.
$^
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_PSItemvoor meer informatie.
$args
Bevat een matrix met waarden voor niet-declaratiede parameters die worden doorgegeven aan een functie, script of scriptblock. 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 in 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 cmdlet Export-Console zonder parameters gebruikt, wordt automatisch het consolebestand bijgewerkt dat het meest recent is gebruikt in de sessie. 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 ErrorAction algemene parameter met de waarde Negeren. Zie about_CommonParametersvoor meer informatie.
$Event
Bevat een PSEventArgs-object dat de gebeurtenis vertegenwoordigt die wordt verwerkt. Deze variabele wordt alleen ingevuld in het Action blok van een opdracht voor gebeurtenisregistratie, zoals Register-ObjectEvent. De waarde van deze variabele is hetzelfde object dat de Get-Event cmdlet retourneert. 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 in 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 retourneert.
$EventSubscriber
Bevat een PSEventSubscriber-object dat de gebeurtenisabonnee vertegenwoordigt van de gebeurtenis die wordt verwerkt. Deze variabele wordt alleen ingevuld in het Action blok van een opdracht voor gebeurtenisregistratie. De waarde van deze variabele is hetzelfde object dat de Get-EventSubscriber cmdlet retourneert.
$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 True 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 voor meer informatie de Enumerators gebruiken.
$HOME
Bevat het volledige pad van de thuisdirectory van de gebruiker. In Windows gebruikt deze variabele de waarde van de omgevingsvariabele "$Env:USERPROFILE" Windows, meestal C:\Users\<UserName>. In Unix gebruikt deze variabele de waarde van de omgevingsvariabele HOME.
Belangrijk
Windows kan de locatie van het gebruikersprofiel omleiden. Dit betekent dat $HOME 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 in $Host.PrivateData zijn vervangen door de $PSStyle voorkeursvariabele. Zie about_ANSI_Terminalsvoor meer informatie.
$input
Bevat een enumerator die alle invoer opsommen die wordt doorgegeven aan een functie.
De $input variabele is alleen beschikbaar voor functies, scriptblokkeringen (die niet-benoemde functies zijn) en scriptbestanden (die scriptblokkeringen worden opgeslagen).
In een functie zonder een
begin,processofendblok inventariseert de$inputvariabele de verzameling van alle invoer voor de functie.In het
beginblok bevat de$inputvariabele geen gegevens.In het
processblok bevat de$inputvariabele het huidige object in de pijplijn.In het
endblok bevat de variabele$inputde verzameling van alle invoer voor de functie.Notitie
U kunt de
$inputvariabele niet gebruiken in zowel hetprocessblok als hetendblok in dezelfde functie of scriptblock.
Omdat $input een enumerator is, zorgt het openen van een van de eigenschappen ervoor dat $input niet meer beschikbaar is. U kunt $input opslaan in een andere variabele om de $input eigenschappen opnieuw te gebruiken.
Enumerators bevatten eigenschappen en methoden die u kunt gebruiken om luswaarden op te halen en de huidige lusiteratie te wijzigen. Zie voor meer informatie de Enumerators gebruiken.
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 van $LASTEXITCODE afhankelijk van hoe het script is aangeroepen en of het exit trefwoord is gebruikt:
Wanneer een script het trefwoord
exitgebruikt:$LASTEXITCODEis ingesteld op de waarde die is opgegeven door hetexittrefwoord. Voor meer informatie, zie about_Language_Keywords.Wanneer een script rechtstreeks wordt aangeroepen, zoals
./Test.ps1, of met de oproepoperator (&) zoals& ./Test.ps1:De waarde van
$LASTEXITCODEwordt niet gewijzigd, tenzij:- Het script roept een ander script aan dat gebruikmaakt van het trefwoord
exit - Het script roept een systeemeigen opdracht aan
- Het script gebruikt het trefwoord
exit
- Het script roept een ander script aan dat gebruikmaakt van het trefwoord
Wanneer een script wordt aangeroepen met
pwshmet behulp van de parameter File, wordt$LASTEXITCODEingesteld 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 succesvol is voltooid
-
Wanneer een script wordt aangeroepen met
pwshmet behulp van de parameter Command, wordt$LASTEXITCODEingesteld op:-
1als het script is beëindigd vanwege een uitzondering of als het resultaat van de laatste opdracht$?op$falsete zetten. -
0als het script succesvol is voltooid en het resultaat van de laatste opdracht$?instelt op$true
-
Zie about_Pwshvoor meer informatie over de parameters File en Command.
$Matches
De $Matches-variabele werkt met de operatoren -match en -notmatch. Wanneer u scalaire invoer naar de operator -match of -notmatch 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 eventuele tekenreekswaarden die overeenkomen. De $Matches hash-tabel kan ook worden gevuld met captures wanneer u reguliere expressies gebruikt met de operator -match.
Zie -matchvoor meer informatie over de operator . Zie about_Regular_Expressionsvoor meer informatie over reguliere expressies.
De $Matches variabele werkt ook in een switch-instructie met de parameter -Regex. Deze wordt op dezelfde manier gevuld als de operatoren -match en -notmatch. Voor meer informatie over de switch-instructie, zie about_Switch.
Notitie
Wanneer $Matches gevuld is in een sessie, blijft de bijpassende waarde behouden totdat deze wordt overschreven door een andere bijpassende waarde. Als -match opnieuw wordt gebruikt en er geen overeenkomst wordt gevonden, wordt $Matches niet opnieuw ingesteld op $null. De eerder overeenkomende waarde wordt in $Matches bewaard 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 of aangeroepen, zoals de naam van het script dat de huidige opdracht heeft aangeroepen.
$MyInvocation wordt alleen ingevuld voor scripts, functies en scriptblokkeringen. 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 heeft MyInvocation de volgende nieuwe eigenschappen.
- 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. Waarde wordt verhoogd wanneer u een genest niveau invoert en verlaagd wanneer u het afsluit.
PowerShell geeft bijvoorbeeld een geneste opdrachtprompt weer wanneer u de methode $Host.EnterNestedPrompt gebruikt. PowerShell biedt ook een geneste opdrachtprompt wanneer u een onderbrekingspunt bereikt in de PowerShell-debugger.
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 u exit.
Met de variabele $NestedPromptLevel 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 behandelt $null als een object met een waarde of een tijdelijke aanduiding, zodat u $null kunt gebruiken om een lege waarde in een verzameling waarden weer te geven.
Wanneer $null bijvoorbeeld is opgenomen in een verzameling, wordt deze geteld als een van de objecten.
$a = "one", $null, "three"
$a.Count
3
Als u de variabele $null doorsluist naar de cmdlet ForEach-Object, 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 $null niet gebruiken om zonder parameterwaardete betekenen. Een parameterwaarde van $null overschrijft de standaardparameterwaarde.
Omdat PowerShell de $null variabele echter als tijdelijke aanduiding behandelt, kunt u deze gebruiken in scripts zoals de volgende, wat niet zou werken als $null werd genegeerd.
$calendar = @($null, $null, "Meeting", $null, $null, "Team Lunch", $null)
$days = "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday",
"Friday", "Saturday"
$currentDay = 0
foreach($day in $calendar)
{
if($day -ne $null)
{
"Appointment on $($days[$currentDay]): $day"
}
$currentDay++
}
Appointment on Tuesday: Meeting
Appointment on Friday: Team lunch
$PID
Bevat de proces-id (PID) van het proces dat als host fungeert voor de huidige PowerShell-sessie.
$PROFILE
Bevat het volledige pad van het PowerShell-profiel voor de huidige gebruiker en de huidige hosttoepassing. U kunt deze variabele gebruiken om het profiel weer te geven in opdrachten. U kunt deze bijvoorbeeld gebruiken in een opdracht om te bepalen of er een profiel is gemaakt:
Test-Path $PROFILE
U kunt deze ook gebruiken in een opdracht om een profiel te maken:
New-Item -ItemType File -Path $PROFILE -Force
U kunt het in een opdracht gebruiken om het profiel te openen in notepad.exe:
notepad.exe $PROFILE
$PSBoundParameters
Bevat een woordenlijst met de parameters die worden doorgegeven aan een script of functie en 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 door aan de functie Test1. De $PSBoundParameters worden weergegeven in de notatie van 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 WhatIf- toe en Bevestig parameters dynamisch aan de cmdlet.
Zie $PSCmdlet en about_Functions_Advancedvoor meer informatie over de 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 om de cultuur van de computer weer te geven.
$PSCulture bevat de waarde van de eigenschap Naam.
$PSDebugContext
Tijdens foutopsporing bevat deze variabele informatie over de foutopsporingsomgeving. Anders bevat deze een null--waarde. Als gevolg hiervan kunt u dit gebruiken om te bepalen of het foutopsporingsprogramma controle heeft. Wanneer gevuld, bevat het een PsDebugContext-object met breakpoints en AanroepInfo-eigenschappen. De eigenschap InvocationInfo heeft verschillende nuttige eigenschappen, waaronder de eigenschap Location. De eigenschap Location 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 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 pijplijnobject. U kunt deze variabele gebruiken in opdrachten waarmee een actie wordt uitgevoerd op elk object in een pijplijn.
Zie about_PSItemvoor 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 van de oorspronkelijke sessie bevat. Als u gegevens wilt toevoegen aan de eigenschap ApplicationArguments, gebruikt u de parameter ApplicationArguments van de cmdlet New-PSSessionOption.
Belangrijk
Omdat deze eigenschap gegevens bevat die expliciet door de client worden verstrekt, kunnen aanvallers met behulp van deze eigenschap voor beveiligingsbeslissingen autorisatiecontroles omzeilen. Gebruik deze gegevens nooit voor vertrouwensbeslissingen. Valideer alle gebruikersinvoer wanneer deze wordt gebruikt voor andere toepassingslogica.
$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-object 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 versienummer van PowerShell
-
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 van
Corevoor 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
$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 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 identificatie 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 terwijl de instructie switch wordt uitgevoerd; deze wordt verwijderd wanneer de switch-instructie de uitvoering voltooit. Zie about_Switchvoor meer informatie.
Enumerators bevatten eigenschappen en methoden die u kunt gebruiken om luswaarden op te halen en de huidige lusiteratie te wijzigen. Zie voor meer informatie de Enumerators gebruiken.
$this
De $this variabele wordt gebruikt in scriptblocks waarmee klassen worden uitgebreid om te verwijzen naar het exemplaar van de klasse zelf.
Met het Extensible Type System (ETS) van PowerShell kunt u eigenschappen toevoegen aan klassen met behulp van scriptblocks. In een scriptblok waarmee een scripteigenschap of scriptmethode wordt gedefinieerd, 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.ps1xmlvoor 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_Classesvoor meer informatie.
De $this variabele wordt ook gebruikt door .NET-gebeurtenisklassen die scriptblokkeringen als gemachtigden voor de gebeurtenis-handler gebruiken. In dit scenario vertegenwoordigt $this het object dat afkomstig is van de gebeurtenis, ook wel de afzender van de gebeurtenis genoemd.
$true
Bevat True. U kunt deze variabele gebruiken om True weer te geven in opdrachten en scripts.
Opsommingen gebruiken
De variabelen $input, $foreachen $switch zijn allemaal opsommingen 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 de trefwoorden voor stroombeheer break en continue de voorkeur genieten.
In functies die pijplijninvoer accepteren, kunt u het beste parameters gebruiken met de kenmerken ValueFromPipeline of ValueFromPipelineByPropertyName.
Zie about_Functions_Advanced_Parametersvoor meer informatie.
MoveNext
Met de methode MoveNext wordt de enumerator naar het volgende element van de verzameling verplaatst.
MoveNext- retourneert True als de enumerator met succes is voortgegaan, False als de enumerator het einde van de verzameling heeft bereikt.
Notitie
De Booleaanse-waarde die wordt geretourneerd door MoveNext wordt naar de uitvoerstroom gestuurd.
U kunt de uitvoer onderdrukken door deze naar
$input.MoveNext() | Out-Null
[void]$input.MoveNext()
Reset
De methode Reset stelt de enumerator in op zijn oorspronkelijke positie, namelijk voor het eerste element in de verzameling.
Current
De eigenschap Current haalt het element op de huidige positie van de enumerator in de verzameling of pijplijn op.
De eigenschap Current blijft dezelfde eigenschap retourneren totdat MoveNext- wordt aangeroepen.
Voorbeelden
Voorbeeld 1: de variabele $input gebruiken
In het volgende voorbeeld wist het benaderen van de variabele $input de variabele totdat het procesblok de volgende keer 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 staat de $input variabele voor alle waarden die in de functie zijn doorgesluisd.
- Als u de variabele
$inputopent, worden alle waarden gewist. - Met de methode Reset wordt de hele verzameling opnieuw ingesteld.
- De eigenschap Current wordt nooit gepopuleerd.
- De methode MoveNext retourneert onwaar omdat de verzameling niet kan worden geavanceerd.
- Als u MoveNext aanroept, wordt de variabele
$inputgewist.
- Als u MoveNext aanroept, wordt de variabele
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 eigenschapCurrent van $input gebruiken.
Met de eigenschap Current kan de huidige pijplijnwaarde meerdere keren worden geopend zonder de methode Reset te gebruiken. Het procesblok roept niet automatisch de methode MoveNext aan.
De eigenschap Current wordt nooit ingevuld, tenzij u expliciet MoveNextaanroept. De eigenschap Current kan meerdere keren in het procesblok worden geopend zonder zijn waarde 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 methode MoveNext 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 methode Reset 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 variabele $switch heeft exact dezelfde regels als de $foreach variabele. In het volgende voorbeeld ziet u alle enumeratorconcepten.
Notitie
Let op dat het NotEvaluated geval nooit wordt uitgevoerd, ook al is er geen break instructie na de methode MoveNext.
$values = "Start", "MoveNext", "NotEvaluated", "Reset", "End"
$stopInfinite = $false
switch ($values)
{
"MoveNext" {
"`tMoveNext"
$switch.MoveNext() | Out-Null
"`tAfter MoveNext: $($switch.Current)"
}
# This case is never evaluated.
"NotEvaluated" {
"`tAfterMoveNext: $($switch.Current)"
}
"Reset" {
if (!$stopInfinite)
{
"`tReset"
$switch.Reset()
$stopInfinite = $true
}
}
default {
"Default (Current): $($switch.Current)"
}
}
Default (Current): Start
MoveNext
After MoveNext: NotEvaluated
Reset
Default (Current): Start
MoveNext
After MoveNext: NotEvaluated
Default (Current): End