簡體   English   中英

從輸入命令行參數在 PowerShell 中自動填充字典條目

[英]Automated dictionary entry filling in PowerShell from input command line arguments

在 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 變量名稱,我們接收輸入參數的位置相同。

您正在使用$Input作為變量。 這是一個自動變量,因此您可能不會這樣做。 你可能會得到一些非常奇怪的結果。

來自Get-Help about_Automatic_Variables ...

$Input 包含一個枚舉器,用於枚舉傳遞給函數的所有輸入。 $input 變量僅可用於函數和腳本塊(它們是未命名的函數)。 在函數的 Process 塊中, $input 變量枚舉當前在管道中的對象。 當 Process 塊完成時,管道中沒有剩余的對象,因此 $input 變量枚舉一個空集合。 如果函數沒有 Process 塊,則在 End 塊中, $input 變量枚舉函數的所有輸入的集合。

希望有幫助,

我建議你把它放在一個 csv 文件中並將文件傳遞給腳本。

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

在你的腳本中

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

只需使用 $args 變量,並將其用於設置哈希表。 將 param($var1, $var2, $var3) 刪除到您的腳本中,在您的情況下不需要

您可以使用 $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自動變量來保存數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM