about_Variables

Krótki opis

Opisuje sposób przechowywania wartości, które mogą być używane w programie PowerShell.

Długi opis

Wszystkie typy wartości można przechowywać w zmiennych programu PowerShell. Na przykład przechowuj wyniki poleceń i przechowuj elementy, które są używane w poleceniach i wyrażeniach, takich jak nazwy, ścieżki, ustawienia i wartości.

Zmienna to jednostka pamięci, w której są przechowywane wartości. W programie PowerShell zmienne są reprezentowane przez ciągi tekstowe rozpoczynające się od znaku dolara ($), takiego jak $a, $processlub $my_var.

Nazwy zmiennych nie są uwzględniane wielkości liter i mogą zawierać spacje i znaki specjalne. Jednak nazwy zmiennych, które zawierają znaki specjalne i spacje, są trudne do użycia i należy unikać. Aby uzyskać więcej informacji, zobacz Nazwy zmiennych, które zawierają znaki specjalne.

W programie PowerShell istnieje kilka różnych typów zmiennych.

  • Zmienne utworzone przez użytkownika: zmienne utworzone przez użytkownika są tworzone i obsługiwane przez użytkownika. Domyślnie zmienne tworzone w wierszu polecenia programu PowerShell istnieją tylko wtedy, gdy okno programu PowerShell jest otwarte. Po zamknięciu okien programu PowerShell zmienne zostaną usunięte. Aby zapisać zmienną, dodaj ją do profilu programu PowerShell. Zmienne można również tworzyć w skryptach za pomocą zakresu globalnego, skryptu lub lokalnego.

  • Zmienne automatyczne: zmienne automatyczne przechowują stan programu PowerShell. Te zmienne są tworzone przez program PowerShell, a program PowerShell zmienia ich wartości zgodnie z potrzebami, aby zachować ich dokładność. Użytkownicy nie mogą zmieniać wartości tych zmiennych. Na przykład zmienna $PSHOME przechowuje ścieżkę do katalogu instalacyjnego programu PowerShell.

    Aby uzyskać więcej informacji, listę i opis zmiennych automatycznych, zobacz about_Automatic_Variables.

  • Zmienne preferencji: zmienne preferencji przechowują preferencje użytkownika dla programu PowerShell. Te zmienne są tworzone przez program PowerShell i są wypełniane wartościami domyślnymi. Użytkownicy mogą zmieniać wartości tych zmiennych. Na przykład zmienna $MaximumHistoryCount określa maksymalną liczbę wpisów w historii sesji.

    Aby uzyskać więcej informacji, listę i opis zmiennych preferencji, zobacz about_Preference_Variables.

Praca ze zmiennymi

Aby utworzyć nową zmienną, użyj instrukcji przypisania, aby przypisać wartość do zmiennej. Nie musisz deklarować zmiennej przed jej użyciem. Wartość domyślna wszystkich zmiennych to $null.

Aby uzyskać listę wszystkich zmiennych w sesji programu PowerShell, wpisz Get-Variable. Nazwy zmiennych są wyświetlane bez poprzedniego znaku dolara ($), który jest używany do odwoływania się do zmiennych.

Na przykład:

$MyVariable = 1, 2, 3

$Path = "C:\Windows\System32"

Zmienne są przydatne do przechowywania wyników poleceń.

Na przykład:

$Processes = Get-Process

$Today = (Get-Date).DateTime

Aby wyświetlić wartość zmiennej, wpisz nazwę zmiennej poprzedzoną znakiem dolara ($).

Na przykład:

$MyVariable
1
2
3
$Today
Tuesday, September 3, 2019 09:46:46

Aby zmienić wartość zmiennej, przypisz nową wartość do zmiennej.

W poniższych przykładach wyświetlana jest wartość $MyVariable zmiennej, zmienia wartość zmiennej, a następnie wyświetla nową wartość.

$MyVariable = 1, 2, 3
$MyVariable
1
2
3
$MyVariable = "The green cat."
$MyVariable
The green cat.

