about_Variables

Краткое описание

Описывает, как переменные хранят значения, которые можно использовать в PowerShell.

Подробное описание

Все типы значений можно хранить в переменных PowerShell. Например, сохраните результаты команд и сохраните элементы, используемые в командах и выражениях, таких как имена, пути, параметры и значения.

Переменная — это единица памяти, в которой хранятся значения. В PowerShell переменные представлены текстовыми строками, начинающимися с знака доллара ($), например $a, $processили $my_var.

Имена переменных не учитывает регистр и могут включать пробелы и специальные символы. Но имена переменных, включающие специальные символы и пробелы, трудно использовать и следует избегать. Дополнительные сведения см. в разделе "Имена переменных", включающих специальные символы.

В PowerShell существует несколько различных типов переменных.

  • Созданные пользователем переменные: созданные пользователем переменные создаются и поддерживаются пользователем. По умолчанию переменные, созданные в командной строке PowerShell, существуют только во время открытия окна PowerShell. При закрытии окон PowerShell переменные удаляются. Чтобы сохранить переменную, добавьте ее в профиль PowerShell. Можно также создавать переменные в скриптах с глобальными, скриптами или локальными область.

  • Автоматические переменные: автоматические переменные хранят состояние PowerShell. Эти переменные создаются PowerShell, и PowerShell изменяет их значения в соответствии с требованиями, чтобы обеспечить их точность. Пользователи не могут изменить значение этих переменных. Например, $PSHOME переменная сохраняет путь к каталогу установки PowerShell.

    Дополнительные сведения, список и описание автоматических переменных см. в about_Automatic_Variables.

  • Переменные предпочтения: переменные предпочтения хранят пользовательские настройки для PowerShell. Эти переменные создаются PowerShell и заполняются значениями по умолчанию. Пользователи могут изменять значения этих переменных. Например, $MaximumHistoryCount переменная определяет максимальное количество записей в журнале сеансов.

    Дополнительные сведения, список и описание переменных предпочтения см . в about_Preference_Variables.

Работа с переменными

Чтобы создать новую переменную, используйте инструкцию назначения для назначения значения переменной. Перед его использованием не нужно объявлять переменную. Значение по умолчанию для всех переменных $null.

Чтобы получить список всех переменных в сеансе PowerShell, введите Get-Variable. Имена переменных отображаются без предыдущего знака доллара ($), используемого для ссылки на переменные.

Например:

$MyVariable = 1, 2, 3

$Path = "C:\Windows\System32"

Переменные полезны для хранения результатов команд.

Например:

$Processes = Get-Process

$Today = (Get-Date).DateTime

Чтобы отобразить значение переменной, введите имя переменной, предшествующее знаку доллара ($).

Например:

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

Чтобы изменить значение переменной, назначьте новое значение переменной.

В следующих примерах отображается значение переменной $MyVariable , изменяется значение переменной, а затем отображается новое значение.

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

Чтобы удалить значение переменной, используйте Clear-Variable командлет или измените значение $nullна .

Clear-Variable -Name MyVariable
$MyVariable = $null

Чтобы удалить переменную, используйте Remove-Variable или Remove-Item.

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

Можно также назначить значения нескольким переменным с одной инструкцией. В следующих примерах одно и то же значение назначается нескольким переменным:

$a = $b = $c = 0

Следующий пример назначает несколько значений нескольким переменным.

$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

Дополнительные сведения см. в разделе "Назначение нескольких переменных" about_Assignment_Operators.

Типы переменных

Вы можете хранить любой тип объекта в переменной, включая целые числа, строки, массивы и хэш-таблицы. Объекты, представляющие процессы, службы, журналы событий и компьютеры.

Переменные PowerShell свободно типируются, что означает, что они не ограничиваются определенным типом объекта. Одна переменная может содержать даже коллекцию или массив различных типов объектов одновременно.

Тип данных переменной определяется типами .NET значений переменной. Чтобы просмотреть тип объекта переменной, используйте Get-Member.

Например:

$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

Вы можете использовать атрибут типа и нотацию приведения, чтобы убедиться, что переменная может содержать только определенные типы объектов или объекты, которые можно преобразовать в этот тип. Если вы пытаетесь назначить значение другого типа, PowerShell пытается преобразовать значение в его тип. Если тип не удается преобразовать, оператор присваивания завершается ошибкой.

Чтобы использовать нотацию приведения, введите имя типа, заключенное в квадратные скобки, перед именем переменной (слева от инструкции назначения). В следующем примере создается $number переменная, которая может содержать только целые числа, переменную, $words содержащую только строки, и $dates переменную, которая может содержать только объекты 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

Использование переменных в командах и выражениях

Чтобы использовать переменную в команде или выражении, введите имя переменной перед знаком доллара ($).

