Saya berpendapat bahwa ada metode yang lebih baik, dengan menetapkan cakupan variabel $ MyInvocation.MyCommand.Path:
contoh> $ script : MyInvocation.MyCommand.Name
Metode ini berfungsi di semua situasi pemanggilan:
EX: 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
KELUARAN:
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
Perhatikan bagaimana jawaban yang diterima di atas TIDAK mengembalikan nilai saat dipanggil dari Utama. Juga, perhatikan bahwa jawaban yang diterima di atas mengembalikan jalur lengkap ketika pertanyaan meminta nama skrip saja. Variabel cakupan berfungsi di semua tempat.
Juga, jika Anda memang menginginkan jalur lengkap, Anda cukup memanggil:
$script:MyInvocation.MyCommand.Path