Saya memiliki masalah yang sama dan itu membuat saya banyak masalah karena saya membuat program yang ditulis dalam PowerShell (aplikasi GUI pengguna akhir penuh) dan saya memiliki banyak file dan sumber daya yang saya perlu memuat dari disk. Dari pengalaman saya, menggunakan . Setelah itu, PowerShell mengubah direktori menjadi direktori tempat Anda memintanya, atau ke direktori tempat skrip yang Anda jalankan berada sebelum menyajikan kepada Anda prompt PowerShell atau menjalankan skrip. Tapi itu terjadi setelah aplikasi PowerShell sendiri awalnya dimulai di dalam direktori pengguna rumah Anda..
untuk mewakili direktori saat ini tidak dapat diandalkan. Itu harus mewakili direktori kerja saat ini, tetapi seringkali tidak. Tampaknya PowerShell menyimpan lokasi dari mana PowerShell telah dipanggil di dalamnya .
. Untuk lebih tepatnya, ketika PowerShell pertama kali dimulai, itu dimulai, secara default, di dalam direktori pengguna rumah Anda. Itu biasanya direktori akun pengguna Anda, kira-kira seperti ituC:\USERS\YOUR USER NAME
Dan .
menyatakan bahwa direktori awal di mana PowerShell dimulai. Jadi .
hanya mewakili direktori saat ini jika Anda menggunakan PowerShell dari direktori yang diinginkan. Jika nanti Anda mengubah direktori dalam kode PowerShell, perubahan tampaknya tidak tercermin di .
dalam setiap kasus. Dalam beberapa kasus .
merupakan direktori kerja saat ini, dan dalam direktori lain dari mana PowerShell (itu sendiri, bukan skrip) telah dipanggil, apa yang dapat menyebabkan hasil yang tidak konsisten. Untuk alasan ini saya menggunakan skrip invoker. Script PowerShell dengan single perintah di dalam:
POWERSHELL
. Itu akan memastikan bahwa PowerShell dipanggil dari direktori yang diinginkan dan karenanya dibuat.
mewakili direktori saat ini. Tapi itu hanya berfungsi jika Anda tidak mengubah direktori nanti dalam kode PowerShell. Dalam kasus naskah, saya menggunakan script Invoker yang mirip dengan terakhir yang saya sebutkan, kecuali itu berisi file pilihan:
POWERSHELL -FILE DRIVE:\PATH\SCRIPT NAME.PS1
. Itu memastikan bahwa PowerShell dimulai di dalam direktori kerja saat ini.
Cukup dengan mengklik pada skrip, aktifkan PowerShell dari direktori pengguna rumah Anda di mana pun skrip berada. Ini hasil dengan direktori kerja saat ini menjadi direktori di mana skrip berada, tetapi direktori doa PowerShell sedang C:\USERS\YOUR USER NAME
, dan dengan .
mengembalikan salah satu dari dua direktori ini tergantung pada situasi, apa yang konyol.
Tetapi untuk menghindari semua keributan ini dan menggunakan skrip invoker, Anda bisa menggunakan salah satu $PWD
atau $PSSCRIPTROOT
alih-alih .
merepresentasikan direktori saat ini tergantung pada cuaca yang ingin Anda tampilkan pada direktori atau direktori kerja saat ini dari mana skrip telah dipanggil. Dan jika Anda, karena suatu alasan, ingin mengambil yang lain dari dua direktori yang .
kembali, Anda dapat menggunakannya $HOME
.
Saya pribadi hanya memiliki skrip invoker di dalam direktori root aplikasi yang saya kembangkan dengan PowerShell yang memanggil skrip aplikasi utama saya, dan cukup ingat untuk tidak pernah mengubah direktori kerja saat ini di dalam kode sumber aplikasi saya, jadi saya tidak perlu khawatir tentang ini, dan saya bisa gunakan .
untuk mewakili direktori saat ini dan untuk mendukung pengalamatan file relatif di aplikasi saya tanpa masalah. Ini harus bekerja di versi PowerShell yang lebih baru (lebih baru dari versi 2).