Udostępnij za pośrednictwem


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 $ErrorErrorAction 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 Beginelementu , Processlub End 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 $MyInvocationPSScriptRoot 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 $nullelementu , 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-PSSessionOptionApplicationArguments 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, $foreachi $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 .
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

about_Functions_Advanced

about_Functions_Advanced_Methods

about_Functions_Advanced_Parameters

about_Functions_OutputTypeAttribute

about_Functions_CmdletBindingAttribute

about_Hash_Tables

about_Preference_Variables

about_Splatting

about_Variables