Aby usunąć wartość zmiennej, użyj Clear-Variable polecenia cmdlet lub zmień wartość na $null.

Clear-Variable -Name MyVariable
$MyVariable = $null

Aby usunąć zmienną, użyj polecenia Remove-Variable lub Remove-Item.

Remove-Variable -Name MyVariable
Remove-Item -Path Variable:\MyVariable

Istnieje również możliwość przypisania wartości do wielu zmiennych za pomocą jednej instrukcji. Następujące przykłady umożliwiają przypisanie tej samej wartości do wielu zmiennych:

$a = $b = $c = 0

W następnym przykładzie przypisano wiele wartości do wielu zmiennych.

$i,$j,$k = 10, "red", $true    # $i is 10, $j is "red", $k is True
$i,$j = 10, "red", $true       # $i is 10, $j is [object[]], Length 2

Aby uzyskać bardziej szczegółowe informacje, zobacz sekcję Przypisywanie wielu zmiennych about_Assignment_Operators.

Typy zmiennych

W zmiennej można przechowywać dowolny typ obiektu, w tym liczby całkowite, ciągi, tablice i tabele skrótów. Obiekty reprezentujące procesy, usługi, dzienniki zdarzeń i komputery.

Zmienne programu PowerShell są luźno typizowane, co oznacza, że nie są ograniczone do określonego typu obiektu. Pojedyncza zmienna może nawet zawierać kolekcję lub tablicę różnych typów obiektów w tym samym czasie.

Typ danych zmiennej jest określany przez typy platformy .NET wartości zmiennej. Aby wyświetlić typ obiektu zmiennej, użyj polecenia Get-Member.

Na przykład:

$a = 12                         # System.Int32
$a = "Word"                     # System.String
$a = 12, "Word"                 # array of System.Int32, System.String
$a = Get-ChildItem C:\Windows   # FileInfo and DirectoryInfo types

Można użyć atrybutu typu i notacji rzutowania, aby upewnić się, że zmienna może zawierać tylko określone typy obiektów lub obiekty, które można przekonwertować na ten typ. Jeśli spróbujesz przypisać wartość innego typu, program PowerShell spróbuje przekonwertować wartość na jego typ. Jeśli nie można przekonwertować typu, instrukcja przypisania zakończy się niepowodzeniem.

Aby użyć notacji rzutowania, wprowadź nazwę typu ujętą w nawiasy przed nazwą zmiennej (po lewej stronie instrukcji przypisania). Poniższy przykład tworzy zmienną $number , która może zawierać tylko liczby całkowite, zmienną $words , która może zawierać tylko ciągi, oraz zmienną $dates , która może zawierać tylko obiekty DateTime .

[int]$number = 8
$number = "12345"  # The string is converted to an integer.
$number = "Hello"
Cannot convert value "Hello" to type "System.Int32". Error: "Input string
was not in a correct format."
At line:1 char:1
+ $number = "Hello"
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo          : MetadataError: (:) [],
    ArgumentTransformationMetadataException
+ FullyQualifiedErrorId : RuntimeException
[string]$words = "Hello"
$words = 2       # The integer is converted to a string.
$words += 10     # The plus (+) sign concatenates the strings.
$words
210
[datetime] $dates = "09/12/91"  # The string is converted to a DateTime object.
$dates
Thursday, September 12, 1991 00:00:00
$dates = 10    # The integer is converted to a DateTime object.
$dates
Monday, January 1, 0001 00:00:00

Używanie zmiennych w poleceniach i wyrażeniach

Aby użyć zmiennej w poleceniu lub wyrażeniu, wpisz nazwę zmiennej poprzedzoną znakiem dolara ($).

