如何获取PowerShell脚本的文件系统位置?

时间:2010-09-08 11:31:26

标签: powershell batch-file

我有一个位于D:\temp的PowerShell脚本。

当我运行此脚本时,我希望列出该文件的当前位置。我该怎么做?

例如,此代码将在DOS批处理文件中完成;我正在尝试将其转换为PowerShell脚本......

FOR /f "usebackq tokens=*" %%a IN ('%0') DO SET this_cmds_dir=%%~dpa
CD /d "%this_cmds_dir%"

4 个答案:

答案 0 :(得分:123)

PowerShell 3 +

正在运行的脚本的路径是:

$PSCommandPath

其目录是:

$PSScriptRoot

PowerShell 2

正在运行的脚本的路径是:

$MyInvocation.MyCommand.Path

其目录是:

$PSScriptRoot = Split-Path $MyInvocation.MyCommand.Path -Parent

答案 1 :(得分:10)

Roman Kuzmin回答了这个问题。我只想补充一点,如果你导入一个模块(通过Import-Module),你可以在模块中访问$PsScriptRoot自动变量 - 它将告诉你模块的位置。

答案 2 :(得分:0)

对于它的价值,我发现这对我在脚本和PowerShell ISE中的PowerShell V5上都有效:

try {
    $scriptPath = $PSScriptRoot
    if (!$scriptPath)
    {
        if ($psISE)
        {
            $scriptPath = Split-Path -Parent -Path $psISE.CurrentFile.FullPath
        } else {
            Write-Host -ForegroundColor Red "Cannot resolve script file's path"
            exit 1
        }
    }
} catch {
    Write-Host -ForegroundColor Red "Caught Exception: $($Error[0].Exception.Message)"
    exit 2
}

Write-Host "Path: $scriptPath"

HTH

P.S。包括完整的错误处理。相应地调整您的需求。

答案 3 :(得分:0)

这里是一个例子:

$ScriptRoot = ($ScriptRoot, "$PSScriptRoot" -ne $null)[0]
import-module $ScriptRoot\modules\sql-provider.psm1
Import-Module $ScriptRoot\modules\AD-lib.psm1 -Force