我在理解powershell的内部工作方面遇到了一些麻烦。举个例子。我有一个布尔函数(Test-MyCode),只要省略了Write-Output cmdlet,它就能正常工作。添加Write-Output cmdlet后,返回类型将更改为Object []数组。
.GetType()可用于查看数据类型。
为什么会这样?
ms-slide ms-sl-selected
答案 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
中的关键字不完全相同,但大致意味着:
return
关键字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
有关详细信息,请参阅about_Return
,about_Functions
和about_Functions_OutputTypeAttribute
帮助文件
在上面的简单示例中,我会被创建一个包含字符串和结果的新自定义对象所吸引,但此“解决方案”的适用性可能会有所不同:
Write-Output
当我使用New-Object
>
是如何隐含的