met*_*ter 4 powershell attributes analyzer
波纹管是一个示例函数,它声明OutputType.
我知道这仅用于文档目的,但这里的问题是当我调用 PSScriptAnalyzer 时:
invoke-scriptanalyzer . -IncludeRule PSUseOutputTypeCorrectly
Run Code Online (Sandbox Code Playgroud)
它会告诉我:
cmdlet“Test-Function”返回“System.Object[]”类型的对象,但该类型未在 OutputType 属性中声明。
function Test-Function
{
[CmdletBinding()]
[OutputType([System.Management.Automation.PSCustomObject[]])]
param ()
[PSCustomObject[]] $TestObject = @()
for ($i = 0; $i -lt 5; $i++)
{
$TestObject += [PSCustomObject]@{
Key1 = "Value1"
Key2 = "Value2"
}
}
return $TestObject
}
Run Code Online (Sandbox Code Playgroud)
问题是我怀疑此信息是误报,但无法确认。
我想我声明这个OutputType属性很好,或者也许不是?
为什么我需要指定[OutputType([System.Object[]])]为输出类型?如果我回来的话PSCustomObject[]?
除非另有说明,否则return管道会枚举函数中的任何内容,因此,例如,当您将任何内容分配给变量时,您的意愿[psobject[]]已被“解包”并塞回到动态大小中[object[]]。
Write-Output -NoEnumerate如果您想按原样返回可枚举集合,请使用:
function Test-Function
{
[CmdletBinding()]
[OutputType([System.Management.Automation.PSCustomObject[]])]
param ()
[PSCustomObject[]] $TestObject = @()
for ($i = 0; $i -lt 5; $i++)
{
$TestObject += [PSCustomObject]@{
Key1 = "Value1"
Key2 = "Value2"
}
}
Write-Output $TestObject -NoEnumerate
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1521 次 |
| 最近记录: |