添加输出流时,布尔函数更改返回的数据类型

时间:2015-08-27 18:56:53

标签: powershell

我在理解powershell的内部工作方面遇到了一些麻烦。举个例子。我有一个布尔函数(Test-MyCode),只要省略了Write-Output cmdlet,它就能正常工作。添加Write-Output cmdlet后,返回类型将更改为Object []数组。

.GetType()可用于查看数据类型。

为什么会这样?

ms-slide ms-sl-selected

1 个答案:

答案 0 :(得分:4)

来自NAME Write-Output SYNOPSIS Sends the specified objects to the next command in the pipeline. If the command is the last command in the pipeline, the objects are displayed in the console.

return

我认为您的主要困惑源于 PowerShell函数不会静态绑定返回某种类型这一事实。

C#关键字与Write-Ouput中的关键字不完全相同,但大致意味着:

  1. return关键字
  2. 后面的表达式结果上调用function Test-MyCode { if( 2 -gt 0) { New-Object psobject -Property @{ Message = "This function will return false" Result = $false } } else { New-Object psobject -Property @{ Message = "could return true if condition is changed" Result = $true } } } function Invoke-MyCode { Write-Host "this is main" Write-Host "do stuff" # Test-MyCode is configured to return false... yet its true if (($codetest = Test-MyCode).Result) { Write-Host $codetest.Message } } Invoke-MyCode
  3. 退出当前范围
  4. 有关详细信息,请参阅about_Returnabout_Functionsabout_Functions_OutputTypeAttribute帮助文件

    在上面的简单示例中,我会被创建一个包含字符串和结果的新自定义对象所吸引,但此“解决方案”的适用性可能会有所不同:

    Write-Output

    当我使用New-Object

    将对象“转储”到管道上时,请注意>是如何隐含的