Powershell Invoke-Sqlcmd working directory



我在文件夹结构中有一个Powershell脚本,如下所示:

── Versions/
└── v025/
└── v025.sql
Update.ps1
RunScript.sql

Update.ps1 文件包含以下命令

Invoke-SqlCmd -InputFile "./RunScript.sql" -ServerInstance $server -Database $database -Username $user -Password $pass

RunScript.sql 具有以下内容:

:r v025v025.sql

执行的结果消息为:

Invoke-SqlCmd : Cannot find path 'v025v025.sql' because it does not exist.

为什么会这样?文件位置正确。

有什么想法吗?

在几个线程中搜索了很多之后,我终于找到了这个问题的解决方案。

通常,Powershell 在当前位置运行命令,你可以使用Get-Location获取命令。但是,由于某种原因,Invoke-Sqlcmd[Environment]::CurrentDirectory中运行。这通常设置为终端进程启动的路径,但在执行Set-Location/cd时不会遵循。

若要使Invoke-Sqlcmd在特定目录中执行,请将[Environment]::CurrentDirectory设置为该位置。下面是一个示例,它将其设置为当前位置/文件夹(假设您要从那里执行(,然后在命令完成后将其设置回来:

$OriginalDirectory = [Environment]::CurrentDirectory
[Environment]::CurrentDirectory = Get-Location
Invoke-Sqlcmd <your parameters here>
[Environment]::CurrentDirectory = $OriginalDirectory

假设是窗口,您可能想尝试使用 .\v025\v025.sql

另外,我可能是错的,但我认为 Invoke-sqlCmd -InputFile "./RunScript.sql">

应该是

Invoke-SqlCmd -InputFile ".\RunScript.sql">

最新更新