ฉันจะเถียงว่ามีวิธีการที่ดีกว่าโดยการตั้งค่าขอบเขตของตัวแปร $ MyInvocation.MyCommand.Path:
เช่น> $ script : MyInvocation.MyCommand.Name
วิธีนี้ใช้ได้ในทุกสถานการณ์ของการร้องขอ:
เช่น 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
เอาท์พุท:
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
สังเกตว่าคำตอบที่ยอมรับข้างต้นไม่ส่งคืนค่าเมื่อเรียกจาก Main นอกจากนี้โปรดทราบว่าคำตอบที่ยอมรับข้างต้นจะแสดงเส้นทางแบบเต็มเมื่อคำถามขอชื่อสคริปต์เท่านั้น ตัวแปรที่กำหนดขอบเขตทำงานได้ในทุกที่
นอกจากนี้หากคุณต้องการเส้นทางแบบเต็มคุณจะโทร:
$script:MyInvocation.MyCommand.Path