Сервісний центр VPSGroup ремонт комп'ютерної техніки, заправка картриджів, ремонт оргтехніки, Київ, Виставковий центр, Васильківська, 55

Як в скрипті 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.

.