Flagg93
Flagg93

Reputation: 1

Why is my array parameter getting forced into a string at position 0 in Powershell?

This is a stripped down version of the code I need to run. I've been able to determine, with this test code, that it's happening as soon as the array enters the function. Am I doing something wrong when I pass the array? This seems like it should be simple, but I'm stuck. Doing Return ,$List doesn't make any difference.

Script:

function ProcessSkills{
    param([Object[]]$List)
    Write-Host $List.GetType()
    Write-Host $List.Count
    Write-Host $List
    $List += 11
    Write-Host $List.GetType()
    Write-Host $List.Count
    Write-Host $List
    return $List
}

$skillList = @()
Write-Host
Write-Host "Start"
Write-Host 
Write-Host $skillList.GetType()
Write-Host $skillList
Write-Host $skillList.Count
$newSkillList = ProcessSkills -$skillList $skillList
$skillList = $newSkillList
Write-Host $skillList.GetType()
Write-Host $skillList
Write-Host $skillList.Count
$newSkillList = ProcessSkills -$skillList $skillList
$skillList = $newSkillList
Write-Host $skillList.GetType()
Write-Host $skillList
Write-Host $skillList.Count
$newSkillList = ProcessSkills -$skillList $skillList
$skillList = $newSkillList
Write-Host $skillList.GetType()
Write-Host $skillList
Write-Host $skillList.Count

Output:

Start

System.Object[]

0
System.Object[]
1
-
System.Object[]
2
- 11
System.Object[]
- 11
2
System.Object[]
1
-- 11
System.Object[]
2
-- 11 11
System.Object[]
-- 11 11
2
System.Object[]
1
--- 11 11
System.Object[]
2
--- 11 11 11
System.Object[]
--- 11 11 11
2

Upvotes: 0

Views: 49

Answers (1)

Donald Koscheka
Donald Koscheka

Reputation: 351

Does this address the problem?

function ProcessSkills{
    param([Object[]]$List)
    $List += 11
    return ,$List
}

$skillList = @()
$skillList = ProcessSkills  $skillList
$skillList = ProcessSkills  $skillList
$skillList = ProcessSkills  $skillList

Upvotes: 1

Related Questions