$ MyInvocation.MyCommand.Path değişkeninin kapsamını ayarlayarak daha iyi bir yöntem olduğunu iddia ediyorum:
ex> $ script : MyInvocation.MyCommand.Name
Bu yöntem, tüm çağrı koşullarında çalışır:
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
ÇIKTI:
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
Yukarıdaki kabul edilen cevabın Ana'dan çağrıldığında nasıl bir değer döndürmediğine dikkat edin. Ayrıca, soru yalnızca komut dosyası adını istediğinde, yukarıda kabul edilen yanıtın tam yolu döndürdüğünü unutmayın. Kapsamlı değişken her yerde çalışır.
Ayrıca, tam yolu istiyorsanız, o zaman sadece şunu çağırırsınız:
$script:MyInvocation.MyCommand.Path