2013-12-11 50 views
2

我试图调用一个powershell脚本,该脚本依次运行各种.SQL文件。 它看起来是这样的:powershell修改'。'并调用.ps1

SCRIPT1(Invoke_createdb.ps1):

$scriptPath = "C:\scriptpath" 
$dbUser = "dbuser1" 
$dbPassword = "dbpassword1" 
$dbInstance = "dbserver1" 
$dbName = "Database1" 
& $scriptPath\createdb.ps1 -dbInstance $dbInstance -dbUser $dbUser -dbPassword $dbPassword -dbName $dbName 

SCRIPT2(createdb.ps1):

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" 
} 

这似乎原理简单,如果第二工程脚本是独立运行的。 当第二个脚本被第一个脚本调用时,我出现了这个问题,因为'。\'不再是相对的并且中断。它变得无法使用.\找到任何东西。

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

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

有谁知道一个干净的方式,我可以(1)调用第二个脚本,并在同一时间(2)设置相对路径,以便它调用时成功运行?

感谢您的任何帮助。

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

回答

2

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

... 
Push-Location $scriptPath 
$scriptPath\createdb.ps1 -dbInstance $dbInstance -dbUser $dbUser -dbPassword $dbPassword -dbName $dbName 
Pop-Location 
+0

This works great! 谢谢! – Kareem