|
74
|
| Ron Klein Noa Kuperberg · 技术社区 · 17 年前 |
|
1
66
虽然目前的答案在大多数情况下是正确的,但在某些情况下,它不会给出正确的答案。如果在脚本函数中使用,则:
返回函数名,而不是脚本名。
会给你“ 测试 “不管你的脚本是如何命名的。 获取脚本名的正确命令始终是
这将返回正在执行的脚本的完整路径。如果您只需要脚本文件名,那么此代码应该对您有所帮助:
|
|
|
2
66
如果只需要文件名(而不是完整路径),请使用:
|
|
|
3
32
尝试以下操作
这可能无法为您提供键入的实际路径,但会为您提供文件的有效路径。 |
|
|
4
29
我尝试在这里总结各种答案,为PowerShell5更新:
细节
在不同的答案中有4种不同的方法,所以我编写了这个脚本来演示每种方法(加上
输出:
笔记:
|
|
|
5
7
如果要查找当前执行脚本的目录,可以尝试以下操作:
|
|
|
6
6
当心:
不像
例如
…在哪里
|
|
|
7
4
我认为,通过设置变量$myinvocation.mycommand.path的作用域,有一个更好的方法: EX & GT;$ 脚本 :myinvocation.mycommand.name 此方法在调用的所有情况下都有效: 前任: PS1
输出:
请注意,当从main调用时,上面接受的回答不会返回值。另外,请注意,当问题只请求脚本名时,上面接受的答案返回完整路径。作用域变量在所有地方都有效。 另外,如果您想要完整的路径,那么您只需调用:
|
|
|
8
1
在ps 2和ps 4上使用以下脚本进行了一些测试,结果相同。我希望这能帮助人们。
结果-
|
|
|
9
1
如前所述,使用“$myinvocation”会受到范围问题的影响,不一定提供一致的数据(返回值与直接访问值)。我发现,获取脚本信息的“最干净”(最一致)方法,如脚本路径、名称、参数、命令行等,不管作用域(在主函数调用或后续/嵌套函数调用中)是在“myinvocation”上使用“get variable”…
因此,您可以获得与$pscommandpath相同的信息,但在交易中可以获得更多信息。不确定,但看起来“get variable”直到PS3才可用,所以对于真正的旧(未更新)系统没有太多帮助。 使用“-scope”时还有一些有趣的方面,因为您可以回溯以获取调用函数的名称等。0=当前,1=父级等。 希望这能有所帮助。 裁判, https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/get-variable |