Jeśli nazwa zmiennej i znak dolara nie są ujęte w cudzysłów lub jeśli są one ujęte w znaki podwójnego cudzysłowu ("), wartość zmiennej jest używana w poleceniu lub wyrażeniu.

Jeśli nazwa zmiennej i znak dolara są ujęte w znaki pojedynczego cudzysłowu ('), nazwa zmiennej jest używana w wyrażeniu.

Aby uzyskać więcej informacji na temat używania cudzysłowów w programie PowerShell, zobacz about_Quoting_Rules.

W tym przykładzie jest pobierana wartość $PROFILE zmiennej, która jest ścieżką do pliku profilu użytkownika programu PowerShell w konsoli programu PowerShell.

$PROFILE
C:\Users\User01\Documents\PowerShell\Microsoft.PowerShell_profile.ps1

W tym przykładzie pokazano dwa polecenia, które mogą otwierać profil programu PowerShell w notepad.exe. W przykładzie ze znakami podwójnego cudzysłowu (") użyto wartości zmiennej.

notepad $PROFILE

notepad "$PROFILE"

W poniższych przykładach użyto znaków pojedynczego cudzysłowu ('), które traktują zmienną jako tekst literału.

'$PROFILE'
$PROFILE
'Use the $PROFILE variable.'
Use the $PROFILE variable.

Nazwy zmiennych, które zawierają znaki specjalne

Nazwy zmiennych zaczynają się od znaku dolara ($) i mogą zawierać znaki alfanumeryczne i znaki specjalne. Długość nazwy zmiennej jest ograniczona tylko przez dostępną pamięć.

Najlepszym rozwiązaniem jest to, że nazwy zmiennych zawierają tylko znaki alfanumeryczne i znak podkreślenia (_). Nazwy zmiennych, które zawierają spacje i inne znaki specjalne, są trudne do użycia i należy unikać.

Nazwy zmiennych alfanumerycznych mogą zawierać następujące znaki:

  • Znaki Unicode z następujących kategorii: Lu, Ll, Lt, Lm, Lo lub Nd.
  • Znak podkreślenia (_).
  • Znak zapytania (?).

Poniższa lista zawiera opisy kategorii Unicode. Aby uzyskać więcej informacji, zobacz UnicodeCategory.

  • Lu — wielkie literyLetter
  • Ll — małe literyLetter
  • Lt — TitlecaseLetter
  • Lm — ModifierLetter
  • Lo - OtherLetter
  • Nd — Liczba dziesiętnaDigitNumber

Aby utworzyć lub wyświetlić nazwę zmiennej, która zawiera spacje lub znaki specjalne, należy ująć nazwę zmiennej za pomocą nawiasów klamrowych ({}). Nawiasy klamrowe umożliwiają programowi PowerShell interpretowanie znaków nazwy zmiennej jako literałów.

Nazwy zmiennych znaków specjalnych mogą zawierać następujące znaki:

  • Dowolny znak Unicode z następującymi wyjątkami:
    • Zamykający nawias klamrowy (}) (U+007D).
    • Znak backtick (`) (U+0060). Backtick służy do ucieczki znaków Unicode, więc są traktowane jako literały.

Program PowerShell ma zmienne zarezerwowane, takie jak $$, $?, $^i $_ zawierające znaki alfanumeryczne i specjalne. Aby uzyskać więcej informacji, zobacz about_Automatic_Variables.

Na przykład następujące polecenie tworzy zmienną o nazwie save-items. Potrzebne są nawiasy klamrowe ({}), ponieważ nazwa zmiennej zawiera znak specjalny łącznika (-).

${save-items} = "a", "b", "c"
${save-items}
a
b
c

Następujące polecenie pobiera elementy podrzędne w katalogu reprezentowanym przez zmienną środowiskową ProgramFiles(x86) .

Get-ChildItem ${env:ProgramFiles(x86)}

Aby odwołać się do nazwy zmiennej zawierającej nawiasy klamrowe, należy ująć nazwę zmiennej w nawiasy klamrowe i użyć znaku backtick, aby uniknąć nawiasów klamrowych. Aby na przykład utworzyć zmienną o nazwie this{value}is type:

${this`{value`}is} = "This variable name uses braces and backticks."
${this`{value`}is}
This variable name uses braces and backticks.

Zmienne i zakres

Domyślnie zmienne są dostępne tylko w zakresie, w którym są tworzone.

Na przykład zmienna utworzona w funkcji jest dostępna tylko w ramach funkcji. Zmienna utworzona w skry skrycie jest dostępna tylko w ramach skryptu. Jeśli skrypt jest dot-source, zmienna zostanie dodana do bieżącego zakresu. Aby uzyskać więcej informacji, zobacz about_Scopes.

Możesz użyć modyfikatora zakresu, aby zmienić domyślny zakres zmiennej. Następujące wyrażenie tworzy zmienną o nazwie Computers. Zmienna ma zakres globalny, nawet jeśli jest tworzona w skrycie lub funkcji.

$Global:Computers = "Server01"

W przypadku dowolnego skryptu lub polecenia, które wykonuje poza sesją, musisz Using modyfikator zakresu osadzić wartości zmiennych z zakresu sesji wywołującej, aby kod poza sesją mógł uzyskać do nich dostęp.

Aby uzyskać więcej informacji, zobacz about_Remote_Variables.

Zapisywanie zmiennych

Tworzone zmienne są dostępne tylko w sesji, w której je tworzysz. Zostaną one utracone po zamknięciu sesji.

Aby utworzyć zmienną w każdej uruchomionej sesji programu PowerShell, dodaj zmienną do profilu programu PowerShell.

Aby na przykład zmienić wartość zmiennej $VerbosePreference w każdej sesji programu PowerShell, dodaj następujące polecenie do profilu programu PowerShell.

$VerbosePreference = "Continue"

To polecenie można dodać do profilu programu PowerShell, otwierając $PROFILE plik w edytorze tekstów, takim jak notepad.exe. Aby uzyskać więcej informacji na temat profilów programu PowerShell, zobacz about_Profiles.

Dysk Zmienna:

Dostawca zmiennych programu PowerShell tworzy Variable: dysk, który wygląda i działa jak dysk systemu plików, ale zawiera zmienne w sesji i ich wartości.

Aby zmienić Variable: dysk, użyj następującego polecenia:

Set-Location Variable:

Aby wyświetlić listę elementów i zmiennych na Variable: dysku, użyj Get-Item poleceń cmdlet lub Get-ChildItem .

Get-ChildItem Variable:

Aby uzyskać wartość określonej zmiennej, użyj notacji systemu plików, aby określić nazwę dysku i nazwę zmiennej. Aby na przykład uzyskać zmienną automatyczną $PSCulture , użyj następującego polecenia.

Get-Item Variable:\PSCulture
Name                           Value
----                           -----
PSCulture                      en-US

Aby wyświetlić więcej informacji na temat Variable: dysku i dostawcy zmiennych programu PowerShell, wpisz:

Get-Help Variable

Składnia zmiennej ze ścieżkami dostawcy

Ścieżkę dostawcy można prefiksować za pomocą znaku dolara ($) i uzyskać dostęp do zawartości dowolnego dostawcy, który implementuje interfejs IContentCmdletProvider .

Następujący wbudowany dostawcy programu PowerShell obsługują tę notację:

Polecenia cmdlet zmiennych

Program PowerShell zawiera zestaw poleceń cmdlet przeznaczonych do zarządzania zmiennymi.

Aby wyświetlić listę poleceń cmdlet, wpisz:

Get-Command -Noun Variable

Aby uzyskać pomoc dotyczącą określonego polecenia cmdlet, wpisz:

Get-Help <cmdlet-name>
Nazwa polecenia cmdlet opis
Clear-Variable Usuwa wartość zmiennej.
Get-Variable Pobiera zmienne w bieżącej konsoli.
New-Variable Tworzy nową zmienną.
Remove-Variable Usuwa zmienną i jej wartość.
Set-Variable Zmienia wartość zmiennej.

Zobacz też