Если имя переменной и знак доллара не заключены в кавычки или если они заключены в двойные кавычки (") метки, значение переменной используется в команде или выражении.

Если имя переменной и знак доллара заключены в одинарные кавычки (') метки, имя переменной используется в выражении.

Дополнительные сведения об использовании кавычек в PowerShell см. в about_Quoting_Rules.

В этом примере возвращается значение переменной $PROFILE , представляющее собой путь к файлу профиля пользователя PowerShell в консоли PowerShell.

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

В этом примере показаны две команды, которые могут открыть профиль PowerShell в notepad.exe. В примере с двойными кавычками (") используется значение переменной.

notepad $PROFILE

notepad "$PROFILE"

В следующих примерах используются одинарные кавычки ('), которые обрабатывают переменную как литеральный текст.

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

Имена переменных, включающие специальные символы

Имена переменных начинаются с знака доллара ($) и могут включать буквенно-цифровые символы и специальные символы. Длина имени переменной ограничена только доступной памятью.

Рекомендуется, чтобы имена переменных включали только буквенно-цифровые символы и символ подчеркивания (_). Имена переменных, включающие пробелы и другие специальные символы, трудно использовать и следует избегать.

Буквенно-цифровые имена переменных могут содержать следующие символы:

  • Символы Юникода из этих категорий: Lu, Ll, Lt, Lm, Lo или Nd.
  • Символ подчеркивания (_).
  • Знак вопроса (?)

В следующем списке содержатся описания категорий Юникода. Дополнительные сведения см. в разделе ЮникодCategory.

  • Lu - UppercaseLetter
  • Ll - LowercaseLetter
  • Lt - TitlecaseLetter
  • Lm - ModifierLetter
  • Lo - OtherLetter
  • Nd — DecimalDigitNumber

Чтобы создать или отобразить имя переменной, включающее пробелы или специальные символы, заключите имя переменной с фигурными скобками ({}) символами. Фигурные скобки направляют PowerShell для интерпретации символов имени переменной как литералы.

Имена специальных переменных символов могут содержать следующие символы:

  • Любой символ Юникода со следующими исключениями:
    • Закрывающий фигурный скобка () символ (}U+007D).
    • Символ backtick () (`U+0060). Обратная черта используется для экранирования символов Юникода, поэтому они рассматриваются как литералы.

PowerShell имеет зарезервированные переменные, такие как $$, $?$^и $_ содержащие буквенно-цифровые и специальные символы. Дополнительные сведения см. в статье about_Automatic_Variables.

Например, следующая команда создает переменную с именем save-items. Фигурные скобки ({}) необходимы, так как имя переменной включает специальный символ дефиса (-).

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

Следующая команда получает дочерние элементы в каталоге, представленном переменной ProgramFiles(x86) среды.

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

Чтобы ссылаться на имя переменной, включающую фигурные скобки, заключите имя переменной в фигурные скобки и используйте символ backtick для экранирования фигурных скобок. Например, чтобы создать переменную именованного this{value}is типа:

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

Переменные и область

По умолчанию переменные доступны только в область, в которой они создаются.

Например, переменная, созданная в функции, доступна только в функции. Переменная, созданная в скрипте, доступна только в скрипте. Если вы dot-source скрипт, переменная добавляется в текущую область. Дополнительные сведения см. в about_Scopes.

Для изменения область переменной можно использовать модификатор область по умолчанию. Следующее выражение создает переменную с именем Computers. Переменная имеет глобальную область, даже если она создана в скрипте или функции.

$Global:Computers = "Server01"

Для любого скрипта или команды, выполняющегося вне сеанса, требуется Using модификатор область для внедрения значений переменных из вызывающего сеанса область, чтобы получить к ним доступ из кода сеанса.

Дополнительные сведения см. в about_Remote_Variables.

Сохранение переменных

Создаваемые переменные доступны только в сеансе, в котором они создаются. Они потеряны при закрытии сеанса.

Чтобы создать переменную в каждом начальном сеансе PowerShell, добавьте переменную в профиль PowerShell.

Например, чтобы изменить значение переменной $VerbosePreference в каждом сеансе PowerShell, добавьте следующую команду в профиль PowerShell.

$VerbosePreference = "Continue"

Эту команду можно добавить в профиль PowerShell, открыв $PROFILE файл в текстовом редакторе, например notepad.exe. Дополнительные сведения о профилях PowerShell см. в about_Profiles.

Переменная: диск

Поставщик переменных PowerShell создает Variable: диск, который выглядит и действует как диск файловой системы, но содержит переменные в сеансе и их значения.

Чтобы изменить Variable: диск, используйте следующую команду:

Set-Location Variable:

Чтобы перечислить элементы и переменные на Variable: диске, используйте Get-Item командлеты или Get-ChildItem элементы.

Get-ChildItem Variable:

Чтобы получить значение определенной переменной, используйте нотацию файловой системы, чтобы указать имя диска и имя переменной. Например, чтобы получить автоматическую $PSCulture переменную, используйте следующую команду.

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

Чтобы отобразить дополнительные сведения о Variable: диске и поставщике переменных PowerShell, введите следующее:

Get-Help Variable

Синтаксис переменной с путями поставщика

Вы можете префиксить путь поставщика с помощью знака доллара ($) и получить доступ к содержимому любого поставщика, реализующего интерфейс IContentCmdletProvider .

Следующие встроенные поставщики PowerShell поддерживают эту нотацию:

Командлеты переменной

PowerShell включает набор командлетов, предназначенных для управления переменными.

Чтобы вывести список командлетов, введите следующее:

Get-Command -Noun Variable

Чтобы получить справку для определенного командлета, введите следующее:

Get-Help <cmdlet-name>
Имя командлета Description
Clear-Variable Удаляет значение переменной.
Get-Variable Получает переменные в текущей консоли.
New-Variable Создает новую переменную.
Remove-Variable Удаляет переменную и ее значение.
Set-Variable Изменяет значение переменной.

См. также