Niklas J. MacDowall
Niklas J. MacDowall

Reputation: 683

create a new variable for each loop in a foreach-loop

How can I put $org into an array together with $count?

Like this example array:

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

Another example:

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

Example foreach:

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

The above will display:

1 SampleOrg
2 AnotherSampleOrg

Select 1-2:

What I would like to do afterwards is to put the array to use in a switch.

Example:

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

Upvotes: 2

Views: 3792

Answers (2)

Scott Weinstein
Scott Weinstein

Reputation: 19117

Looks like you're confusing arrays and Hashtables. Arrays are ordered, and indexed by an numeric value. Hashtables are associative, and indexed by any value that has equality defined.

This is array syntax

$arr = @(1,2,3)

and this is Hashtable syntax

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

For your question, the following will work

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

this will create a 0 based array, mapping int -> OrgName, so

$orgs[$answer]

will get the correct name. Or if you're using 1 based indexing

$orgs[$answer-1]

Note, I removed the switch, as there's no reason for it.

Upvotes: 4

Ocaso Protal
Ocaso Protal

Reputation: 20267

You have to initialize your hashtable somewhere before the loop:

$myArray = @{} 

and add a

$myArray.Add($count, $org)

to your foreach-loop.

EDIT: For the discussion about hastable/array see the whole thread ;) I just kept the name of the variable from the original posting

Upvotes: 4

Related Questions