У мене виникли подібні проблеми, і це створило мені багато проблем, оскільки я створюю програми, написані в PowerShell (повне програмне забезпечення для користувачів GUI), і у мене є багато файлів і ресурсів, які мені потрібно завантажити з диска. З мого досвіду, використовуючи.
для представлення поточного каталогу ненадійно. Він повинен представляти поточний робочий каталог, але часто це не так. Здається, що PowerShell зберігає місце, звідки PowerShell викликався всередині.
. Якщо бути точнішим, коли PowerShell вперше запущений, він за замовчуванням запускається всередині вашого домашнього каталогу користувачів. Це зазвичай каталог вашого облікового запису користувача, щось подібнеC:\USERS\YOUR USER NAME
. Після цього PowerShell змінює каталог до каталогу, з якого ви його викликали, або до каталогу, де знаходиться сценарій, який ви виконуєте, перед тим, як представити вам запит PowerShell або запустити сценарій. Але це відбувається після того, як саме додаток PowerShell спочатку запускається в домашній каталог користувачів.
І .
являє собою початковий каталог, всередині якого запущений PowerShell. Тож .
представляє поточний каталог лише в тому випадку, якщо ви посилалися на PowerShell з потрібного каталогу. Якщо пізніше ви зміните каталог у коді PowerShell, здається, що зміни не відображаються всередині .
кожного. В одних випадках .
представлений поточний робочий каталог, а в інших каталог, з якого викликано PowerShell (сам, а не сценарій), що може призвести до непослідовних результатів. З цієї причини я використовую скрипт провізника. Сценарій PowerShell з однією командою всередині:
представляють поточну каталог. Але це працює лише в тому випадку, якщо ви згодом не зміните каталог у PowerShell-коді. У випадку скрипту я використовую скрипт-визыватель, подібний до останнього, про який я згадав, за винятком того, що він містить варіант файлу:
POWERSHELL
. Це забезпечить виклик PowerShell з потрібного каталогу і таким чином зробити.
POWERSHELL -FILE DRIVE:\PATH\SCRIPT NAME.PS1
. Це забезпечує запуск PowerShell всередині поточного робочого каталогу.
Просто натискання на скрипт викликає PowerShell з вашого домашнього каталогу користувачів, незалежно від того, де знаходиться сценарій. Це призводить до того, що поточний робочий каталог знаходиться в каталозі, де розташований скрипт, але є каталог викликів PowerShell C:\USERS\YOUR USER NAME
і .
повертається один із цих двох каталогів, залежно від ситуації, що смішно.
Але, щоб уникнути всієї суєти та використання скрипта провадника, ви можете просто використовувати $PWD
або $PSSCRIPTROOT
замість того, .
щоб представляти поточний каталог залежно від погоди, яку ви хочете представляти поточний робочий каталог або каталог, з якого виклик сценарію. І якщо ви з якоїсь причини хочете отримати інші два каталоги, які .
повертаються, ви можете використовувати $HOME
.
Я особисто просто маю скрипт провізора у кореневому каталозі своїх додатків, які я розробляю за допомогою PowerShell, який викликає мій основний сценарій програми, і просто пам'ятаю, щоб ніколи не змінювати поточний робочий каталог всередині мого вихідного коду свого додатка, тому мені ніколи про це не потрібно хвилюватися, і я можу використовувати, .
щоб представляти поточний каталог і підтримувати відносну адресування файлів у своїх програмах без проблем. Це повинно працювати в нових версіях PowerShell (новіших, ніж версія 2).