Автоматическое заполнение словарной записи в PowerShell из входных аргументов командной строки - PullRequest
0 голосов
/ 08 октября 2018

В скрипте PowerShell у меня есть словарь (ввод переменных ниже), который я хочу заполнить из аргументов командной строки.

script to execute: ./win.ps1 -var1 <value> -var2 <value> -var3<value>

param($var1, $var2, $var3)
$input = @{"var1" = ""; "var2" = ""; "var3" = ""}

if ($var1){
       $input["var1"] = $var1}
if ($var2){
       $input["var2"] = $var2}
if ($var3){
       $input["var3"] = $var3}

Если у меня много аргументов, могу ли я автоматизировать описанную выше задачу заполненияЗапись словаря (может быть в цикле), при условии, что ключ словаря и имя переменной param, где мы получаем входные параметры, одинаковы.

Ответы [ 4 ]

0 голосов
/ 08 октября 2018

Вы можете использовать автоматическую переменную $ args и хеш-таблицу для хранения имени параметра и его значения.Вот так:

function Do-Things{

    $hashtable = @{}
    for ($i = 0; $i -lt $args.Count; $i += 2)
    { 
       $hashtable[$args[$i]] = $args[$i+1] 
    }
    $hashtable
}
$Results = Do-Things -af df -fds 421 -fgsd hfd
$Results

Вывод:

Name                           Value                                                                                                                                                               
----                           -----                                                                                                                                                               
-fds                           421                                                                                                                                                                 
-fgsd                          hfd                                                                                                                                                                 
-af                            df  

Вы также можете получить доступ к определенным клавишам:

$Results['-af']

Вывод:

df

Также, как уже упоминалось @ Lee_Dailey , не используйте $Input автоматическую переменную для хранения данных.

0 голосов
/ 08 октября 2018

Просто используйте переменную $ args и используйте ее для установки хеш-таблицы.Удалите param ($ var1, $ var2, $ var3) в ваш скрипт, в вашем случае это не обязательно

0 голосов
/ 08 октября 2018

вы используете $Input в качестве переменной.это автоматическая переменная, так что вы, скорее всего, НЕ делаете этого.вы, вероятно, получите очень странные результаты.

из Get-Help about_Automatic_Variables ...

$ Input Содержит перечислитель, который перечисляет все входные данные, которые передаются в функцию.Переменная $ input доступна только для функций и блоков скрипта (которые являются неназванными функциями).В блоке Process функции переменная $ input перечисляет объект, который в данный момент находится в конвейере.Когда блок Process завершается, в конвейере не остается никаких объектов, поэтому переменная $ input перечисляет пустую коллекцию.Если у функции нет блока Process, то в блоке End переменная $ input перечисляет совокупность всех входных данных функции.

надеюсь, что это поможет,
lee

0 голосов
/ 08 октября 2018

Я бы посоветовал вам поместить его в файл csv и передать файл в сценарий.

Name                           Value
----                           -----
var2                           2
var3                           3
var1                           1

И внутри вашего сценария

$HashTable = Import-Csv -Path $CSVPath | ForEach-Object -Process { @{$_.Name=$_.Value} }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...