Переменные powershell
Переменные – это именованные ссылки на области памяти, которые содержат данные конкретного типа. В powershell имена всех переменных начинаются со знака $ (доллар). При сохранении значения в переменную powershell определяет тип данных автоматически. Но так же Вы можете явным образом обозначить тип данных переменной при ее объявлении. Для этого нужно указать тип данных в квадратных скобках перед $, например:
[int64]$num = 2 # переменная num целочисленного типа
Если попытаться этой переменной присвоить текстовые данные, то мы получим ошибку:
$num = "text" Не удается преобразовать значение "text" в тип "System.Int64". Ошибка: "Входная строка имела неверный формат." строка:1 знак:1 + $num = "text" + ~~~~~~~~~~~~~ + CategoryInfo : MetadataError: (:) [], ArgumentTransformationMetadataException + FullyQualifiedErrorId : RuntimeException
Имена переменных не являются регистрозависимыми и могут содержать цифры и спецсимволы. Значением переменной могут быть как сами данные конкретного типа, так и объекты целиком.
При запуске консоли powershell в сеансе автоматически определяется набор системных переменных. Посмотреть список всех переменных в сеансе можно с помощью команды Get-Variable. Среди которых будут как определенные по умолчанию (системные), так и созданные пользователем. Таким образом можно получить список их наименований и значений в одном выводе. Наиболее используемыми и полезными системными переменными могут быть:
ConfirmPreference High
DebugPreference SilentlyContinue
Error {}
ErrorActionPreference Continue
Host System.Management.Automation.Internal.Host.InternalHost
InformationPreference SilentlyContinue
WarningPreference Continue
VerbosePreference SilentlyContinue
PID 99999
PROFILE C:\Users\*****\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1
PSCulture ru-RU
PWD C:\Windows\system32
PSHOME C:\Windows\System32\WindowsPowerShell\v1.0
Подробную информацию о системных переменных можно посмотреть тут.
Помимо пользовательских и автоматических переменных powershell так же позволяет обращаться к переменным окружения. Пользователям Windows переменные могут быть доступны в графическом интерфейсе в свойствах системы:

Powershell позволяет обращаться к ним, используя специальный префикс: $env:<название>. Таким образом Вы можете получать значения этих переменных и взаимодействовать с ними.
PS C:\Windows\system32> $env:AppData C:\Users\cherd\AppData\Roaming PS C:\Windows\system32> $env:OS Windows_NT PS C:\Windows\system32> $env:NUMBER_OF_PROCESSORS 16
Массивы в powershell
Массив – это структура данных для хранения набора элементов, переменных или объектов целиком. Так же как и переменные массивы могут быть фиксированного типа данных. Для этого при объявлении массива тип данных так же указывается в квадратных скобках. Например, [int64[]]$arr = @() – объявление пустого целочисленного массива.
Каждый элемент массива имеет свой индекс. Что дает возможность обращаться к каждому элементу массива по отдельности. В качестве элемента могут выступать и другие массивы.
Существует несколько способов объявления массивов:
- Явно через запятую перечислить все значения:
$arr1 = @("text", 123, $true, $(Get-Service))
$arr1 = "text", 123, $true, $(Get-Service)
В данном случае первым элементом будет текст. Вторым – целое число. Третьим – логическая истина. Четвертым – массив, список объектов (служб), полученных с помощью команды Get-Service. Оба способа являются эквивалентными. Но используя конструкцию @() без аргументов, можно объявить и пустой массив:
$arr1 = @() # объявление пустого массива любого типа [string[]]$arr = @() # объявление пустого массива фиксированного строкового типа
- Использовать диапазоны значений:
$arr2 = 1..100 # переменная $arr2 будет содержать набор целочисленных элементов от 1 до 100
! Начиная с powershell версии 6, Вы так же можете применять и буквенные диапазоны:
$arr2 = "a".."z" # переменная $arr2 будет содержать набор символов от a до z
Чтобы узнать версию powershell, выполните – (Get-Host).Version
- Получить набор элементов (объектов) с помощью выполнения команды:
$arr3 = Get-Service # здесь будет получен массив объектов (служб)
Обращаться к элементам массива можно с помощью указания их индекса. Индекс всегда начинается с нуля. Таким образом, чтобы обратиться к первому элементу выполните – $arr3[0]. И по этой же причине при обращении к последнему элементу индекс необходимо уменьшать на 1:
$arr3[$arr3.count - 1]
Технически любые строки (объекты типа string) – это одномерные массивы символов. И мы имеем возможность обращаться к каждому символу в строке по их индексу, выполните:
$hello = "Hello World" 0..($hello.length - 1) | Foreach-Object {$hello[$_]}
Чтобы изменить конкретный элемент массива, необходимо указать его индекс.
$arr4 = 1, 1, 1, 1, 1 $arr4[2] = 3 $arr4 # Вывод: 1 1 3 1 1
Попробуйте решить следующую задачку и посчитать, чему будет равен массив $b:
$a = 0 $b = 1,2 $c = -1,-2 $b[$a] = $c[1]
Анонс следующей статьи: “PSProviders и PSDrives”.