自动词典条目从输入命令行参数填充PowerShell

时间:2018-10-08 05:32:51

标签: windows powershell

在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 :(得分:1)

您将$Input用作变量。那是一个自动变量,所以您很可能不愿意这样做。您可能会得到一些非常奇怪的结果。

来自Get-Help about_Automatic_Variables ...

  

$ Input       包含一个枚举器,该枚举器枚举传递给函数的所有输入。 $ input变量仅适用于函数和   脚本块(未命名的函数)。在过程块中   一个函数,$ input变量枚举的对象是   目前正在筹备中。当流程块完成时,   管道中没有剩余的对象,因此$ input变量枚举   一个空集合。如果该函数没有Process块,   然后在End块中,$ input变量枚举集合   该功能的所有输入。

希望有帮助,

答案 1 :(得分:0)

我建议您将其保存在一个csv文件中,并将该文件传递给脚本。

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

在脚本中

$HashTable = Import-Csv -Path $CSVPath | ForEach-Object -Process { @{$_.Name=$_.Value} }

答案 2 :(得分:0)

只需使用$ args变量,并将其用于设置哈希表。删除参数($ var1,$ var2,$ var3) 放入脚本中,对于您而言,这不是必需的

答案 3 :(得分:0)

您可以使用$ 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自动变量来保存数据。