如何在PowerShell中将对象类型集合作为参数传递给函数?

时间:2013-01-29 00:48:01

标签: function powershell parameter-passing

这是我的代码:

function Get-OSInfo {
    param([string]$Computer)
    $OS = gwmi -class Win32_OperatingSystem -computer $Computer
    $OS | Add-Member –MemberType NoteProperty –Name OSType –Value ""
    $OS.OSType = Get-OSType -Input $OS
    write $OS
}

function Get-OSType {
    param([?]$Input)
    if ($Input.ProductType -eq 1) {
        write "Client OS"
    }
}

$blah = Get-OSInfo -Computer mypc
$blah | fl *

我意识到这可以通过单个函数(或在脚本本身)完成,但我已经简化了函数以突出我遇到的麻烦。我想要做的是将Get-OSInfo函数中的gwmi数据集作为Get-OSType中的参数变量传递,这样我就可以在第二个函数中引用它的所有属性,而不必从第一个函数中单独传递它们。像泥一样清楚?

我尝试了多种参数加速器类型,[ref][array][object[]]等,但我没有找到任何可用作参数的内容。唯一可以证明有效的方法是更改​​第二个函数以使用args[0]来接受输入,但这并不像使用参数一样干净,并且因为它有效,我不禁想到有一个应该起作用的参数。

1 个答案:

答案 0 :(得分:1)

避免使用$input,因为它在函数中具有特殊含义(表示管道输入)。只需将参数重命名为$OS

$input上的文档(man about_automatic_variables)说:

  

包含枚举所有输入的枚举器   传递给一个函数。 $ input变量仅适用于   函数和脚本块(未命名的函数)。在里面   函数的进程块,$ input变量枚举   当前在管道中的对象。当进程阻止时   完成后,管道中没有任何对象,所以$ input   变量枚举一个空集合。如果功能没有   有一个Process块,然后是End块,$ input变量   枚举函数的所有输入的集合。