Это потому, что вы не передаете строковый массив. Вы передаете массив объектов. Поскольку массив объектов не определен явно, он пытается интерпретировать его с помощью первого конструктора.
Использование:
class MyClass{
MyClass([string] $foo) { Write-Host "1 $foo" }
MyClass([string[]] $bar) { Write-Host "2 $($bar)" }
}
например:.
PS C:\> $myValue = @("myvalue")
PS C:\> $myValue.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True Object[] System.Array
PS C:\> [MyClass]::new($myValue)
1 myvalue
Если вы явно определите его как строковый массив, то он будет работать как положено:
PS C:\> [string[]] $strArr = @("strarr")
PS C:\> $strArr.GetType()
IsPublic IsSerial Name BaseType
-------- -------- ---- --------
True True String[] System.Array
PS C:\> [MyClass]::new($strArr)
2 strarr