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