Поделиться через


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

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

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

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

  • Lu — UppercaseLetter
  • Ll — Нижний регистрЛет
  • 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 type, выполните указанные ниже действия.

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

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

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

Например, переменная, созданная в функции, доступна только внутри функции. Переменная, созданная в скрипте, доступна только в скрипте. Если скрипт является точечной, переменная добавляется в текущий область. Дополнительные сведения см. в разделе 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