Informacje o zmiennych automatycznych
Krótki opis
Opisuje zmienne, które przechowują informacje o stanie dla programu PowerShell. Te zmienne są tworzone i obsługiwane przez program PowerShell.
Długi opis
Koncepcyjnie te zmienne są uważane za tylko do odczytu. Mimo że można je zapisać, w celu zapewnienia zgodności z poprzednimi wersjami nie należy ich zapisywać.
Oto lista zmiennych automatycznych w programie PowerShell:
$$
Zawiera ostatni token w ostatnim wierszu odebrany przez sesję.
$?
Zawiera stan wykonania ostatniej operacji. Zawiera wartość True , jeśli ostatnia operacja zakończyła się pomyślnie i wartość False , jeśli nie powiodła się.
$^
Zawiera pierwszy token w ostatnim wierszu odebrany przez sesję.
$_
Tak samo jak $PSItem
. Zawiera bieżący obiekt w obiekcie potoku. Tej zmiennej można użyć w poleceniach, które wykonują akcję na każdym obiekcie lub na wybranych obiektach w potoku.
$args
Zawiera tablicę wartości dla niezdecydowanych parametrów, które są przekazywane do funkcji, skryptu lub bloku skryptu. Podczas tworzenia funkcji można zadeklarować parametry przy użyciu param
słowa kluczowego lub dodając rozdzielaną przecinkami listę parametrów w nawiasach po nazwie funkcji.
W przypadku akcji zdarzenia zmienna $Args
zawiera obiekty reprezentujące argumenty zdarzeń przetwarzanego zdarzenia. Ta zmienna jest wypełniana tylko w Action
bloku polecenia rejestracji zdarzeń.
Wartość tej zmiennej można również znaleźć we właściwości SourceArgs obiektu PSEventArgs , który Get-Event
zwraca.
$ConsoleFileName
Zawiera ścieżkę pliku konsoli (.psc1
), który był ostatnio używany w sesji. Ta zmienna jest wypełniana podczas uruchamiania programu PowerShell za pomocą parametru PSConsoleFile lub gdy używasz Export-Console
polecenia cmdlet do eksportowania nazw przystawek do pliku konsoli.
Jeśli używasz Export-Console
polecenia cmdlet bez parametrów, program automatycznie aktualizuje plik konsoli, który był ostatnio używany w sesji. Możesz użyć tej zmiennej automatycznej, aby określić, który plik zostanie zaktualizowany.
$Error
Zawiera tablicę obiektów błędów, które reprezentują najnowsze błędy.
Najnowszy błąd to pierwszy obiekt błędu w tablicy $Error[0]
.
Aby zapobiec dodawaniu błędu do tablicy, użyj wspólnego parametru $Error
ErrorAction z wartością Ignoruj. Aby uzyskać więcej informacji, zobacz about_CommonParameters.
$Event
Zawiera obiekt PSEventArgs reprezentujący zdarzenie, które jest przetwarzane. Ta zmienna jest wypełniana tylko w Action
bloku polecenia rejestracji zdarzeń, takiego jak Register-ObjectEvent
. Wartość tej zmiennej jest tym samym obiektem Get-Event
, który zwraca polecenie cmdlet. W związku z tym można użyć właściwości zmiennej Event
, takich jak $Event.TimeGenerated
, w Action
bloku skryptu.
$EventArgs
Zawiera obiekt reprezentujący pierwszy argument zdarzenia pochodzący z eventArgs przetwarzanego zdarzenia. Ta zmienna jest wypełniana tylko w Action
bloku polecenia rejestracji zdarzeń.
Wartość tej zmiennej można również znaleźć we właściwości SourceEventArgs obiektu PSEventArgs , który Get-Event
zwraca.
$EventSubscriber
Zawiera obiekt PSEventSubscriber reprezentujący subskrybenta zdarzenia przetwarzanego. Ta zmienna jest wypełniana tylko w Action
bloku polecenia rejestracji zdarzeń. Wartość tej zmiennej jest tym samym obiektem Get-EventSubscriber
, który zwraca polecenie cmdlet.
$ExecutionContext
Zawiera obiekt EngineIntrinsics reprezentujący kontekst wykonywania hosta programu PowerShell. Za pomocą tej zmiennej można znaleźć obiekty wykonywania, które są dostępne dla poleceń cmdlet.
$false
Zawiera wartość False. Tej zmiennej można użyć do reprezentowania wartości False w poleceniach i skryptach zamiast używać ciągu "false". Ciąg może być interpretowany jako True , jeśli jest konwertowany na ciąg niepusty lub na liczbę całkowitą inną niż zero.
$foreach
Zawiera moduł wyliczający (nie wartości wynikowe) pętli ForEach . Zmienna $ForEach
istnieje tylko wtedy, gdy ForEach
pętla jest uruchomiona; jest usuwana po zakończeniu pętli.
Moduły wyliczania zawierają właściwości i metody, których można użyć do pobierania wartości pętli i zmiany iteracji pętli bieżącej. Aby uzyskać więcej informacji, zobacz Using Enumerators (Używanie modułów wyliczania).
$HOME
Zawiera pełną ścieżkę katalogu macierzystego użytkownika. Ta zmienna jest odpowiednikiem "$env:homedrive$env:homepath"
zmiennych środowiskowych systemu Windows, zazwyczaj C:\Users\<UserName>
.
$Host
Zawiera obiekt reprezentujący bieżącą aplikację hosta dla programu PowerShell. Tej zmiennej można użyć do reprezentowania bieżącego hosta w poleceniach lub wyświetlania lub zmieniania właściwości hosta, takich jak $Host.version
lub $Host.CurrentCulture
, lub $host.ui.rawui.setbackgroundcolor("Red")
.
$input
Zawiera moduł wyliczający, który wylicza wszystkie dane wejściowe przekazywane do funkcji. Zmienna $input
jest dostępna tylko dla funkcji i bloków skryptów (które są funkcjami nienazwanymi).
W funkcji bez
Begin
elementu ,Process
lubEnd
bloku$input
zmienna wylicza kolekcję wszystkich danych wejściowych funkcji.Begin
W bloku zmienna$input
nie zawiera żadnych danych.Process
W bloku zmienna$input
zawiera obiekt, który znajduje się obecnie w potoku.End
W bloku zmienna$input
wylicza kolekcję wszystkich danych wejściowych funkcji.Uwaga
Nie można użyć zmiennej
$input
wewnątrz bloku Proces i bloku Końcowego w tej samej funkcji lub bloku skryptu.
Moduły wyliczania zawierają właściwości i metody, których można użyć do pobierania wartości pętli i zmiany iteracji pętli bieżącej. Aby uzyskać więcej informacji, zobacz Using Enumerators (Używanie modułów wyliczania).
$LastExitCode
Zawiera kod zakończenia ostatniego programu opartego na systemie Windows, który został uruchomiony.
$Matches
Zmienna Matches
działa z operatorami -match
i -notmatch
.
Po przesłaniu -match
danych wejściowych skalarnych do operatora or -notmatch
i wykryciu dopasowania zwracają wartość logiczną i wypełniają $Matches
zmienną automatyczną tabelą skrótów pasujących wartości ciągów. Tabelę $Matches
skrótów można również wypełnić przy użyciu przechwytywania, gdy używasz wyrażeń regularnych z operatorem -match
.
Aby uzyskać więcej informacji na temat -match
operatora, zobacz about_Comparison_Operators. Aby uzyskać więcej informacji na temat wyrażeń regularnych, zobacz about_Regular_Expressions.
$MyInvocation
Zawiera informacje o bieżącym poleceniu, takie jak nazwa, parametry, wartości parametrów i informacje o sposobie uruchomienia, wywołania lub wywołania polecenia, takie jak nazwa skryptu, który nazwał bieżące polecenie.
$MyInvocation
Jest wypełniany tylko dla skryptów, funkcji i bloków skryptów. Informacje można użyć w obiekcie System.Management.Automation.InvocationInfo zwracanym $MyInvocation
w bieżącym skrypcie, takim jak ścieżka i nazwa pliku skryptu ($MyInvocation.MyCommand.Path
) lub nazwa funkcji ($MyInvocation.MyCommand.Name
), aby zidentyfikować bieżące polecenie. Jest to szczególnie przydatne w przypadku znajdowania nazwy bieżącego skryptu.
Począwszy od programu PowerShell 3.0, MyInvocation
ma następujące nowe właściwości.
Właściwość | Opis |
---|---|
PSScriptRoot | Zawiera pełną ścieżkę do wywołanego skryptu |
bieżące polecenie. Wartość tej właściwości to | |
wypełniane tylko wtedy, gdy obiekt wywołujący jest skryptem. | |
PSCommandPath | Zawiera pełną ścieżkę i nazwę pliku skryptu |
wywołano bieżące polecenie. Wartość tej wartości | |
właściwość jest wypełniana tylko wtedy, gdy obiekt wywołujący jest | |
Skrypt. |
$PSScriptRoot
W przeciwieństwie do zmiennych automatycznych i $PSCommandPath
właściwości $MyInvocation
PSScriptRoot i PSCommandPath zmiennej automatycznej zawierają informacje o wywołaniu lub skrypcie wywołującym, a nie bieżącym skrypcie.
$NestedPromptLevel
Zawiera bieżący poziom monitu. Wartość 0 wskazuje oryginalny poziom monitu. Wartość jest zwiększana po wprowadzeniu zagnieżdżonego poziomu i dekrementacji po jej zakończeniu.
Na przykład program PowerShell przedstawia zagnieżdżony wiersz polecenia podczas korzystania z $Host.EnterNestedPrompt
metody . Program PowerShell przedstawia również zagnieżdżony wiersz polecenia po osiągnięciu punktu przerwania w debugerze programu PowerShell.
Po wprowadzeniu wiersza polecenia zagnieżdżonego program PowerShell wstrzymuje bieżące polecenie, zapisuje kontekst wykonywania i zwiększa wartość zmiennej $NestedPromptLevel
. Aby utworzyć dodatkowe zagnieżdżone wiersze polecenia (do 128 poziomów) lub powrócić do oryginalnego wiersza polecenia, wypełnij polecenie lub wpisz exit
.
Zmienna $NestedPromptLevel
ułatwia śledzenie poziomu monitu. Możesz utworzyć alternatywny wiersz polecenia programu PowerShell zawierający tę wartość, aby zawsze był widoczny.
$null
$null
jest zmienną automatyczną zawierającą wartość null lub pustą. Tej zmiennej można użyć do reprezentowania nieobecnej lub niezdefiniowanej wartości w poleceniach i skryptach.
Program PowerShell traktuje $null
jako obiekt z wartością, czyli jako jawny symbol zastępczy, dzięki czemu można użyć $null
do reprezentowania pustej wartości w serii wartości.
Na przykład po $null
dołączeniu do kolekcji jest on liczone jako jeden z obiektów.
$a = "one", $null, "three"
$a.count
3
Jeśli potokujesz zmienną $null
do ForEach-Object
polecenia cmdlet, generuje wartość dla $null
elementu , tak samo jak w przypadku innych obiektów
"one", $null, "three" | ForEach-Object { "Hello " + $_}
Hello one
Hello
Hello three
W związku z tym nie można użyć $null
polecenia , aby nie oznaczać wartości parametru. Wartość parametru zastępuje wartość parametru $null
domyślnego.
Jednak ponieważ program PowerShell traktuje $null
zmienną jako symbol zastępczy, można go użyć w skryptach takich jak poniższy, co nie działałoby, gdyby $null
zostały zignorowane.
$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
Zawiera identyfikator procesu (PID) procesu hostujący bieżącą sesję programu PowerShell.
$PROFILE
Zawiera pełną ścieżkę profilu programu PowerShell dla bieżącego użytkownika i bieżącej aplikacji hosta. Tej zmiennej można użyć do reprezentowania profilu w poleceniach. Można na przykład użyć go w poleceniu, aby określić, czy profil został utworzony:
Test-Path $PROFILE
Możesz też użyć go w poleceniu , aby utworzyć profil:
New-Item -ItemType file -Path $PROFILE -Force
Można go użyć w poleceniu , aby otworzyć profil w notepad.exe:
notepad.exe $PROFILE
$PSBoundParameters
Zawiera słownik parametrów przekazywanych do skryptu lub funkcji i ich bieżących wartości. Ta zmienna ma wartość tylko w zakresie, w którym są deklarowane parametry, takie jak skrypt lub funkcja. Można go użyć do wyświetlania lub zmieniania bieżących wartości parametrów lub przekazywania wartości parametrów do innego skryptu lub funkcji.
W tym przykładzie funkcja Test2 przekazuje $PSBoundParameters
element do funkcji Test1 . Są $PSBoundParameters
one wyświetlane w formacie Klucz i Wartość.
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
Zawiera obiekt reprezentujący polecenie cmdlet lub funkcję zaawansowaną, która jest uruchamiana.
Możesz użyć właściwości i metod obiektu w kodzie polecenia cmdlet lub funkcji, aby reagować na warunki użytkowania. Na przykład właściwość ParameterSetName zawiera nazwę używanego zestawu parametrów, a metoda ShouldProcess dodaje parametry WhatIf i Confirm do polecenia cmdlet dynamicznie.
Aby uzyskać więcej informacji na temat zmiennej automatycznej $PSCmdlet
, zobacz about_Functions_CmdletBindingAttribute i about_Functions_Advanced.
$PSCommandPath
Zawiera pełną ścieżkę i nazwę pliku skryptu, który jest uruchamiany. Ta zmienna jest prawidłowa we wszystkich skryptach.
$PSCulture
Zawiera nazwę kultury aktualnie używanej w systemie operacyjnym.
Kultura określa format wyświetlania elementów, takich jak liczby, waluta i daty. Jest to wartość właściwości System.Globalization.CultureInfo.CurrentCulture.Name systemu. Aby uzyskać obiekt System.Globalization.CultureInfo dla systemu, użyj Get-Culture
polecenia cmdlet .
$PSDebugContext
Podczas debugowania ta zmienna zawiera informacje o środowisku debugowania. W przeciwnym razie zawiera wartość null . W związku z tym można go użyć, aby wskazać, czy debuger ma kontrolę. Po wypełnieniu zawiera obiekt PsDebugContext , który ma właściwości Breakpoints i InvocationInfo . Właściwość InvocationInfo ma kilka przydatnych właściwości, w tym właściwość Location . Właściwość Location wskazuje ścieżkę skryptu, który jest debugowany.
$PSHOME
Zawiera pełną ścieżkę katalogu instalacyjnego dla programu PowerShell, zazwyczaj $env:windir\System32\PowerShell\v1.0
w systemach Windows. Tej zmiennej można użyć w ścieżkach plików programu PowerShell. Na przykład następujące polecenie wyszukuje koncepcyjne tematy Pomocy dla zmiennej wyrazu:
Select-String -Pattern Variable -Path $pshome\*.txt
$PSItem
Tak samo jak $_
. Zawiera bieżący obiekt w obiekcie potoku. Tej zmiennej można użyć w poleceniach, które wykonują akcję na każdym obiekcie lub na wybranych obiektach w potoku.
$PSScriptRoot
Zawiera katalog, z którego jest uruchamiany skrypt.
W programie PowerShell 2.0 ta zmienna jest prawidłowa tylko w modułach skryptów (.psm1
).
Począwszy od programu PowerShell 3.0, jest on prawidłowy we wszystkich skryptach.
$PSSenderInfo
Zawiera informacje o użytkowniku, który uruchomił program PSSession, w tym tożsamość użytkownika i strefę czasową komputera źródłowego. Ta zmienna jest dostępna tylko w systemach PSSessions.
Zmienna $PSSenderInfo
zawiera właściwość konfigurowalną użytkownika, ApplicationArguments, która domyślnie zawiera tylko $PSVersionTable
element z sesji źródłowej. Aby dodać dane do właściwości ApplicationArguments, użyj parametru New-PSSessionOption
ApplicationArguments polecenia cmdlet.
$PSUICulture
Zawiera nazwę kultury interfejsu użytkownika używanej obecnie w systemie operacyjnym. Kultura interfejsu użytkownika określa, które ciągi tekstowe są używane dla elementów interfejsu użytkownika, takich jak menu i komunikaty. Jest to wartość właściwości System.Globalization.CultureInfo.CurrentUICulture.Name systemu. Aby uzyskać obiekt System.Globalization.CultureInfo dla systemu, użyj Get-UICulture
polecenia cmdlet .
$PSVersionTable
Zawiera tabelę skrótów tylko do odczytu, która wyświetla szczegółowe informacje o wersji programu PowerShell uruchomionej w bieżącej sesji. Tabela zawiera następujące elementy:
Właściwość | Opis |
---|---|
BuildVersion | Numer kompilacji bieżącej wersji |
CLRVersion | Wersja środowiska uruchomieniowego języka wspólnego |
(CLR) | |
PSCompatibleVersions | Wersje programu PowerShell, które są zgodne |
z bieżącą wersją | |
PSRemotingProtocolVersion | Wersja zdalna programu PowerShell |
protokół zarządzania. | |
PSVersion | Numer wersji programu PowerShell |
SerializationVersion | Wersja metody serializacji |
WSManStackVersion | Numer wersji stosu WS-Management |
$PWD
Zawiera obiekt ścieżki, który reprezentuje pełną ścieżkę bieżącego katalogu.
$Sender
Zawiera obiekt, który wygenerował to zdarzenie. Ta zmienna jest wypełniana tylko w bloku Akcja polecenia rejestracji zdarzeń. Wartość tej zmiennej można również znaleźć we właściwości Sender obiektu PSEventArgs , który Get-Event
zwraca.
$ShellId
Zawiera identyfikator bieżącej powłoki.
$StackTrace
Zawiera ślad stosu dla ostatniego błędu.
$switch
Zawiera moduł wyliczający, a nie wynikowe wartości instrukcji Switch
. Zmienna $switch
istnieje tylko wtedy, gdy Switch
instrukcja jest uruchomiona; jest usuwana po zakończeniu switch
wykonywania instrukcji. Aby uzyskać więcej informacji, zobacz about_Switch.
Moduły wyliczania zawierają właściwości i metody, których można użyć do pobierania wartości pętli i zmiany iteracji pętli bieżącej. Aby uzyskać więcej informacji, zobacz Using Enumerators (Używanie modułów wyliczania).
$this
W bloku skryptu, który definiuje właściwość skryptu lub metodę skryptu, zmienna odwołuje się do obiektu, $this
który jest rozszerzany.
$true
Zawiera wartość True. Tej zmiennej można użyć do reprezentowania wartości True w poleceniach i skryptach.
Korzystanie z modułów wyliczania
Zmienne $input
, $foreach
i $switch
to wszystkie moduły wyliczające używane do iterowania wartości przetworzonych przez ich blok kodu.
Moduł wyliczający zawiera właściwości i metody, których można użyć do przechodzenia lub resetowania iteracji albo pobierania wartości iteracji. Bezpośrednie manipulowanie modułami wyliczającym nie jest uznawane za najlepsze rozwiązanie.
W pętlach preferowane powinnybyć słowa kluczowe sterowania przepływem.
W funkcjach, które akceptują dane wejściowe potoku, najlepszym rozwiązaniem jest użycie atrybutów Parameters z atrybutami ValueFromPipeline lub ValueFromPipelineByPropertyName .
Aby uzyskać więcej informacji, zobacz about_Functions_Advanced_Parameters.
Movenext
Metoda MoveNext przenosi moduł wyliczający do następnego elementu kolekcji. Funkcja MoveNext zwraca wartość True , jeśli moduł wyliczający został pomyślnie zaawansowany, wartość False , jeśli moduł wyliczający przeszedł koniec kolekcji.
Uwaga
Wartość logiczna zwrócona przez funkcję MoveNext jest wysyłana do strumienia wyjściowego.
Dane wyjściowe można pominąć, wpisując je do [void]
lub przesyłając potokowo do wartości Out-Null.
$input.MoveNext() | Out-Null
[void]$input.MoveNext()
Reset
Metoda Reset ustawia moduł wyliczający na pozycję początkową, która jest przed pierwszym elementem w kolekcji.
Current
Właściwość Current pobiera element w kolekcji lub potoku w bieżącej pozycji modułu wyliczającego.
Właściwość Current nadal zwraca tę samą właściwość do momentu wywołania metody MoveNext .
Przykłady
Przykład 1: Używanie zmiennej $input
W poniższym przykładzie uzyskanie dostępu do zmiennej $input
usuwa zmienną do następnego uruchomienia bloku procesu. Użycie metody Reset resetuje zmienną $input
do bieżącej wartości potoku.
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 automatycznie przechodzi do zmiennej $input
, nawet jeśli nie uzyskujesz do niej dostępu.
$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
Przykład 2: Używanie $input poza blokiem procesu
Poza blokiem procesu zmienna $input
reprezentuje wszystkie wartości przesyłane potokiem do funkcji.
- Uzyskiwanie dostępu do zmiennej
$input
usuwa wszystkie wartości. - Metoda Reset resetuje całą kolekcję.
- Właściwość Current nigdy nie jest wypełniana.
- Metoda MoveNext zwraca wartość false, ponieważ nie można zaawansowanej kolekcji.
- Wywołanie metody MoveNext czyści zmienną
$input
.
- Wywołanie metody MoveNext czyści zmienną
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:
Przykład 3: Używanie $input. Bieżąca właściwość
Za pomocą właściwości Current można uzyskać dostęp do bieżącej wartości potoku wiele razy bez użycia metody Reset . Blok procesu nie wywołuje automatycznie metody MoveNext .
Właściwość Current nigdy nie zostanie wypełniona, chyba że jawnie wywołasz metodę MoveNext. Dostęp do właściwości Current można uzyskać wiele razy w bloku procesu bez wyczyszczenia jej wartości.
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
Przykład 4: Używanie zmiennej $foreach
W przeciwieństwie do zmiennej zmienna $input
$foreach
zawsze reprezentuje wszystkie elementy w kolekcji, gdy jest uzyskiwany bezpośredni dostęp. Użyj właściwości Current , aby uzyskać dostęp do bieżącego elementu kolekcji, oraz metod Reset i MoveNext , aby zmienić jego wartość.
Uwaga
Każda iteracja foreach
pętli automatycznie wywoła metodę MoveNext .
Następująca pętla jest wykonywana tylko dwa razy. W drugiej iteracji kolekcja jest przenoszona do trzeciego elementu przed ukończeniem iteracji. Po drugiej iteracji nie ma teraz żadnych wartości do iteracji, a pętla kończy się.
Właściwość MoveNext nie ma wpływu na zmienną wybraną do iteracji po kolekcji ($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 has not changed: $num"
}
}
Iteration: 0
Num: one
Current: one
Iteration: 1
Num: two
Current: two
Before MoveNext (Current): two
After MoveNext (Current): three
Num has not changed: two
Użycie metody Reset resetuje bieżący element w kolekcji. Poniższy przykład wykonuje pętle przez dwa pierwsze elementy dwa razy , ponieważ wywoływana jest metoda Reset . Po dwóch pierwszych pętlach instrukcja kończy się niepowodzeniem, a pętla wykonuje iterację po wszystkich trzech elementach if
normalnie.
Ważne
Może to spowodować nieskończoną pętlę.
$stopLoop = 0
foreach ($num in ("one","two", "three"))
{
("`t" * $stopLoop) + "Current: $($foreach.Current)"
if ($num -eq "two" -and $stopLoop -lt 2)
{
$foreach.Reset() | Out-Null
("`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
Przykład 5. Używanie zmiennej $switch
Zmienna $switch
ma dokładnie te same reguły co zmienna $foreach
.
W poniższym przykładzie przedstawiono wszystkie koncepcje modułu wyliczającego.
Uwaga
Zwróć uwagę, że przypadek NotEvaluated nigdy nie jest wykonywany, mimo że nie break
ma instrukcji po metodzie 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
Zobacz też
about_Functions_Advanced_Methods
about_Functions_Advanced_Parameters
about_Functions_OutputTypeAttribute