1

这是我的代码:

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]​​用于接受输入的第二个函数,但这不像使用参数那样干净,而且由于它有效,我不禁认为有一个参数应该作为出色地。

4

1 回答 1

1

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

文档(man about_automatic_variables)$input说:

包含一个枚举器,它枚举传递给函数的所有输入。$input 变量仅可用于函数和脚本块(它们是未命名的函数)。在函数的 Process 块中,$input 变量枚举当前在管道中的对象。当 Process 块完成时,管道中没有任何对象,因此 $input 变量枚举一个空集合。如果函数没有 Process 块,则在 End 块中,$input 变量枚举该函数的所有输入的集合。

于 2013-01-29T01:08:33.177 回答