Как передать аргумент скрипту PowerShell, чтобы он соответствовал столбцу в CSV-файле - PullRequest
0 голосов
/ 29 мая 2018
$current_pc     = "$env:computername"
$filePath      = "c:\users\Ara\Desktop\parameters.csv"
$machineParams = Import-CSV $filePath
$info          = if($machineParams){$machineParams | where {$_.branch -eq $($current_pc.Substring($current_pc.length - 3,3))}}
             else{write-output "CSV not loaded"}
$info

Start-Process -FilePath "c:\users\Ara\Desktop\setup.msi"  -ArgumentList “/qf”, "DATABASE_ID=$($info.param1)" , "ODBC_DATABASE_NAME=$($info.ODBC_param2)" ,  "ODBC_ENGINE_NAME=$($info.param3)" -wait

CSV-файл выглядит следующим образом

branch param1 param2  param3
------ ------ ------  ------
188    apr101 1.0.0.1 0
101    apr104 1.0.0.1 1

Мой вопрос: какую логику я должен включить в скрипт?для запуска install.ps1 -188 требуются значения около 188 в CSV-файле

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Вы можете использовать блок param и определить идентификатор по умолчанию как подстроку имени компьютера.

param (
    $ID = (@($ENV:computername) | ForEach-Object {$_.Substring($_.length - 3,3)})
)
$filePath      = "c:\users\Ara\Desktop\parameters.csv"
$machineParams = Import-CSV $filePath | Where-Object {$_.branch -eq $ID}
$info          = if ($machineParams) {
                    $machineParams
                } else {
                    # Use a throw to error out when invalid csv 
                    throw "no params for $ID"
                }
$info

Start-Process -FilePath "c:\users\Ara\Desktop\setup.msi"  -ArgumentList “/qf”, "DATABASE_ID=$($info.param1)" , "ODBC_DATABASE_NAME=$($info.ODBC_param2)" ,  "ODBC_ENGINE_NAME=$($info.param3)" -wait

Затем вы можете вызвать свой скрипт, и когда вы определите параметр ID, он переопределит схему по умолчанию, а при вызове без будет использовать схему имени компьютера.

# Use computername scheme
install.ps1
# Use defined ID
install.ps1 -ID 188

Редактировать:Обновлено с помощью предложений @LotPings для фильтрации ранее

0 голосов
/ 29 мая 2018

Я бы прочитал только параметры для $current_pc

## Q:\Test\2018\05\29\SO_50590213.ps1
$current_pc     = "$env:computername"
$CurrBranch     = $current_pc.Substring($current_pc.length-3,3)
$filePath       = "c:\users\Ara\Desktop\parameters.csv"
$machineParams  = Import-CSV $filePath | where {$_.branch -eq $CurrBranch}
$info = if($machineParams){
    $machineParams
} else {
    write-output "no params for $CurrBranch"
}
$info

Start-Process -FilePath "c:\users\Ara\Desktop\setup.msi"  `
  -ArgumentList “/qf”, "DATABASE_ID=$($info.param1)", `
  "ODBC_DATABASE_NAME=$($info.ODBC_param2)", `
  "ODBC_ENGINE_NAME=$($info.param3)" -wait

Пример вывода (это имя шт заканчивается 610)

branch param1 param2  param3
------ ------ ------  ------
610    aprxxx 1.0.0.1 1

или без соответствующей ветви в файле

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