Як в скрипті PowerShell визначити його місце розташування.
Припустимо, що в скрипті потрібно визначити поточні параметри, такі як ім'я файлу або директорія, з якої скрипт був запущений. Зробити це можна різними способами, але найпростіше скористатися автоматичними змінними, в яких зберігаються відомості про стан PowerShell.
Так в змінній $ PSScriptRoot зберігається поточна директорія, з якої був запущений скрипт, а в змінній $ PSCommandPath - повний шлях і ім'я файлу скрипта. Для прикладу створимо скрипт такого змісту і виконаємо його:
"PSScriptRoot is $ PSScriptRoot"
"PSCommandPath is $ PSCommandPath"
Також для визначення місця розташування можна скористатися змінної $ MyInvocation.Ця змінна має властивість MyCommand, в якому містяться відомості про виконувану команді. Замінимо вміст скрипта і виконаємо його:
$ MyInvocation.MyCommand | fl *
Примітка. Якщо спробувати отримати значення змінних $ PSScriptRoot, $ PSCommandPath і $ MyInvocation з консолі, то ви нічого не отримаєте.Ці змінні заповнюються тільки для скриптів і функцій.
Таким чином, $ MyInvocation.MyCommand.Path містить повний шлях і ім'я скрипта, $ MyInvocation.MyCommand.Name - ім'я файлу. Ну а поточну директорію можна отримати командою:
$ MyInvocation.MyCommand.Path | Split-Path -Parent
Для прикладу додамо в скрипт наступні команди і виконаємо його:
Full name is $ ($ MyInvocation.MyCommand.Path)
Name is $ ($ MyInvocation.MyCommand.Name)
Current directory is $ ($ MyInvocation.MyCommand.Path | Split-Path -Parent)
Змінна $ MyInvocation має одну особливість, про яку треба пам'ятати. Для наочності створимо два скрипта, перший:
$ MyInvocation | fl *
. \ script2.ps1
і другий:
$ MyInvocation | fl *
Тобто. в першому скрипті ми виводимо вміст змінної $ MyInvocation, потім з нього ж викликаємо другий скрипт, в якому також виводимо $ MyInvocation.Запускаємо перший скрипт і дивимося результат. Як бачите, вміст змінної для першого і другого скрипта відрізняється. Справа в тому, що в $ MyInvocation зберігаються дані про зухвалого об'єкті, тому для другого скрипта виявилися заповненими властивості ScriptName, PSScriptRoot і PSCommandPath, які як раз вказують на перший скрипт, з якого була запущена поточна команда.
Повний список автоматичних змінних і їх докладний опис можна отримати командою about_Automatic_Variables.
.