我在文件夹结构中有一个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">