PowerShell 函数不会返回对象

Posted

技术标签:

【中文标题】PowerShell 函数不会返回对象【英文标题】:PowerShell function won't return object 【发布时间】:2011-02-27 00:18:10 【问题描述】:

我有一个创建通用列表的简单函数:

function test()

    $genericType = [Type] "System.Collections.Generic.List``1"
    [type[]] $typedParameters = ,"System.String"
    $closedType = $genericType.MakeGenericType($typedParameters)
    [Activator]::CreateInstance($closedType)


$a = test

问题是$a 无论我尝试什么都始终为空。如果我在函数之外执行相同的代码,它可以正常工作。

想法?

【问题讨论】:

【参考方案1】:

恕我直言,这是陷阱 #1。如果您从函数返回一个以某种方式可枚举的对象(我不确切知道实现IEnumerable 是否是唯一的情况),PowerShell 会展开该对象并返回其中的项目。

您新创建的列表是空的,因此没有返回任何内容。为了让它工作,只需使用这个:

,[Activator]::CreateInstance($closedType)

这将创建一个展开的单项数组,并将该项(通用列表)分配给$a

更多信息

以下是类似问题的列表,可帮助您了解正在发生的事情:

Powershell pitfalls Avoiding Agnostic Jagged Array Flattening in Powershell Strange behavior in PowerShell function returning DataSet/DataTable What determines whether the Powershell pipeline will unroll a collection?

注意:你不需要用括号声明函数头。如果需要添加参数,函数如下所示:

function test 
 param($myParameter, $myParameter2)

function  
param(
  [Parameter(Mandatory=true, Position=0)]$myParameter,
  ... again $myParameter2)
...

【讨论】:

逗号!哦。谢谢,这些天我会做对的。【参考方案2】:

使用泛型的更简单方法。虽然这并没有直接解决 [Activator] 方法

Function test

    New-Object "system.collections.generic.list[string]"


(test).gettype()

【讨论】:

以上是关于PowerShell 函数不会返回对象的主要内容,如果未能解决你的问题,请参考以下文章

定义接受 PSCredential 对象的 Powershell 函数,但如果它为空则不会提示?

Powershell函数意外地不返回任何对象

PowerShell入门学习

python使用numpy的np.power函数计算numpy数组中每个数值的指定幂次(例如平方立方)np.power函数默认返回整数格式np.float_power函数默认返回浮点数

python使用numpy的np.float_power函数计算numpy数组中每个数值的指定幂次(例如平方立方)np.power函数默认返回整数格式np.float_power函数返回浮点数

PowerShell ISE:调试从 power-shell 脚本调用的另一个 power-shell 脚本