मुझे इसी तरह की समस्याएँ थीं और इससे मुझे बहुत परेशानी हुई क्योंकि मैं PowerShell (पूर्ण अंत उपयोगकर्ता GUI अनुप्रयोगों) में लिखे गए कार्यक्रम बना रहा हूं और मेरे पास बहुत सारी फाइलें और संसाधन हैं जिन्हें मुझे डिस्क से लोड करने की आवश्यकता है। मेरे अनुभव से, .
वर्तमान निर्देशिका का प्रतिनिधित्व करना अविश्वसनीय है। इसे वर्तमान कामकाजी निर्देशिका का प्रतिनिधित्व करना चाहिए, लेकिन यह अक्सर नहीं होता है। ऐसा प्रतीत होता है कि PowerShell उस स्थान को बचाता है जहां से PowerShell को अंदर लाया गया है.
। अधिक सटीक होने के लिए, जब PowerShell पहली बार शुरू किया गया है, तो यह आपके होम उपयोगकर्ता निर्देशिका के अंदर डिफ़ॉल्ट रूप से शुरू होता है। यह आमतौर पर आपके उपयोगकर्ता खाते की निर्देशिका होती है, जैसे कुछC:\USERS\YOUR USER NAME
। उसके बाद, 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 के साथ विकसित करता हूं जो मेरे मुख्य ऐप स्क्रिप्ट को आमंत्रित करता है, और बस याद रखना कभी भी अपने ऐप के स्रोत कोड के अंदर वर्तमान कार्यशील निर्देशिका को बदलना नहीं है, इसलिए मुझे इस बारे में चिंता करने की ज़रूरत नहीं है, और मैं .
वर्तमान निर्देशिका का प्रतिनिधित्व करने के लिए और किसी भी समस्या के बिना अपने अनुप्रयोगों में रिश्तेदार फ़ाइल पते का समर्थन करने के लिए उपयोग कर सकते हैं । यह पॉवरशेल के नए संस्करणों (संस्करण 2 से नया) में काम करना चाहिए।