powershell修改'\';和invoke.ps1

powershell修改'\';和invoke.ps1,powershell,path,environment-variables,Powershell,Path,Environment Variables,我试图调用一个powershell脚本,该脚本反过来运行各种.SQL文件。 它看起来像这样: 脚本1(调用\u createdb.ps1): 脚本2(createdb.ps1): 这在原则上看起来很简单,如果第二个脚本自己运行,它就可以工作。 当第2个脚本被第1个脚本调用时,就会出现我遇到的问题,因为“.\”不再是相对的,并且会中断。它将无法使用\找到任何内容 不可能修改“Script2”,因为它需要在其他场景中相对于自身运行,并使用其他过程定期更新,但我需要在第一个脚本中调用它 我尝试修改$e

我试图调用一个powershell脚本,该脚本反过来运行各种.SQL文件。 它看起来像这样:

脚本1(调用\u createdb.ps1):

脚本2(createdb.ps1):

这在原则上看起来很简单,如果第二个脚本自己运行,它就可以工作。 当第2个脚本被第1个脚本调用时,就会出现我遇到的问题,因为“.\”不再是相对的,并且会中断。它将无法使用
\
找到任何内容

不可能修改“Script2”,因为它需要在其他场景中相对于自身运行,并使用其他过程定期更新,但我需要在第一个脚本中调用它

我尝试修改
$env:PATH
$env:ROOT
变量,但没有成功

有人知道我可以(1)调用第二个脚本,同时(2)设置相对路径,以便在调用时成功运行的干净方法吗

谢谢你的帮助


编辑:我已通过将第二个脚本中提到的
\
修改为一个明确的UNC路径,暂时测试成功,但如上所述,在其他环境中运行时,脚本不会运行。

为什么不在调用脚本之前更改当前目录

...
Push-Location $scriptPath
$scriptPath\createdb.ps1 -dbInstance $dbInstance -dbUser $dbUser -dbPassword $dbPassword -dbName $dbName
Pop-Location
param
(
$dbInstance = $(Read-Host "database server"),
$dbaUser = $(Read-Host "dba user"),
$dbaPassword = $(Read-Host "password of dba user"),
$dbName = $(Read-Host "Database Name")
)

Invoke-Expression "sqlcmd.exe -S $dbInstance -U $dbaUser -P $dbaPassword -i .\create.sql"
Invoke-Expression "sqlcmd.exe -S $dbInstance -d $dbName -U $dbaUser -P $dbaPassword -i .\MSSQLScripts\Create\TABLES.SQL"

$storedProcedures = Get-ChildItem .\MSSQLScripts\Shared\*.sql
foreach ($storedProcedure in $storedProcedures)
{  
Invoke-Expression "sqlcmd.exe -S $dbInstance -d $dbName -U $dbaUser -P $dbaPassword -i $storedProcedure"
}
...
Push-Location $scriptPath
$scriptPath\createdb.ps1 -dbInstance $dbInstance -dbUser $dbUser -dbPassword $dbPassword -dbName $dbName
Pop-Location