获取 PowerShell 脚本的当前位置
-
使用
Split-Path
Cmdlet 获取 PowerShell 脚本的当前位置 -
使用
$PSScriptRoot
变量获取 PowerShell 脚本的当前位置 - 获取 Windows PowerShell 中的工作目录以获取 PowerShell 脚本的当前位置
每当我们需要引用一个公共模块或脚本时,我们都希望使用相对于当前脚本文件的路径。这样,脚本总是可以在库中找到其他脚本。
在本文中,我们将讨论获取正在运行的 PowerShell 脚本的当前位置的不同方法。
使用 Split-Path
Cmdlet 获取 PowerShell 脚本的当前位置
在 PowerShell 3 之前,没有更好的方法可以使用 Split-Path
cmdlet 查询 MyInvocation.MyCommand.Definition
属性。
Split-Path -Parent $($global:MyInvocation.MyCommand.Definition)
Split-Path
cmdlet 与 -Parent
参数一起使用以返回正在运行的脚本的当前目录。
值得注意的是,只有在保存的 PowerShell (.ps1
) 文件中包含上述语法时,这才有效。在命令行中运行上述语法将返回一个 Null
异常。
还值得注意的是,在 PowerShell 的集成脚本环境 (ISE) 中将上述语法作为选择运行(作为选择运行或按 F8)将触发 ParameterArgumentValidationErrorNullNotAllowed
或 Null 异常。
解决此问题的简单方法是调用 $psISE
变量并获取 CurrentFile.FullPath
属性,然后你可以从那里获取脚本的当前位置。请记住,在 PowerShell ISE 中进行测试时最好使用此语法。
Split-Path $psISE.CurrentFile.FullPath
使用 $PSScriptRoot
变量获取 PowerShell 脚本的当前位置
如果你运行的是 PowerShell 版本 3 或更高版本,则引入了一个自动变量来存储当前文件或模块的目录。
$PSScriptRoot
变量返回运行脚本的目录值。
$PSScriptRoot
获取 Windows PowerShell 中的工作目录以获取 PowerShell 脚本的当前位置
既然我们已经讨论了如何获取脚本的当前位置,那么学习获取脚本的当前工作目录并没有什么坏处。
在 Windows PowerShell v2 中,$ExecutionContext
变量包含 EngineIntrinsics
属性。你可以使用此变量和属性来查找可用于 cmdlet 的执行对象,包括正在运行的 Windows PowerShell 脚本的当前工作目录。
$ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath('.\')
但是,如果你运行的是最新版本的 Windows PowerShell,则引入了一个单独的 cmdlet 以方便操作。我们可以使用 Get-Location
cmdlet 并调用 Path
属性来获取脚本的当前工作目录。
(Get-Location).Path
Marion specializes in anything Microsoft-related and always tries to work and apply code in an IT infrastructure.
LinkedIn