1

我有一个 PowerShell 脚本,它在程序的开头设置一个值的限制。例如

$value1Min      = 1
$value1Max      = 99
$value1Interval = 100
$value1Post     = 125

现在我希望能够处理任意数量的值,但我不需要为每个值复制代码。如何为每个值创建参数列表?例如(伪代码)。

$info={{min      = 1
        max      = 99
        interval = 100
        post     = 125
       },
       {min      = 100
        max      = 1000
        interval = 10000
        post     = 548
       },
       {min      = 50
        max      = 100
        interval = 500
        post     = 452
       }
      }

我在 PowerShell 方面不是很有经验

4

2 回答 2

4

您可以创建一个包含这样的哈希表的数组:

$info=@(
    @{
    "min"      = 1;
    "max"      = 99;
    "interval" = 100;
    "post"     = 125;
   },
   @{
    "min"      = 100;
    "max"      = 1000;
    "interval" = 10000;
    "post"     = 548;
   },
   @{
    "min"      = 50;
    "max"      = 100;
    "interval" = 500;
    "post"     = 452;
   }
  )

如何获取值的示例:

PS C:\Users\stackoverflow> $info[0].interval
100

您还可以创建一个包含哈希表的哈希表:

$info=@{
    "info1"=@{
    "min"      = 1;
    "max"      = 99;
    "interval" = 100;
    "post"     = 125;
   };
   "info2"=@{
    "min"      = 100;
    "max"      = 1000;
    "interval" = 10000;
    "post"     = 548;
   };
   "info3"=@{
    "min"      = 50;
    "max"      = 100;
    "interval" = 500;
    "post"     = 452;
   }
  }

如何获取值的示例:

PS C:\Users\stackoverflow> $info.info1.max
99
于 2012-04-20T11:05:57.340 回答
1

您可以从 xml 文件导入参数并通过豪华对象访问它们。

示例:XML 文件 val.xml:

<Param>
    <Param1 min= '1' max= '99' interval = '100' post = '125'>
      </Param1>
      <Param2 min= '100' max= '1000' interval = '10000' post= '548'>
       </Param2>
       <Param3 min= '50' max='100' interval='500' post= '452'>
    </Param3>
</Param>

使用以下命令将 xml 文件导入您的 powershell 控制台:

$xml = [xml](Get-Content val.xml)

现在您可以像这样访问您的数据:

$xml.Param

输出 :

Param1                          Param2                          Param3                        
------                          ------                          ------                        
Param1                          Param2                          Param3  

如果要获取 param1 值:

$xml.Param.Param1

输出:

min                     max                     interval                post                  
---                     ---                     --------                ----                  
1                       99                      100                     125  

然后 $xml.Param.Param1.min ...等

当您将在代码中使用值时,请注意类型。例子 :

PS > $xml.Param.Param1.min.gettype()

IsPublic IsSerial Name                                     BaseType                           
-------- -------- ----                                     --------                           
True     True     String                                   System.Object  

您可能需要强制进行一些类型转换。

于 2012-04-20T11:32:54.643 回答