Come indicato nelle risposte precedenti, l'utilizzo di "$ MyInvocation" è soggetto a problemi di ambito e non fornisce necessariamente dati coerenti (valore restituito rispetto al valore di accesso diretto). Ho scoperto che il metodo "più pulito" (più coerente) per ottenere informazioni sullo script come percorso dello script, nome, parametri, riga di comando, ecc. Indipendentemente dall'ambito (nelle chiamate di funzione principale o successive / nidificate) è utilizzare "Get- Variabile "su" 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
Quindi, puoi ottenere le stesse informazioni di $ PSCommandPath, ma molto di più nell'affare. Non sono sicuro, ma sembra che "Get-Variable" non fosse disponibile fino a PS3, quindi non è stato molto utile per sistemi molto vecchi (non aggiornati).
Ci sono anche alcuni aspetti interessanti quando si usa "-Scope" in quanto è possibile tornare indietro per ottenere i nomi, ecc. Delle funzioni chiamanti. 0 = corrente, 1 = genitore, ecc.
Spero che questo sia in qualche modo utile.
Rif, https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-variable