about_Automatic_Variables
Krótki opis
Opisuje zmienne, które przechowują informacje o stanie dla programu PowerShell i są tworzone i obsługiwane przez program PowerShell.
Koncepcyjnie większość tych zmiennych jest uważana za tylko do odczytu. Mimo że można je zapisać, w celu zapewnienia zgodności z poprzednimi wersjami nie powinny być zapisywane.
Oto lista zmiennych automatycznych w programie 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
Długi opis
$$
Zawiera ostatni token w ostatnim wierszu odebrany przez sesję.
$?
Zawiera stan wykonania ostatniego polecenia. Zawiera wartość True , jeśli ostatnie polecenie powiodło się i False , jeśli nie powiodło się.
W przypadku poleceń cmdlet i zaawansowanych funkcji, które są uruchamiane na wielu etapach w potoku, na przykład w blokach process
i end
, wywoływanie this.WriteError()
lub $PSCmdlet.WriteError()
odpowiednio w dowolnym punkcie ustawia $?
wartość False, tak jak i this.ThrowTerminatingError()
$PSCmdlet.ThrowTerminatingError()
.
Polecenie Write-Error
cmdlet zawsze ustawia $?
wartość False natychmiast po jego wykonaniu, ale nie ustawi $?
wartości False dla funkcji wywołującej ją:
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
W tym ostatnim celu $PSCmdlet.WriteError()
należy zamiast tego użyć.
W przypadku poleceń natywnych (wykonywalnych) $?
ustawiono wartość True , gdy $LASTEXITCODE
ma wartość 0, i ustawiono wartość False , jeśli $LASTEXITCODE
jest dowolną inną wartością.
Uwaga
Do programu PowerShell 7 zawijanie instrukcji w nawiasach (...)
, składnia $(...)
subexpressionu lub wyrażenie @(...)
tablicy zawsze resetuje $?
wartość True. Na przykład (Write-Error)
jest wyświetlana $?
wartość True. To zachowanie zmieniło się w programie PowerShell 7, dzięki czemu $?
zawsze odzwierciedla rzeczywisty sukces ostatniego uruchomienia polecenia w tych wyrażeniach.
$^
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 w potoku.
Aby uzyskać więcej informacji, zobacz about_PSItem.
$args
Zawiera tablicę wartości dla niezdecydowanych parametrów przekazywanych do funkcji, skryptu lub bloku skryptu. Podczas tworzenia funkcji można zadeklarować parametry za pomocą słowa kluczowego param
lub dodając rozdzielaną przecinkami listę parametrów w nawiasach po nazwie funkcji.
W przypadku akcji zmienna $args
zawiera obiekty reprezentujące argumenty zdarzenia 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 podczas eksportowania nazw przystawki do pliku konsoli za pomocą Export-Console
polecenia cmdlet.
Gdy używasz Export-Console
polecenia cmdlet bez parametrów, automatycznie aktualizuje plik konsoli, który był ostatnio używany w sesji. Tej zmiennej automatycznej można użyć do określenia pliku do zaktualizowania.
$EnabledExperimentalFeatures
Zawiera listę nazw funkcji eksperymentalnych, które są włączone.
$Error
Zawiera tablicę obiektów błędów, które reprezentują najnowsze błędy. Ostatni 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 , który reprezentuje przetwarzane zdarzenie. Ta zmienna jest wypełniana tylko w Action
bloku polecenia rejestracji zdarzeń, na przykład Register-ObjectEvent
. Wartość tej zmiennej jest tym samym obiektem, który Get-Event
zwraca polecenie cmdlet. Możesz użyć właściwości zmiennej Event
, takiej jak $Event.TimeGenerated
, w bloku skryptu Action
.
$EventArgs
Zawiera obiekt reprezentujący pierwszy argument zdarzenia, który pochodzi z eventArgs zdarzenia, które jest przetwarzane. 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, które jest przetwarzane. 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. W systemie Windows ta zmienna używa wartości zmiennej środowiskowej "$env:USERPROFILE"
systemu Windows, zazwyczaj C:\Users\<UserName>
. W systemie Unix ta zmienna używa wartości zmiennej środowiskowej HOME
.
Ważne
System Windows może przekierować lokalizację profilu użytkownika. Oznacza to, że $HOME
może nie mieć takiej samej wartości jak "$env:HOMEDRIVE$env:HOMEPATH"
.
$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.BackGroundColor = "Red"
.
Uwaga
Ustawienia kolorów w programie $Host.PrivateData
zostały zastąpione przez zmienną preferencji $PSStyle
. Aby uzyskać więcej informacji, zobacz about_ANSI_Terminals.
$input
Zawiera moduł wyliczający, który wylicza wszystkie dane wejściowe przekazywane do funkcji.
Zmienna $input
jest dostępna tylko dla funkcji, bloków skryptów (które są funkcjami nienazwanych) i plików skryptów (które są zapisanymi blokami skryptów).
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 bieżący obiekt w potoku.end
W bloku zmienna$input
wylicza kolekcję wszystkich danych wejściowych funkcji.Uwaga
Nie można użyć zmiennej
$input
wewnątrzprocess
bloku iend
bloku w tej samej funkcji lub bloku skryptu.
Ponieważ $input
jest modułem wyliczającym, uzyskanie dostępu do dowolnej z jego właściwości powoduje $input
, że nie jest już dostępny. Możesz przechowywać $input
w innej zmiennej w celu ponownego $input
użycia właściwości.
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).
Zmienna $input
jest również dostępna dla polecenia określonego -Command
przez parametr pwsh
po wywołaniu z wiersza polecenia. Poniższy przykład jest uruchamiany z poziomu powłoki poleceń systemu Windows.
echo Hello | pwsh -Command """$input World!"""
$IsCoreCLR
Zawiera $True
informacje o tym, czy bieżąca sesja jest uruchomiona w środowisku uruchomieniowym platformy .NET Core (CoreCLR). W przeciwnym razie zawiera wartość $False
.
$IsLinux
Zawiera $True
informacje o tym, czy bieżąca sesja jest uruchomiona w systemie operacyjnym Linux.
W przeciwnym razie zawiera wartość $False
.
$IsMacOS
Zawiera $True
informacje o tym, czy bieżąca sesja jest uruchomiona w systemie operacyjnym MacOS.
W przeciwnym razie zawiera wartość $False
.
$IsWindows
Zawiera $TRUE
informacje o tym, czy bieżąca sesja jest uruchomiona w systemie operacyjnym Windows. W przeciwnym razie zawiera wartość $FALSE
.
$LASTEXITCODE
Zawiera kod zakończenia ostatniego natywnego programu lub skryptu programu PowerShell, który został uruchomiony.
W przypadku skryptów programu PowerShell wartość $LASTEXITCODE
zależy od sposobu wywoływanego skryptu i tego, czy exit
słowo kluczowe zostało użyte:
Gdy skrypt używa słowa kluczowego
exit
:$LASTEXITCODE
parametr jest ustawiony na wartość określoną przezexit
słowo kluczowe. Aby uzyskać więcej informacji, zobacz about_Language_Keywords.Gdy skrypt jest wywoływany bezpośrednio, na przykład
./Test.ps1
, lub z operatorem wywołania (&
), na przykład& ./Test.ps1
:Wartość nie zostanie zmieniona
$LASTEXITCODE
, chyba że:- Skrypt wywołuje inny skrypt, który używa słowa kluczowego
exit
- Skrypt wywołuje polecenie natywne
- Skrypt używa słowa kluczowego
exit
- Skrypt wywołuje inny skrypt, który używa słowa kluczowego
Gdy skrypt jest wywoływany
pwsh
przy użyciu parametru Plik ,$LASTEXITCODE
jest ustawiony na:1
jeśli skrypt został zakończony z powodu wyjątku- Wartość określona
exit
przez słowo kluczowe , jeśli jest używana w skry skrycie 0
jeśli skrypt został ukończony pomyślnie
Gdy skrypt jest wywoływany
pwsh
przy użyciu parametru Command ,$LASTEXITCODE
jest ustawiony na:1
jeśli skrypt został zakończony z powodu wyjątku lub jeśli wynik ostatniego polecenia jest ustawiony$?
na$false
0
jeśli skrypt został ukończony pomyślnie i wynik ostatniego polecenia ustawionego$?
na$true
Aby uzyskać więcej informacji na temat parametrów File and Command , zobacz about_Pwsh.
$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.
Zmienna $Matches
działa również w instrukcji switch
z parametrem -Regex
. Jest wypełniany w taki sam sposób jak -match
operatory i -notmatch
. Aby uzyskać więcej informacji na temat instrukcji switch
, zobacz about_Switch.
Uwaga
Gdy $Matches
jest wypełniana w sesji, zachowuje dopasowaną wartość, dopóki nie zostanie zastąpiona przez inne dopasowanie. Jeśli -match
zostanie użyty ponownie i nie zostanie znalezione dopasowanie, nie zostanie ono zresetowane $Matches
do elementu $null
. Wcześniej dopasowana wartość jest przechowywana do $Matches
momentu znalezienia innego dopasowania.
$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. Możesz użyć informacji w obiekcie System.Management.Automation.InvocationInfo zwracanym $MyInvocation
w bieżącym skrypcie, takim jak nazwa funkcji ($MyInvocation.MyCommand.Name
), aby zidentyfikować bieżące polecenie.
Jest to przydatne do znajdowania nazwy bieżącego skryptu.
Począwszy od programu PowerShell 3.0, MyInvocation
ma następujące nowe właściwości.
- PSScriptRoot — zawiera pełną ścieżkę do skryptu, który wywołał bieżące polecenie. Wartość tej właściwości jest wypełniana tylko wtedy, gdy obiekt wywołujący jest skryptem.
- PSCommandPath — zawiera pełną ścieżkę i nazwę pliku skryptu, który wywołał bieżące polecenie. Wartość tej właściwości jest wypełniana tylko wtedy, gdy obiekt wywołujący jest skryptem.
$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ą lub symbolem zastępczym, dzięki czemu można użyć $null
do reprezentowania pustej wartości w kolekcji 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
Począwszy od programu PowerShell 7, $PSCulture
odzwierciedla kulturę bieżącej przestrzeni uruchomieniowej programu PowerShell (sesja). Jeśli kultura zostanie zmieniona w przestrzeni uruchomieniowej programu PowerShell, zostanie zaktualizowana $PSCulture
wartość dla tej przestrzeni uruchomieniowej.
Kultura określa format wyświetlania elementów, takich jak liczby, waluta i daty, i jest przechowywany w obiekcie System.Globalization.CultureInfo . Służy Get-Culture
do wyświetlania kultury komputera. $PSCulture
zawiera wartość właściwości Name .
$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ć do określenia, 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.
$PSEdition
Zawiera tę samą wartość w elemecie $PSVersionTable.PSEdition
. Ta zmienna jest dostępna do użycia w plikach manifestu modułu, natomiast $PSVersionTable
nie jest.
$PSHOME
Zawiera pełną ścieżkę katalogu instalacyjnego dla programu PowerShell, zazwyczaj C:\Program Files\PowerShell\7
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 słowa Pomoc:
Select-String -Pattern Help -Path $PSHOME\en-US\*.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 w potoku.
Aby uzyskać więcej informacji, zobacz about_PSItem.
$PSScriptRoot
Zawiera pełną ścieżkę katalogu nadrzędnego skryptu wykonawczego.
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 skonfigurowanej 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ść Elementu System.Globalization.CultureInfo.CurrentUICulture.Name właściwość 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:
- PSVersion — numer wersji programu PowerShell
- PsEdition Ta właściwość ma wartość "Desktop" dla programu PowerShell 4 i poniżej, a także program PowerShell 5.1 w pełnych wersjach systemu Windows. Ta właściwość ma wartość
Core
dla programu PowerShell 6 i nowszego, a także Windows PowerShell 5.1 w wersjach o mniejszym zasięgu, takich jak Windows Nano Server lub Windows IoT. - GitCommitId — identyfikator zatwierdzenia plików źródłowych w usłudze GitHub
- System operacyjny — opis systemu operacyjnego, na którym działa program PowerShell.
- Platforma — platforma , na którą działa system operacyjny. Wartość w systemach Linux i macOS to Unix. Zobacz
$IsMacOs
i$IsLinux
. - PSCompatibleVersions — wersje programu PowerShell zgodne z bieżącą wersją
- PSRemotingProtocolVersion — wersja protokołu zdalnego zarządzania 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żącej lokalizacji katalogu dla bieżącej przestrzeni uruchomieniowej programu PowerShell.
Uwaga
Program PowerShell obsługuje wiele obszarów runspace na proces. Każdy obszar runspace ma swój własny bieżący katalog. Nie jest to samo co bieżący katalog procesu: [System.Environment]::CurrentDirectory
.
$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 najnowszego 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 bieżącej pętli. Aby uzyskać więcej informacji, zobacz Using Enumerators (Używanie modułów wyliczania).
$this
Zmienna $this
jest używana w blokach skryptów, które rozszerzają klasy, aby odwoływać się do wystąpienia samej klasy.
Rozszerzalny system typów programu PowerShell (ETS) umożliwia dodawanie właściwości do klas przy użyciu bloków skryptów. W bloku skryptu definiującym właściwość skryptu lub metodę $this
skryptu zmienna odwołuje się do wystąpienia obiektu klasy, która jest rozszerzana. Na przykład program PowerShell używa systemu ETS do dodawania właściwości BaseName do klasy 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};}
Aby uzyskać więcej informacji, zobacz about_Types.ps1xml.
W klasie programu PowerShell zmienna $this
odwołuje się do obiektu wystąpienia samej klasy, umożliwiając dostęp do właściwości i metod zdefiniowanych w klasie. Aby uzyskać więcej informacji, zobacz about_Classes.
Zmienna $this
jest również używana przez klasy zdarzeń platformy .NET, które przyjmują bloki skryptów jako delegatów dla programu obsługi zdarzeń. W tym scenariuszu $this
reprezentuje obiekt pochodzący z zdarzenia, znany jako nadawca zdarzeń.
$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 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 wyliczeniami nie jest uznawane za najlepsze rozwiązanie.
W pętlach słowa kluczowe sterowania przepływem przerywają i powinny być preferowane.
W ramach funkcji, które akceptują dane wejściowe potoku, najlepszym rozwiązaniem jest użycie parametrów z atrybutami ValueFromPipeline lub ValueFromPipelineByPropertyName.
Aby uzyskać więcej informacji, zobacz about_Functions_Advanced_Parameters.
Movenext
Metoda MoveNext rozwija moduł wyliczający do następnego elementu kolekcji. Funkcja MoveNext zwraca wartość True
, jeśli moduł wyliczający został pomyślnie zaawansowany, 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ąć przez wpisanie go do [void]
lub potokowanie do wartości Out-Null.
$input.MoveNext() | Out-Null
[void]$input.MoveNext()
Reset
Metoda Reset ustawia moduł wyliczający na jego początkowe położenie, czyli 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ść, dopóki właściwość MoveNext nie zostanie wywołana.
Przykłady
Przykład 1. Używanie zmiennej $input
W poniższym przykładzie uzyskiwanie dostępu do zmiennej $input
usuwa zmienną do następnego uruchomienia bloku procesu. Reset Użycie metody 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 rozwija zmienną $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 $input
procesu zmienna 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ż kolekcja nie może być zaawansowana.
- Wywołanie metody MoveNext usuwa zmienną
$input
.
- Wywołanie metody MoveNext usuwa 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.Current Właściwość
Za pomocą właściwości bieżąca Current wartość potoku może być uzyskiwana wiele razy bez użycia Reset metody . Blok procesu nie wywołuje automatycznie metody MoveNext .
Właściwość Current nigdy nie jest wypełniana, chyba że jawnie wywołasz metodę MoveNext. Dostęp Current do właściwości można uzyskać wiele razy w bloku procesu bez wyczyszczenia jego 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 $input
zmienna $foreach
zawsze reprezentuje wszystkie elementy w kolekcji po korzystaniu bezpośrednio. Użyj właściwości , Current aby uzyskać dostęp do bieżącego elementu kolekcji, oraz Reset metod MoveNext , aby zmienić jego wartość.
Uwaga
Każda iteracja foreach
pętli automatycznie wywołuje metodę MoveNext .
Poniższa pętla jest wykonywana tylko dwa razy. W drugiej iteracji kolekcja zostanie przeniesiona do trzeciego elementu przed ukończeniem iteracji. Po drugiej iteracji nie ma teraz więcej wartości do iteracji, a pętla kończy się.
Właściwość MoveNext nie ma wpływu na zmienną wybraną do iterowania przez kolekcję ($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 Użycie metody resetuje bieżący element w kolekcji. Poniższy przykład dwa razy przechodzi przez pierwsze dwa elementy, ponieważ metoda jest wywoływana Reset . Po dwóch pierwszych pętlach instrukcja kończy się niepowodzeniem, a if
pętla wykonuje iterację przez wszystkie trzy elementy 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()
("`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 pojęcia modułu wyliczającego.
Uwaga
Zwróć uwagę, że wielkość liter NotEvaluated nigdy nie jest wykonywana, 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