В PowerShell как использовать вход Read-Host для получения значения параметра - PullRequest
0 голосов
/ 06 января 2012

У меня есть скрипт, который содержит список параметров строк подключения к некоторым базам данных.Сценарий выполняет следующие действия:

  • Принимает имя базы данных в качестве ввода, используя «Read-Host»
  • Использует ввод для удовлетворения любого из условий If / ElseIf и ...
    • подключается к базе данных
    • запускает сценарий SQL для обновления БД

Вот пример кода:

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, но я не могу передать в строке подключения БД.

Я хочу сделать что-то вроде этого:

function Invoke-SqlPlus($file) { (gc $file) | sqlplus $Environment_ConnectStr }
new-alias sql Invoke-SqlPlus
sql $SQL_Path\$Environment"_sometable.sql"

Однако я не уверен, как я могу использовать вход из Read-Host, чтобы получить значение из списка параметров дляСтрока подключения.Как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 06 января 2012

То, что вы делаете, эквивалентно этому:

(gc $SQL_Path\$Environment"_sometable.sql") | 
    sqlplus (get-variable "$($Environment)_ConnectStr").value
0 голосов
/ 06 января 2012

Вы должны сделать рефакторинг каждого из этих параметров обязательным: [Parameter (Mandatory = $ true)] и сделать их ValueFromPipelineByPropertyName.Затем вы можете использовать что-то вроде Import-CSV, чтобы прочитать их из файла данных.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...