Comme indiqué dans les réponses précédentes, l'utilisation de "$ MyInvocation" est sujette à des problèmes de portée et ne fournit pas nécessairement des données cohérentes (valeur de retour par rapport à la valeur d'accès direct). J'ai trouvé que la méthode la plus "propre" (la plus cohérente) pour obtenir des informations de script comme le chemin du script, le nom, les paramètres, la ligne de commande, etc. quelle que soit la portée (dans les appels de fonction principaux ou ultérieurs / imbriqués) consiste à utiliser "Get- Variable "sur" 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
Ainsi, vous pouvez obtenir les mêmes informations que $ PSCommandPath, mais beaucoup plus dans l'accord. Pas sûr, mais il semble que "Get-Variable" n'était pas disponible avant la PS3 donc pas beaucoup d'aide pour les systèmes vraiment anciens (non mis à jour).
Il y a aussi des aspects intéressants lors de l'utilisation de "-Scope" car vous pouvez revenir en arrière pour obtenir les noms, etc. de la ou des fonctions appelantes. 0 = actuel, 1 = parent, etc.
J'espère que cela est quelque peu utile.
Réf, https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-variable