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


О переменных

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

Описывает, как переменные хранят значения, которые можно использовать в 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 пытается преобразовать значение в его тип. Если тип не может быть преобразован, инструкция присваивания завершается ошибкой.

Чтобы использовать нотацию CAST, введите имя типа, заключенное в квадратные скобки, перед именем переменной (в левой части оператора присваивания). В следующем примере создается $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\WindowsPowerShell\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, withили ND.
  • Символ подчеркивания ( _ ).
  • Символ вопросительного ? знака ().

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

  • Lu — упперкаселеттер
  • LL -ловеркаселеттер
  • Lt — титлекаселеттер
  • LM -модифиерлеттер
  • Lo Осерлеттер
  • ND -деЦималдигитнумбер

Чтобы создать или отобразить имя переменной, содержащей пробелы или специальные символы, заключите имя переменной в символы фигурных скобок ( {} ). Фигурные скобки направляют 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"

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

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

Чтобы создать переменную в каждом запущенном сеансе 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

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

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

Следующие встроенные поставщики 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