为foreach循环中的每个循环创建一个新变量

时间:2011-08-08 12:32:06

标签: arrays powershell foreach

如何将$ org与$ count一起放入数组?

像这个示例数组:

$myArray = @{
  1="SampleOrg";
  2="AnotherSampleOrg"
}

另一个例子:

$myArray = @{
  $count="$org";
  $count="$org"
}

foreach示例:

$count=0;get-organization | foreach {$count++; $org = $_.Name.ToString();write-host $count  -nonewline;write-host " $org"}
$answer = read-host "Select 1-$count"

以上将显示:

1 SampleOrg
2 AnotherSampleOrg

Select 1-2:

之后我想做的是将数组用于交换机。

示例:

switch ($answer)
   {
     1 {$org=myArray[1]} #<-- or whatever that corresponds to "SampleOrg"
     2 {$org=myArray[2]} #<-- or whatever that corresponds to "AnotherSampleOrg"
   }

2 个答案:

答案 0 :(得分:4)

看起来你混淆了数组和Hashtables。数组是有序的,并由数值索引。 Hashtables是关联的,并由任何定义相等的值索引。

这是数组语法

$arr = @(1,2,3)

这是Hashtable语法

$ht = @{red=1;blue=2;}

对于您的问题,以下内容将起作用

$orgs = @(get-organization | % { $_.Name })

这将创建一个基于0的数组,映射int - &gt; OrgName,所以

$orgs[$answer]

将获得正确的名称。或者,如果您使用的是基于索引的

$orgs[$answer-1]

注意,我删除了开关,因为没有理由。

答案 1 :(得分:4)

您必须在循环之前的某处初始化哈希表:

$myArray = @{} 

并添加

$myArray.Add($count, $org)

到你的foreach循环。

编辑:关于hastable / array的讨论请参阅整个帖子;)我只是保留了原始帖子中变量的名称