在PowerShell中,如何使用Read-Host输入来获取参数值

时间:2012-01-05 23:23:45

标签: powershell

我有一个脚本,其中包含一些数据库连接字符串的参数列表。该脚本执行以下操作:

  • 使用“Read-Host”
  • 将数据库名称作为输入
  • 使用输入来满足任何If / ElseIf条件并且......
    • 连接到数据库
    • 运行SQL脚本以更新db

以下是一些示例代码:

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的输入从连接字符串的参数列表中获取值。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

你在做什么等同于:

(gc $SQL_Path\$Environment"_sometable.sql") | 
    sqlplus (get-variable "$($Environment)_ConnectStr").value

答案 1 :(得分:0)

您应该将每个参数重构为必需参数:[Parameter(Mandatory = $ true)]并将它们设为ValueFromPipelineByPropertyName。然后,您可以使用Import-CSV之类的东西从数据文件中读取这些内容。

希望这有助于