Використання змінних в PowerShell.
В PowerShell змінні являють собою контейнер, в який можна поміщати різні об'єкти. З іншого боку, кожна змінна також є об'єктом, з яким можна робити різні дії. Сьогодні ми розглянемо деякі з цих дій.
Створення змінних
В найпростішому варіанті для створення нової змінної досить ввести в консолі її припустиме ім'я.Ім'я змінної завжди починається зі знака $ і може містити будь-які літери і цифри, а також знак підкреслення. Наприклад, команда $ var створить змінну з ім'ям $ var. Однак створена таким чином змінна не має значення. Створити змінну і привласнити їй якесь значення можна одним дією, наприклад:
$ var = 8
або
$ var = "Windows"
Врахуйте, що PowerShell створить змінну тільки в тому випадку, якщо вона не існує, інакше вказане значення присвоюється існуючої змінної.
Змінна може зберігати в собі різні дані. Зазвичай при створенні змінної тип даних вибирається автоматично, але при необхідності його можна уточнити, наприклад текстовий:
[string] $ var = Windows
логічний:
[ boolean] $ b = $ true
або одновимірний масив:
[hashtable] $ h = @ {a = 1; b = 2; c = 3}
І навпаки, можна подивитися тип даних в змінної:
$ h.GetType (). FullName
Ще у змінних в PowerShell є таке поняття як область дії (Scope ). Область може бути глобальною (Global) або локальної (Local). Глобальна область поширюється на весь поточний сеанс, в цю область входять системні змінні і змінні, що входять в профілі PowerShell.Локальні змінні обмежені тією областю, в якій були визначені (напр. Функцією або скриптом) і за межі цієї області не поширюються. Є ще область дії сценарію (Script), але для команд в скрипті область дії скрипта також є локальною, так що по суті області всього дві.
За замовчуванням при створенні змінних задається локальна область дії. Щоб задати інше значення, потрібно явно вказати область, наприклад:
$ Global: test = 10
Для кращого розуміння проведемо невеличкий експеримент. Створимо змінну $ test і поставимо їй значення Global:
$ test = "Global"
Cоздадім скрипт test.ps1, що містить наступний текст:
$ test = "Local"
"Поточне значення змінної: $ test"
Запустимо скрипт і подивимося, що він нам видасть. Як бачите, в скрипті змінна має значення Local. Якщо ж після відпрацювання скрипта ще раз вивести змінну, то вона знову буде мати значення Global.Тобто значення змінної, заданий в скрипті, діє тільки в межах цього скрипта.
Примітка. Тут є ще один тонкий момент, а саме - всі змінні, визначені в консолі, мають глобальну область дії в рамках поточного сеансу.
А тепер трохи змінимо скрипт:
$ Global: test = "Local"
"Поточне значення змінної: $ test"
І знову запустимо його.На перший погляд нічого не змінилося, але якщо ще раз вивести змінну $ test, то вона буде мати значення Local. Оскільки на цей раз в скрипті ми вказали глобальну область дії, то значення змінної дійсно і за межами скрипта.
Примітка.Всі створені змінні існують тільки в поточному сеансі PowerShell, при закритті сеансу вони будуть видалені. Якщо ви хочете, щоб змінна була визначена в кожному сеансі, то можна додати її в профіль користувача.
Управління змінними
Для створення і управління змінними можна користуватися спеціальними Командлети.Їх список в зрозумілій формі можна вивести командою:
Get-Command -Noun Variable | ft -Property Name, Definition -AutoSize -Wrap
Наприклад створити змінну можна за допомогою командлета New -Variable:
New-Variable -Name var -Value 8
Змінити значення за допомогою Set-Variable:
Set-Variable -Name var -Value 10
І подивитися її властивості за допомогою Get-Variable:
Get-Variable -Name var | Format-List
Значення змінної можна очистити за допомогою командлета Clear-Variable.Цей командлет видаляє тільки дані, що зберігаються в змінної, залишаючи саму змінну. В результаті змінна отримує порожнє значення (NULL). Якщо для змінної був явно зазначений тип даних, він також буде збережений.
Ну і для видалення змінних служить командлет Remove-Variable.Наприклад, видалити всі створені в поточному сеансі змінні можна командою:
Remove-Variable -Name * -Force -ErrorAction SilentlyContinue
Перевага використання командлетів в тому, що вони дозволяють задавати для змінної деякі додаткові параметри, такі як тип, видимість і область дії.Наприклад, якщо ви хочете створити змінну, яку неможливо перевизначити або видалити, то зробимо так:
New-Variable -Name var -Value 8 -Option Constant
Виходить постійна змінна :), при спробі змінити або видалити таку змінну буде видана помилка. Замість Constant можна поставити значення ReadOnly, яке також не дає змінювати значення змінної, але дозволяє її видалити.
Примітка. Змінити значення змінної тільки для читання можна командою New-Variable з параметром -Force.
Можна взагалі приховати змінну, зробивши її невидимою за межами області, в якій вона була створена:
New-Variable -Name priv -Value 10 -Visibility Private
Приватна змінна не буде видно в списку змінних , а при зверненні до неї буде видана помилка.Але користувачі зможуть виконувати команди, які використовують цю змінну, якщо ці команди запущені в тому ж сеансі, в якому змінна була визначена. Такий підхід можна використовувати в скриптах або модулях, що надаються стороннім користувачам.
Зберігання даних в змінних
Одне з найбільш корисних властивостей змінних в PowerShell - це можливість зберігати в них результати виконання команд.Для прикладу виберемо системний процес spoolsv і збережемо його в змінній $ proc:
$ proc = Get-Process -Name spoolsv
Оскільки PowerShell працює з об'єктами, то отримана змінна представляє собою не просто текстовий рядок, а повноцінний об'єкт зі своїми властивостями і методами, якими ми можемо скористатися.Виведемо опис об'єкта за допомогою властивості Description:
$ proc.Description
Трохи змінимо його висновок, замінивши всі букви "p" на "s" командою:
$ proc.Description.Replace ( "p", "s")
І завершимо знущання над процесом :), завершивши його за допомогою методу Kill, ось так:
$ proc. Kill ()
Системні змінні
Крім змінних, створених користувачем вручну, в PowerShell можна використовувати системні змінні .Подивитися список всіх змінних можна, вивівши вміст змінного диска:
dir Variable:
або командою:
Get-Variable
Крім того, PowerShell доступні змінні оточення Windows. Ці змінні передаються через диск з ім'ям Env :, наприклад для виведення системної директорії скористаємося змінної:
$ env: windir
Переглянути їх все можна командою:
dir Env:
Ну ось власне і все, що я хотів розповісти про змінних в PowerShell.Сподіваюся, вийшло не дуже нудно