Conforme observado nas respostas anteriores, o uso de "$ MyInvocation" está sujeito a problemas de escopo e não necessariamente fornece dados consistentes (valor de retorno vs. valor de acesso direto). Descobri que o método "mais limpo" (mais consistente) para obter informações de script, como caminho de script, nome, parâmetros, linha de comando, etc., independentemente do escopo (em chamadas de função principal ou subsequentes / aninhadas) é usar "Get- Variável "em" 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
Portanto, você pode obter as mesmas informações de $ PSCommandPath, mas muito mais no negócio. Não tenho certeza, mas parece que "Get-Variable" não estava disponível até o PS3, então não é uma grande ajuda para sistemas realmente antigos (não atualizados).
Existem também alguns aspectos interessantes ao usar "-Scope", pois você pode retroceder para obter os nomes, etc. da (s) função (ões) de chamada. 0 = atual, 1 = pai, etc.
Espero que isso seja de alguma forma útil.
Ref, https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-variable