Сведения о переменных

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

Описывает, как переменные хранят значения, которые можно использовать в 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

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

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

Переменные 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.
  • Символ подчеркивания (_).
  • Знак вопроса (?)

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

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

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

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

  • Любой символ Юникода со следующими исключениями:
    • Закрывающая фигурная скобка () (}U+007D).
    • Символ обратной черты () (`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)}

Чтобы ссылаться на имя переменной, включающую фигурные скобки, заключите имя переменной в фигурные скобки и используйте символ обратного ввода для экранирования фигурных скобок. Например, чтобы создать переменную с именем 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>
Имя командлета Описание
Clear-Variable Удаляет значение переменной.
Get-Variable Получает переменные в текущей консоли.
New-Variable Создает новую переменную.
Remove-Variable Удаляет переменную и ее значение.
Set-Variable Изменяет значение переменной.

См. также раздел

about_Automatic_Variables

about_Environment_Variables

about_Preference_Variables

about_Profiles

about_Quoting_Rules

about_Scopes

about_Remote_Variables