I have a function which is returning a boolean variable
function test ($param1, $param2)
{
[boolean]$match=$false;
<# function logic #>
return $match
}
when I try and catch the function call in a variable $retByFunct=testing $param1 $param 2
I am getting $retByFunct as an Object Array. If I try and force the $retByFunct to be a boolean variable i.e. [boolean] $retByFunct=testing $param1 $param 2, I get the following error.
Cannot convert value "System.Object[]" to type System.Boolean
I checked out $match.GetType() just before returning it. The console says its a boolean, so am confused as to why after function call its getting converted to an Object Array.
I am aware this happens for some collection objects and there is a work around for that, but how do I handle a case for a variable?
As @mjolinor said, you need to show the rest of your code. I suspect it's generating output on the success output stream somewhere. PowerShell functions return all output on that stream, not just the argument of the return
keyword. From the documentation:
In PowerShell, the results of each statement are returned as output, even without a statement that contains the Return keyword. Languages like C or C# return only the value or values that are specified by the
return
keyword.
There's no difference between
function Foo {
'foo'
}
or
function Foo {
'foo'
return
}
or
function Foo {
return 'foo'
}
Each of the above functions returns the string foo
when called.
Additional output causes the returned value to be an array, e.g.:
function Foo {
$v = 'bar'
Write-Output 'foo'
return $v
}
This function returns an array 'foo', 'bar'
.
You can suppress undesired output by redirecting it to $null
:
function Foo {
$v = 'bar'
Write-Output 'foo' | Out-Null
Write-Output 'foo' >$null
return $v
}
or by capturing it in a variable:
function Foo {
$v = 'bar'
$captured = Write-Output 'foo'
return $v
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With