powershell修改'。\'并调用.ps1

时间:2013-12-11 13:22:19

标签: powershell path environment-variables

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

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路径来暂时测试成功,但是如上所述,在其他环境中运行时脚本将不会运行。< /强>

1 个答案:

答案 0 :(得分:2)

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

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