2013-12-11 51 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