Reputation: 1962
I am not able to run this simple powershell program
[int]$st1 = $input[0]
[int]$st2 = $input[1]
[int]$st3 = $input[2]
[int]$pm = $input[3]
[int]$cm = $input[4]
$MedMarks = $st1 + $st2 + $st3 - ($pm + $cm)
Write-Host "Med Marks $MedMarks"
I am trying to run it with input pipeline like this
120, 130, 90, 45, 30 | .\sample_program.ps1
I am consistently getting this error
Cannot convert the "System.Collections.ArrayList+ArrayListEnumeratorSimple" value of type
"System.Collections.ArrayList+ArrayListEnumeratorSimple" to type "System.Int32".
Upvotes: 0
Views: 176
Reputation: 22122
If you inspect $input
like this:
PS> function f { $input.GetType().FullName } f
System.Collections.ArrayList+ArrayListEnumeratorSimple
then you can notice, that $input
is not a collection, but an enumerator for one. So, you do not have random access with indexer for bare $input
. If you really want to index $input
, then you need to copy its content into array or some other collection:
$InputArray = @( $input )
then you can index $InputArray
as normal:
[int]$st1 = $InputArray[0]
[int]$st2 = $InputArray[1]
[int]$st3 = $InputArray[2]
[int]$pm = $InputArray[3]
[int]$cm = $InputArray[4]
Upvotes: 1
Reputation: 174485
You can't index into $input
like that.
You can utilize ForEach-Object
:
$st1,$st2,$st3,$pm,$cm = $input |ForEach-Object { $_ -as [int] }
or (preferably), use named parameters:
param(
[int]$st1,
[int]$st2,
[int]$st3,
[int]$pm,
[int]$cm
)
$MedMarks = $st1 + $st2 + $st3 - ($pm + $cm)
Write-Host "Med Marks $MedMarks"
Upvotes: 3