Twierdziłbym, że istnieje lepsza metoda, ustawiając zakres zmiennej $ MyInvocation.MyCommand.Path:
ex> $ script : MyInvocation.MyCommand.Name
Ta metoda działa we wszystkich okolicznościach wywołania:
Np .: Somescript.ps1
function printme () {
"In function:"
( "MyInvocation.ScriptName: " + [string]($MyInvocation.ScriptName) )
( "script:MyInvocation.MyCommand.Name: " + [string]($script:MyInvocation.MyCommand.Name) )
( "MyInvocation.MyCommand.Name: " + [string]($MyInvocation.MyCommand.Name) )
}
"Main:"
( "MyInvocation.ScriptName: " + [string]($MyInvocation.ScriptName) )
( "script:MyInvocation.MyCommand.Name: " + [string]($script:MyInvocation.MyCommand.Name) )
( "MyInvocation.MyCommand.Name: " + [string]($MyInvocation.MyCommand.Name) )
" "
printme
exit
WYNIK:
PS> powershell C:\temp\test.ps1
Main:
MyInvocation.ScriptName:
script:MyInvocation.MyCommand.Name: test.ps1
MyInvocation.MyCommand.Name: test.ps1
In function:
MyInvocation.ScriptName: C:\temp\test.ps1
script:MyInvocation.MyCommand.Name: test.ps1
MyInvocation.MyCommand.Name: printme
Zauważ, że powyższa zaakceptowana odpowiedź NIE zwraca wartości, gdy jest wywoływana z Main. Należy również zauważyć, że powyższa zaakceptowana odpowiedź zwraca pełną ścieżkę, gdy pytanie dotyczyło tylko nazwy skryptu. Zmienna o określonym zakresie działa we wszystkich miejscach.
Ponadto, jeśli chcesz mieć pełną ścieżkę, po prostu zadzwoń:
$script:MyInvocation.MyCommand.Path