我有一个脚本,其中包含一些数据库连接字符串的参数列表。该脚本执行以下操作:
以下是一些示例代码:
param (
# Connection Strings
[string] $TestDb1_ConnectStr = "username/pwd@//hostname1:port1/sid1",
[string] $TestDb2_ConnectStr = "username/pwd@//hostname2:port2/sid2",
[string] $TestDb3_ConnectStr = "username/pwd@//hostname2:port3/sid3",
[string] $SQL_Path = "C:\bin\sql"
)
$Environment = Read-Host "Please enter environment name..."
If ($Environment -eq "TestDb1")
{
function Invoke-SqlPlus($file) { (gc $file) | sqlplus $TestDb1_ConnectStr }
new-alias sql Invoke-SqlPlus
sql $SQL_Path\$Environment"_sometable.sql"
}
ElseIf ($Environment -eq "TestDb2")
{
function Invoke-SqlPlus($file) { (gc $file) | sqlplus $TestDb2_ConnectStr }
new-alias sql Invoke-SqlPlus
sql $SQL_Path\$Environment"_sometable.sql"
}
ElseIf ($Environment -eq "TestDb3")
{
function Invoke-SqlPlus($file) { (gc $file) | sqlplus $TestDb3_ConnectStr }
new-alias sql Invoke-SqlPlus
sql $SQL_Path\$Environment"_sometable.sql"
}
...
我实际上有14个可以连接的数据库,而不是有14个单独的If / ElseIf条件,我希望能够使用Read-Host的输入来传递连接字符串和SQL脚本。目前我可以使用输入传入SQL脚本,但我无法传入db连接字符串。
我想做这样的事情:
function Invoke-SqlPlus($file) { (gc $file) | sqlplus $Environment_ConnectStr }
new-alias sql Invoke-SqlPlus
sql $SQL_Path\$Environment"_sometable.sql"
但是,我不确定如何使用Read-Host的输入从连接字符串的参数列表中获取值。我怎样才能做到这一点?
答案 0 :(得分:1)
你在做什么等同于:
(gc $SQL_Path\$Environment"_sometable.sql") |
sqlplus (get-variable "$($Environment)_ConnectStr").value
答案 1 :(得分:0)
您应该将每个参数重构为必需参数:[Parameter(Mandatory = $ true)]并将它们设为ValueFromPipelineByPropertyName。然后,您可以使用Import-CSV之类的东西从数据文件中读取这些内容。
希望这有助于