获取Powershell顶级脚本位置?

时间:2013-12-16 20:17:01

标签: powershell

$ 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

谢谢!

2 个答案:

答案 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