在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变量名称相同。
答案 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
自动变量来保存数据。