Оболочка Windows PowerShell работает с объектами. Windows PowerShell позволяет создавать переменные — по сути, именованные объекты, — чтобы сохранять в них данные вывода для последующего использования. Пользователям, привыкшим работать с переменными в других оболочках, следует помнить, что в Windows PowerShell переменными является не текст, а объекты.
Имя переменной всегда начинается со знака $ и может содержать любые буквы и цифра, а также знак подчеркивания.
Создание переменной
Чтобы создать переменную, нужно ввести допустимое имя переменной:
PS> $loc PS>
Эта команда не вернет никакой результат, потому что переменная $loc не имеет значения. Создать переменную и присвоить ей какое-либо значение можно одним действием. Windows PowerShell создает переменную, только если она еще не существует; в противном случае указанное значение присваивается существующей переменной. Для сохранения текущего местоположения в переменной $loc введите:
$loc = Get-Location
После ввода этой команды ее вывод не отображается, потому что он отправляется в переменную $loc. Отображение вывода в оболочке Windows PowerShell представляет собой побочный эффект отправки данных: если не указано иное направление отправки, то данные всегда отправляются на экран. Чтобы вывести текущее местоположение, нужно ввести имя переменной "$loc":
PS> $loc Path ---- C:\temp
Для отображения сведений о содержимом переменных можно воспользоваться командлетом Get-Member. Передача переменной $loc по конвейеру командлету Get-Member показывает, что это объект класса PathInfo, так же как и вывод командлета Get-Location.
PS> $loc | Get-Member -MemberType Property TypeName: System.Management.Automation.PathInfo Name MemberType Definition ---- ---------- ---------- Drive Property System.Management.Automation.PSDriveInfo Drive {get;} Path Property System.String Path {get;} Provider Property System.Management.Automation.ProviderInfo Provider {... ProviderPath Property System.String ProviderPath {get;}
Управление переменными
Для работы с переменными в оболочке Windows PowerShell имеется несколько команд. Полный список команд в удобной для чтения форме можно вывести следующим образом:
Get-Command -Noun Variable | Format-Table -Property Name,Definition -AutoSize -Wrap
Кроме переменных, создаваемых пользователем в текущем сеансе Windows PowerShell, существует несколько системных переменных. С помощью командлета Remove-Variable можно очистить все переменные, не управляемые оболочкой Windows PowerShell. Введите следующую команду, чтобы очистить все переменные:
Remove-Variable -Name * -Force -ErrorAction SilentlyContinue
Это приведет к запросу подтверждения, как показано ниже:
Confirm Are you sure you want to perform this action? Performing operation "Remove Variable" on Target "Name: Error". [Y] Yes [A] Yes to All [N] No [L] No to All [S] Suspend [?] Help (default is "Y"):A
Если после этого запустить командлет Get-Variable, будут показаны оставшиеся переменные Windows PowerShell. Поскольку в Windows PowerShell имеется еще и переменный диск, все переменные Windows PowerShell можно вывести командой:
Get-ChildItem variable:
Использование переменных Cmd.exe
Оболочка Windows PowerShell не является командной оболочкой Windows, запускаемой файлом Cmd.exe, но несмотря на это Windows PowerShell выполняется в среде командной оболочки, и может работать со всеми переменными, доступными в любой среде операционной системы Windows. Такие переменные передаются через диск с именем env:. Просмотреть переменные можно с помощью команды:
Get-ChildItem env:
Несмотря на то что стандартные командлеты не предназначены для работы с переменными диска env:, эти переменные могут использоваться при указании префикса env:. Например, чтобы показать корневой каталог операционной системы, в Windows PowerShell можно использовать переменную %SystemRoot% командной оболочки:
PS> $env:SystemRoot C:\WINDOWS
Создавать и изменять переменные среды можно также в оболочке Windows PowerShell. Переменные среды, доступные в оболочке Windows PowerShell, соответствуют обычным правилам для переменных любой другой среды Windows.