布尔变量作为Object []返回

use*_*210 3 powershell boolean return-value

我有一个返回布尔变量的函数

function test ($param1, $param2)
{
  [boolean]$match=$false;

  <# function logic #>

  return $match
}
Run Code Online (Sandbox Code Playgroud)

当我尝试在变量$ retByFunct = testing $ param1 $ param 2中捕获函数调用时

我将$ retByFunct作为对象数组获取.如果我尝试强制$ retByFunct是一个布尔变量,即[boolean] $ retByFunct = testing $ param1 $ param 2,我得到以下错误.

无法将值"System.Object []"转换为System.Boolean类型

我在返回之前检查了$ match.GetType().控制台说它是一个布尔值,所以我很困惑为什么在函数调用后它被转换为一个Object Array.

我知道这对于某些集合对象会发生,并且有一个解决方法,但我如何处理变量的情况?

Ans*_*ers 7

正如@mjolinor所说,你需要显示其余的代码.我怀疑它在某处成功输出流上生成输出.PowerShell函数返回该流上的所有输出,而不仅仅是return关键字的参数.两者之间没有区别

function Foo {
  'foo'
}
Run Code Online (Sandbox Code Playgroud)

要么

function Foo {
  'foo'
  return
}
Run Code Online (Sandbox Code Playgroud)

要么

function Foo {
  return 'foo'
}
Run Code Online (Sandbox Code Playgroud)

上述每个函数return在调用时都会返回字符串.

附加输出导致返回的值为数组,例如:

function Foo {
  $v = 'bar'
  Write-Output 'foo'
  return $v
}
Run Code Online (Sandbox Code Playgroud)

此函数返回一个数组foo.

您可以通过将其重定向到'foo', 'bar'以下内容来抑制不需要的输出:

function Foo {
  $v = 'bar'
  Write-Output 'foo' | Out-Null
  Write-Output 'foo' >$null
  return $v
}
Run Code Online (Sandbox Code Playgroud)

或者通过在变量中捕获它:

function Foo {
  $v = 'bar'
  $captured = Write-Output 'foo'
  return $v
}
Run Code Online (Sandbox Code Playgroud)