about_Automatic_Variables
Krátký popis
Popisuje proměnné, které ukládají informace o stavu pro powershell a vytvářejí a udržují.
Koncepčně se většina těchto proměnných považuje za jen pro čtení. I když mohou být zapsány do, pro zpětnou kompatibilitu by neměly být zapsány do.
Tady je seznam automatických proměnných v PowerShellu:
- $$
- $?
- $^
- $_
- $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
Dlouhý popis
$$
Obsahuje poslední token na posledním řádku přijatém relací.
$?
Obsahuje stav spuštění posledního příkazu. Obsahuje hodnotu True, pokud byl poslední příkaz úspěšný a nepravda, pokud selhal. Výsledkem parsování chyb není provádění, takže nemají vliv na hodnotu $?
.
Pro rutiny a pokročilé funkce, které se spouští v několika fázích v kanálu, například v obou process
a blocích, volání this.WriteError()
nebo $PSCmdlet.WriteError()
v libovolném bodě se nastaví $?
na False, stejně jako this.ThrowTerminatingError()
i $PSCmdlet.ThrowTerminatingError()
.end
Rutina Write-Error
se vždy nastaví $?
na False hned po jeho spuštění, ale pro funkci, která ji volá, nenastaví $?
hodnotu False :
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
Pro druhý účel $PSCmdlet.WriteError()
je vhodné místo toho použít.
U nativních příkazů (spustitelných souborů) $?
je nastavena hodnota True, pokud $LASTEXITCODE
je hodnota 0, a pokud je jakákoli jiná hodnota nastavená na Hodnotu False$LASTEXITCODE
.
Poznámka:
Dokud PowerShell 7 nebalí příkaz do závorek (...)
, syntaxe dílčího výrazu $(...)
nebo maticového výrazu @(...)
vždy reset$?
na hodnotu True. Například (Write-Error)
se zobrazí $?
jako Pravda. Toto chování se změnilo v PowerShellu 7, aby $?
vždy odráželo skutečný úspěch posledního příkazu spuštěného v těchto výrazech.
$^
Obsahuje první token na posledním řádku přijatém relací.
$_
Stejné jako $PSItem
. current Obsahuje objekt v objektu kanálu. Tuto proměnnou můžete použít v příkazech, které provádějí akci u každého objektu v kanálu.
Další informace najdete v tématu about_PSItem.
$args
Obsahuje pole hodnot pro nedelarované parametry, které jsou předány funkci, skriptu nebo bloku skriptu. Při vytváření funkce můžete deklarovat parametry pomocí klíčového param
slova nebo přidáním čárkami odděleného seznamu parametrů v závorkách za názvem funkce.
V akci $args
události obsahuje proměnná objekty, které představují argumenty události zpracovávané události. Tato proměnná se naplní pouze v Action
rámci bloku příkazu pro registraci události. Hodnotu této proměnné lze také najít ve SourceArgs vlastnost objektu PSEventArgs , který Get-Event
vrací.
$ConsoleFileName
Obsahuje cestu k souboru konzoly (.psc1
), který byl naposledy použit v relaci. Tato proměnná se vyplní při spuštění PowerShellu pomocí parametru PSConsoleFile nebo při exportu Export-Console
názvů modulů snap-in do souboru konzoly pomocí rutiny.
Když použijete rutinu Export-Console
bez parametrů, automaticky aktualizuje soubor konzoly, který byl naposledy použit v relaci. Tuto automatickou proměnnou můžete použít k určení souboru, který se má aktualizovat.
$EnabledExperimentalFeatures
Obsahuje seznam názvů povolených experimentálních funkcí.
$Error
Obsahuje pole chybových objektů, které představují nejnovější chyby. Poslední chyba je první objekt chyby v poli $Error[0]
.
Pokud chcete zabránit přidání chyby do $Error
pole, použijte společný parametr ErrorAction s hodnotou Ignore. Další informace najdete v tématu about_CommonParameters.
$Event
PSEventArgs Obsahuje objekt, který představuje událost, která se zpracovává. Tato proměnná se naplní pouze v Action
rámci bloku příkazu pro registraci události, například Register-ObjectEvent
. Hodnota této proměnné je stejný objekt, který rutina Get-Event
vrací. Vlastnosti proměnné, například $Event.TimeGenerated
, můžete použít Event
v Action
bloku skriptu.
$EventArgs
Obsahuje objekt, který představuje první argument události, který je odvozen z EventArgs události, která se zpracovává. Tato proměnná se naplní pouze v Action
rámci bloku příkazu pro registraci události. Hodnotu této proměnné lze také najít ve SourceEventArgs vlastnost objektu PSEventArgs , který Get-Event
vrací.
$EventSubscriber
PSEventSubscriber Obsahuje objekt, který představuje odběratel události zpracovávané události. Tato proměnná se naplní pouze v Action
rámci bloku příkazu pro registraci události. Hodnota této proměnné je stejný objekt, který rutina Get-EventSubscriber
vrací.
$ExecutionContext
Obsahuje EngineIntrinsics objekt, který představuje kontext spuštění hostitele PowerShellu. Tuto proměnnou můžete použít k vyhledání objektů spuštění, které jsou k dispozici pro rutiny.
$false
Obsahuje hodnotu False. Tuto proměnnou můžete použít k reprezentaci False v příkazech a skriptech namísto použití řetězce "false"
. Řetězec lze interpretovat jako True , pokud je převeden na neprázdný řetězec nebo na nenulové celé číslo.
$foreach
Obsahuje enumerátor (nikoli výsledné hodnoty) smyčky ForEach . Proměnná existuje pouze v době, kdy ForEach
je smyčka spuštěná. Po $ForEach
dokončení smyčky se odstraní.
Enumerátory obsahují vlastnosti a metody, které můžete použít k načtení hodnot smyčky a změně current iterace smyčky. Další informace naleznete v tématu Použití enumerátorů.
$HOME
Obsahuje úplnou cestu domovského adresáře uživatele. Ve Windows tato proměnná používá hodnotu "$env:USERPROFILE"
proměnné prostředí Windows, obvykle C:\Users\<UserName>
. V systému Unix tato proměnná používá hodnotu HOME
proměnné prostředí.
Důležité
Systém Windows může přesměrovat umístění profilu uživatele. To znamená, že $HOME
nemusí mít stejnou hodnotu jako "$env:HOMEDRIVE$env:HOMEPATH"
.
$Host
Obsahuje objekt, který představuje hostitelskou current aplikaci pro PowerShell.
Tuto proměnnou můžete použít k reprezentaci current hostitele v příkazech nebo k zobrazení nebo změně vlastností hostitele, například $Host.version
nebo $Host.CurrentCulture
nebo $Host.UI.RawUI.BackGroundColor = "Red"
.
Poznámka:
Nastavení barev byla $Host.PrivateData
nahrazena proměnnou $PSStyle
předvoleb. Další informace najdete v tématu about_ANSI_Terminals.
$input
Obsahuje enumerátor, který vyčísluje všechny vstupy předané funkci.
Proměnná $input
je k dispozici pouze pro funkce, bloky skriptů (které jsou nepojmenované funkce) a soubory skriptů (které jsou uložené bloky skriptu).
Ve funkci bez
begin
,process
neboend
bloku$input
, proměnná vyčíslí kolekci všech vstupů do funkce.begin
V bloku$input
proměnná neobsahuje žádná data.process
V bloku$input
proměnná obsahuje current objekt v kanálu.end
V bloku$input
proměnná vyčíslí kolekci všech vstupů funkce.Poznámka:
Proměnnou
$input
uvnitřprocess
bloku iend
bloku nemůžete použít ve stejné funkci nebo bloku skriptu.
Vzhledem k tomu $input
, že je enumerátor, přístup k některé z jeho vlastností $input
již není k dispozici. Vlastnosti můžete znovu $input
použít $input
v jiné proměnné.
Enumerátory obsahují vlastnosti a metody, které můžete použít k načtení hodnot smyčky a změně current iterace smyčky. Další informace naleznete v tématu Použití enumerátorů.
Proměnná $input
je také k dispozici pro příkaz určený parametrem -Command
při vyvolání z příkazového pwsh
řádku. Následující příklad se spustí z příkazového prostředí Windows.
echo Hello | pwsh -Command """$input World!"""
$IsCoreCLR
Obsahuje $true
, jestli current je relace spuštěná v modulu runtime .NET Core (CoreCLR). Jinak obsahuje $false
.
$IsLinux
Obsahuje $true
, jestli current je relace spuštěná v operačním systému Linux.
Jinak obsahuje $false
.
$IsMacOS
Obsahuje $true
, jestli current je relace spuštěná v operačním systému MacOS.
Jinak obsahuje $false
.
$IsWindows
Obsahuje $true
, pokud current relace běží v operačním systému Windows. Jinak obsahuje $false
.
$LASTEXITCODE
Obsahuje ukončovací kód posledního nativního programu nebo skriptu PowerShellu, který se spustil.
U skriptů PowerShellu $LASTEXITCODE
závisí hodnota na tom, jak byl skript volána, a na tom, jestli exit
se použilo klíčové slovo:
Pokud skript používá
exit
klíčové slovo:$LASTEXITCODE
je nastavena na hodnotu určenou klíčovým slovemexit
. Další informace najdete v tématu about_Language_Keywords.Pokud je skript volána přímo, například , nebo
./Test.ps1
pomocí operátoru volání (&
) jako& ./Test.ps1
:Hodnota
$LASTEXITCODE
není změněna, pokud:- Skript volá jiný skript, který používá
exit
klíčové slovo. - Skript volá nativní příkaz.
- Skript používá
exit
klíčové slovo.
- Skript volá jiný skript, který používá
Při zavolání skriptu pomocí
pwsh
parametru$LASTEXITCODE
File je nastavena na:1
pokud se skript ukončil kvůli výjimce- Hodnota zadaná klíčovým slovem
exit
, pokud se používá ve skriptu 0
pokud se skript úspěšně dokončil
Při zavolání skriptu pomocí
pwsh
parametru$LASTEXITCODE
Command je nastaveno na:1
pokud se skript ukončil z důvodu výjimky nebo pokud je výsledek posledního příkazu nastavený$?
na$false
0
pokud se skript úspěšně dokončil a výsledek poslední sady příkazů nastaven$?
na$true
Další informace o parametrech File a Command najdete v tématu about_Pwsh.
$Matches
Proměnná $Matches
pracuje s operátory a -notmatch
operátory-match
. Když odešlete skalární vstup operátoru -match
nebo -notmatch
operátoru a buď jeden zjistí shodu, vrátí logickou hodnotu a naplní $Matches
automatickou proměnnou tabulkou hash všech hodnot řetězce, které byly spárovány. Do $Matches
tabulky hash je také možné zachytávat zachytávání při použití regulárních výrazů s operátorem -match
.
Další informace o operátoru -match
najdete v tématu about_Comparison_Operators. Další informace o regulárních výrazech najdete v tématu about_Regular_Expressions.
Proměnná $Matches
funguje také v switch
příkazu s parametrem -Regex
. Naplní se stejným způsobem jako operátory a -notmatch
operátory-match
. Další informace o switch
příkazu najdete v tématu about_Switch.
Poznámka:
Když $Matches
je v relaci naplněna, zachová se odpovídající hodnota, dokud ji nepřepíše jiná shoda. Pokud -match
se použije znovu a nenajde se žádná shoda, nebude reset$Matches
to .$null
Dříve spárovaná hodnota se uchovává, $Matches
dokud se nenajde jiná shoda.
$MyInvocation
Obsahuje informace o příkazu, například název, parametry, hodnoty parametrů a informace o current tom, jak byl příkaz spuštěn, volán nebo vyvolán, například název skriptu, který příkaz volal current .
$MyInvocation
je naplněn pouze pro skripty, funkce a bloky skriptů. K identifikaci příkazu můžete použít informace v objektu System.Management.Automation.InvocationInfo, který $MyInvocation
se vrátí ve current skriptu, například název funkce ($MyInvocation.MyCommand.Name
).current
To je užitečné pro vyhledání názvu current skriptu.
Počínaje PowerShellem 3.0 MyInvocation
má následující nové vlastnosti.
- PSScriptRoot – Obsahuje úplnou cestu ke skriptu, který vyvolal current příkaz. Hodnota této vlastnosti je naplněna pouze v případě, že volající je skript.
- PSCommandPath – obsahuje úplnou cestu a název souboru skriptu, který vyvolal current příkaz. Hodnota této vlastnosti je naplněna pouze v případě, že volající je skript.
$PSScriptRoot
Na rozdíl od automatických $PSCommandPath
proměnných obsahují vlastnosti $MyInvocation
PSScriptRoot a PSCommandPath automatické proměnné informace o volajícím nebo volajícím current skriptu, nikoli skriptu.
$NestedPromptLevel
Obsahuje úroveň výzvy current . Hodnota 0 označuje původní úroveň výzvy. Hodnota se zvýší, když zadáte vnořenou úroveň a po ukončení se sníží.
PowerShell například při použití $Host.EnterNestedPrompt
metody zobrazí vnořený příkazový řádek. PowerShell také při dosažení zarážky v ladicím programu PowerShellu zobrazí vnořený příkazový řádek.
Když zadáte vnořenou výzvu, PowerShell příkaz pozastaví current , uloží kontext spuštění a zvýší hodnotu $NestedPromptLevel
proměnné. Pokud chcete vytvořit další vnořené příkazové řádky (až 128 úrovní) nebo se vrátit do původního příkazového řádku, dokončete příkaz nebo zadejte exit
.
Proměnná $NestedPromptLevel
vám pomůže sledovat úroveň výzvy. Můžete vytvořit alternativní příkazový řádek PowerShellu, který tuto hodnotu obsahuje, aby byla vždy viditelná.
$null
$null
je automatická proměnná, která obsahuje hodnotu null nebo prázdnou hodnotu. Tuto proměnnou můžete použít k reprezentaci chybějící nebo nedefinované hodnoty v příkazech a skriptech.
PowerShell pracuje $null
jako s objektem s hodnotou nebo zástupným symbolem, takže můžete použít $null
k reprezentaci prázdné hodnoty v kolekci hodnot.
Pokud je například $null
součástí kolekce, počítá se jako jeden z objektů.
$a = "one", $null, "three"
$a.count
3
Pokud proměnnou $null
předáte do ForEach-Object
rutiny, vygeneruje hodnotu stejně $null
jako pro ostatní objekty.
"one", $null, "three" | ForEach-Object { "Hello " + $_}
Hello one
Hello
Hello three
V důsledku toho nemůžete použít $null
žádnou hodnotu parametru. Hodnota parametru $null
přepíše výchozí hodnotu parametru.
Vzhledem k tomu, že PowerShell považuje $null
proměnnou za zástupný symbol, můžete ji použít ve skriptech jako v následujícím příkladu, což by nefungovalo, kdyby $null
bylo ignorováno.
$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
Obsahuje identifikátor procesu (PID) procesu, který je hostitelem relace PowerShellu current .
$PROFILE
Obsahuje úplnou cestu k profilu PowerShellu pro current uživatele a hostitelskou current aplikaci. Tuto proměnnou můžete použít k reprezentaci profilu v příkazech. Můžete ho například použít v příkazu k určení, jestli byl profil vytvořen:
Test-Path $PROFILE
Nebo ho můžete použít v příkazu k vytvoření profilu:
New-Item -ItemType file -Path $PROFILE -Force
Profil můžete otevřít v notepad.exe pomocí příkazu:
notepad.exe $PROFILE
$PSBoundParameters
Obsahuje slovník parametrů, které jsou předány skriptu nebo funkci a jejich current hodnoty. Tato proměnná má hodnotu pouze v oboru, kde jsou deklarovány parametry, jako je skript nebo funkce. Můžete ho použít k zobrazení nebo změně current hodnot parametrů nebo předání hodnot parametrů jinému skriptu nebo funkci.
V tomto příkladu funkce Test2 předá $PSBoundParameters
funkci Test1 funkci. Zobrazí se $PSBoundParameters
ve formátu klíč a hodnota.
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
Obsahuje objekt, který představuje rutinu nebo pokročilou funkci, která se spouští.
Pomocí vlastností a metod objektu v kódu rutiny nebo funkce můžete reagovat na podmínky použití. Například ParameterSetName vlastnost obsahuje název sady parametrů, která se používá, a Metoda ShouldProcess přidá WhatIf a Confirm parametry do rutiny dynamicky.
Další informace o $PSCmdlet
automatické proměnné najdete v tématu about_Functions_CmdletBindingAttribute a about_Functions_Advanced.
$PSCommandPath
Obsahuje úplnou cestu a název souboru skriptu, který se spouští. Tato proměnná je platná ve všech skriptech.
$PSCulture
Počínaje PowerShellem 7 $PSCulture
odráží jazykovou verzi current prostředí PowerShell runspace (relace). Pokud se jazyková verze změní v prostředí Runspace PowerShellu, $PSCulture
aktualizuje se hodnota pro tento runspace.
Jazyková verze určuje formát zobrazení položek, jako jsou čísla, měna a kalendářní data, a je uložen v objektu System.Globalization.CultureInfo . Slouží Get-Culture
k zobrazení jazykové verze počítače. $PSCulture
obsahuje hodnotu vlastnosti Name.
$PSDebugContext
Při ladění tato proměnná obsahuje informace o prostředí ladění. V opačném případě obsahuje hodnotu null . V důsledku toho ho můžete použít k určení, jestli má ladicí program kontrolu. Při naplnění obsahuje PsDebugContext objekt, který má Breakpoints a InvocationInfo vlastnosti. Vlastnost InvocationInfo má několik užitečných vlastností, včetně location vlastnost. Vlastnost Location označuje cestu ke skriptu, který je laděný.
$PSEdition
Obsahuje stejnou hodnotu v $PSVersionTable.PSEdition
. Tato proměnná je k dispozici pro použití v souborech manifestu modulu, zatímco $PSVersionTable
ne.
$PSHOME
Obsahuje úplnou cestu instalačního adresáře pro PowerShell, obvykle C:\Program Files\PowerShell\7
v systémech Windows. Tuto proměnnou můžete použít v cestách k souborům PowerShellu. Například následující příkaz vyhledá koncepční témata nápovědy pro slovo Nápověda:
Select-String -Pattern Help -Path $PSHOME\en-US\*.txt
$PSItem
Stejné jako $_
. current Obsahuje objekt v objektu kanálu. Tuto proměnnou můžete použít v příkazech, které provádějí akci u každého objektu v kanálu.
Další informace najdete v tématu about_PSItem.
$PSScriptRoot
Obsahuje úplnou cestu nadřazeného adresáře spuštěného skriptu.
V PowerShellu 2.0 je tato proměnná platná pouze v modulech skriptu (.psm1
).
Počínaje PowerShellem 3.0 je platný ve všech skriptech.
$PSSenderInfo
Obsahuje informace o uživateli, který spustil psSession, včetně identity uživatele a časového pásma původního počítače. Tato proměnná je k dispozici pouze v konfiguracích PSSession.
Proměnná $PSSenderInfo
obsahuje uživatelsky konfigurovatelnou vlastnost ApplicationArguments, která ve výchozím nastavení obsahuje pouze $PSVersionTable
z původní relace. Pokud chcete přidat data do vlastnosti ApplicationArguments , použijte parametr ApplicationArguments rutiny New-PSSessionOption
.
$PSUICulture
Obsahuje název jazykové verze uživatelského rozhraní (UI), která je nakonfigurovaná v operačním systému. Jazyková verze uživatelského rozhraní určuje, které textové řetězce se používají pro prvky uživatelského rozhraní, jako jsou nabídky a zprávy. Toto je hodnota vlastnosti System.Globalization.CultureInfo.CurrentUICulture.Name systému. K získání objektu System.Globalization.CultureInfo pro systém použijte rutinu Get-UICulture
.
$PSVersionTable
Obsahuje tabulku hash jen pro čtení, která zobrazuje podrobnosti o verzi PowerShellu current spuštěné v relaci. Tabulka obsahuje následující položky:
- PSVersion – číslo verze PowerShellu
- PSEdition Tato vlastnost má hodnotu Desktop pro PowerShell 4 a níže a také PowerShell 5.1 v plnohodnotných edicích Windows. Tato vlastnost má hodnotu
Core
pro PowerShell 6 a vyšší a také Windows PowerShell 5.1 v edicích s omezenými nároky, jako je Windows Nano Server nebo Windows IoT. - GitCommitId – ID potvrzení zdrojových souborů v GitHubu
- Operační systém – popis operačního systému, na kterém běží PowerShell.
- Platforma – platforma , na které běží operační systém. Hodnota v systémech Linux a macOS je Unix. Viz
$IsMacOs
a$IsLinux
. - PSCompatibleVersions – verze PowerShellu, které jsou kompatibilní s verzí current
- PSRemotingProtocolVersion – verze protokolu vzdálené správy PowerShellu.
- SerializationVersion – verze metody serializace
- WSManStackVersion – číslo verze zásobníku WS-Management
$PWD
Obsahuje objekt cesty, který představuje úplnou cestu current k umístění adresáře pro prostředí Runspace PowerShellu current .
Poznámka:
PowerShell podporuje více prostředí runspace na proces. Každý runspace má svůj vlastní current adresář. Nejedná se o stejný current adresář jako adresář procesu: [System.Environment]::CurrentDirectory
.
$Sender
Obsahuje objekt, který vygeneroval tuto událost. Tato proměnná se naplní pouze v rámci bloku akce příkazu registrace události. Hodnotu této proměnné lze nalézt také ve vlastnosti Sender objektu PSEventArgs , který Get-Event
vrací.
$ShellId
Obsahuje identifikátor current prostředí.
$StackTrace
Obsahuje trasování zásobníku pro nejnovější chybu.
$switch
Obsahuje enumerátor, nikoli výsledné hodnoty Switch
příkazu. $switch
Proměnná existuje pouze v době, kdy Switch
je příkaz spuštěný. Když příkaz dokončí provádění, odstraní switch
se. Další informace najdete v tématu about_Switch.
Enumerátory obsahují vlastnosti a metody, které můžete použít k načtení hodnot smyčky a změně current iterace smyčky. Další informace naleznete v tématu Použití enumerátorů.
$this
Proměnná $this
se používá v blocích skriptu, které rozšiřují třídy tak, aby odkazovala na instanci samotné třídy.
Systém ETS (Extensible Type System) PowerShellu umožňuje přidávat vlastnosti do tříd pomocí bloků skriptů. V bloku skriptu, který definuje vlastnost skriptu nebo metodu skriptu, $this
proměnná odkazuje na instanci objektu třídy, která se rozšiřuje. PowerShell například používá ETS k přidání BaseName vlastnost FileInfo třídy.
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};}
Další informace najdete v tématu about_Types.ps1xml.
Ve třídě PowerShellu $this
proměnná odkazuje na objekt instance samotné třídy, což umožňuje přístup k vlastnostem a metodám definovaným ve třídě. Další informace najdete v tématu about_Classes.
Proměnnou $this
také používají třídy událostí .NET, které přebírají bloky skriptu jako delegáty pro obslužnou rutinu události. V tomto scénáři představuje objekt pocházející $this
z události, který se označuje jako odesílatel události.
$true
Obsahuje hodnotu True. Tuto proměnnou můžete použít k reprezentaci true v příkazech a skriptech.
Použití enumerátorů
Proměnné $input
a , $foreach
$switch
jsou všechny enumerátory používané k iteraci hodnot zpracovaných jejich obsahujícím blok kódu.
Enumerátor obsahuje vlastnosti a metody, které můžete použít k postupu nebo reset iteraci nebo načtení hodnot iterace. Přímá manipulace s enumerátory se nepovažuje za osvědčený postup.
Ve smyčce by se měla upřednostňovat přerušení klíčových slov řízení toku a pokračování.
V rámci funkcí, které přijímají vstup kanálu, je osvědčeným postupem použít parametry s atributy ValueFromPipeline nebo ValueFromPipelineByPropertyName .
Další informace najdete v tématu about_Functions_Advanced_Parameters.
MoveNext
Metoda MoveNext přejde enumerátor na další prvek kolekce. MoveNext vrátí True
, pokud byl enumerátor úspěšně rozšířen, False
pokud enumerátor předal konec kolekce.
Poznámka:
Logická hodnota vrácená MoveNext je odeslána do výstupního datového proudu.
Výstup můžete potlačit tak, že ho [void]
zadáte do vysílání nebo ho přepnete na hodnotu Out-Null.
$input.MoveNext() | Out-Null
[void]$input.MoveNext()
Reset
Metoda Reset nastaví enumerátor na počáteční pozici, která je před prvním prvkem v kolekci.
Current
Vlastnost Current získá prvek v kolekci nebo kanálu na current pozici enumerátoru.
Tato Current vlastnost bude nadále vracet stejnou vlastnost, dokud MoveNext není volána.
Příklady
Příklad 1: Použití proměnné $input
V následujícím příkladu $input
přístup k proměnné vymaže proměnnou, dokud se příště nespustí blok procesu. Reset Pomocí metody se proměnná resetuje $input
na current hodnotu kanálu.
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
Blok procesu automaticky posune $input
proměnnou, i když k ní nemáte přístup.
$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
Příklad 2: Použití $input mimo blok procesu
Mimo blok $input
procesu představuje proměnná všechny hodnoty předané do funkce.
$input
Přístup k proměnné vymaže všechny hodnoty.- Metoda Reset resetuje celou kolekci.
- Vlastnost Current se nikdy nenaplní.
- Metoda MoveNext vrátí hodnotu false, protože kolekci nelze upřesnit.
- Volání MoveNext vymaže proměnnou
$input
.
- Volání MoveNext vymaže proměnnou
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:
Příklad 3: Použití $inputCurrent vlastnost
Current S vlastností current je možné k hodnotě kanálu přistupovat vícekrát bez použití Reset metody. Blok procesu automaticky nevolá metodu MoveNext .
Vlastnost Current se nikdy nenaplní, pokud explicitně nezavoláte MoveNext. K Current vlastnosti lze přistupovat vícekrát uvnitř bloku procesu bez vymazání jeho hodnoty.
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
Příklad 4: Použití proměnné $foreach
$input
Na rozdíl od proměnné tato proměnná $foreach
vždy představuje všechny položky v kolekci při přímém přístupu. Current Použijte vlastnost pro přístup current k elementu kolekce a Reset a MoveNext metody změnit jeho hodnotu.
Poznámka:
Každá iterace smyčky foreach
automaticky volá Metodu MoveNext .
Následující smyčka se spustí pouze dvakrát. V druhé iteraci se kolekce před dokončením iterace přesune do třetího prvku. Po druhé iteraci teď nejsou k dispozici žádné další hodnoty pro iteraci a smyčka se ukončí.
MoveNext vlastnost nemá vliv na proměnnou zvolenou pro iteraci kolekcí ($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
Reset Použití metody resetuje current prvek v kolekci. Následující příklad prochází první dva prvky dvakrát , protože Reset metoda je volána. Po prvních dvou smyčce if
příkaz selže a smyčka iteruje všechny tři prvky normálně.
Důležité
To může vést k nekonečné smyčce.
$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
Příklad 5: Použití proměnné $switch
Proměnná $switch
má stejná pravidla jako proměnná $foreach
. Následující příklad ukazuje všechny koncepty enumerátoru.
Poznámka:
Všimněte si, jak NotEvaluated case není nikdy proveden, i když neexistuje žádný break
příkaz za MoveNext metoda.
$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