जैसा कि पिछली प्रतिक्रियाओं में उल्लेख किया गया है, "$ MyInvocation" का उपयोग स्कूपिंग के मुद्दों के अधीन है और यह अनिवार्य रूप से सुसंगत डेटा (वापसी मूल्य बनाम प्रत्यक्ष एक्सेस मूल्य) प्रदान नहीं करता है। मैंने पाया है कि स्क्रिप्ट की जानकारी प्राप्त करने के लिए "सबसे साफ" (सबसे सुसंगत) तरीका जैसे स्क्रिप्ट पथ, नाम, पार्स, कमांड लाइन, आदि की गुंजाइश की परवाह किए बिना (मुख्य या बाद में / नेस्टेड फ़ंक्शन कॉल में) "गेट- का उपयोग करना है। "MyInvocation" पर चर "...
# Get the MyInvocation variable at script level
# Can be done anywhere within a script
$ScriptInvocation = (Get-Variable MyInvocation -Scope Script).Value
# Get the full path to the script
$ScriptPath = $ScriptInvocation.MyCommand.Path
# Get the directory of the script
$ScriptDirectory = Split-Path $ScriptPath
# Get the script name
# Yes, could get via Split-Path, but this is "simpler" since this is the default return value
$ScriptName = $ScriptInvocation.MyCommand.Name
# Get the invocation path (relative to $PWD)
# @GregMac, this addresses your second point
$InvocationPath = ScriptInvocation.InvocationName
तो, आप $ PSCommandPath के रूप में एक ही जानकारी प्राप्त कर सकते हैं, लेकिन सौदे में एक पूरी बहुत अधिक। निश्चित नहीं है, लेकिन ऐसा लगता है कि "गेट-वरीएबल" PS3 तक उपलब्ध नहीं था, इसलिए वास्तव में पुराने (अपडेट नहीं किए गए) सिस्टम के लिए बहुत मदद नहीं करता है।
"-Scope" का उपयोग करते समय कुछ दिलचस्प पहलू भी हैं क्योंकि आप कॉलिंग फ़ंक्शन (नों) के नाम, आदि प्राप्त करने के लिए पीछे कर सकते हैं। 0 = वर्तमान, 1 = माता-पिता, आदि।
आशा है कि यह कुछ हद तक मददगार होगा।
रेफरी, https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-variable