$ PSScriptRoot和$ PSCommandPath在查找其他脚本使用的脚本文件时非常有用。是否有一种简单,可靠的方法来获取实际执行的顶级脚本文件?我的用户右键单击.ps1文件以从文件资源管理器中执行它们。
示例:
C:\Powershell\a.ps1
C:\Powershell\lib\b.ps1
我需要一个可以从b.ps1使用的命令,它最好返回C:\Powershell\a.ps1
,或者至少C:\Powershell
。 $PSScriptRoot
,$PSCommandPath
和$MyInvocation.MyCommand.Path
都会返回C:\Powershell\lib\b.ps1
。
谢谢!
答案 0 :(得分:0)
这似乎有效:
get-variable psscriptroot -scope ((get-pscallstack).count - 2)
这应该让你在全局范围的第一个子范围内获得脚本编程,这将是初始脚本调用的脚本范围。
答案 1 :(得分:0)
在b.ps1中,使用cmdlet:
Get-Location
这将返回您期望的父路径。
为什么会这样:
这是有效的,因为您将导航到目录C:\ Powershell \并从那里执行脚本a.ps1。当您执行. .\lib\b.ps1
时,您没有离开该执行位置,因此它将准确返回您想要的内容。
注意:请注意,这仅适用于首先导航到目录,或者用于指定“开始”目录的计划任务。因此,如果您在不同的目录中并执行第一个脚本,请执行以下操作:C:\ Powershell \ a.ps1它将返回您的其他目录。
如果你真的很热衷,有关封装的更多信息在这里:Further Down the Rabbit Hole PowerShell Modules and Encapsulation