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のパラメーター変数として渡すことです。これにより、最初の関数から個別に渡すことなく、2番目の関数でそのすべてのプロパティを参照できます。泥のように澄んでいますか?

複数のパラメータアクセラレータタイプ、、、などを試し[ref]まし[array][object[]]が、パラメータとして機能するものは見つかりませんでした。動作することが証明されている唯一のことは、入力を受け入れるために使用する2番目の関数を変更することargs[0]ですが、これはパラメーターを使用するほどクリーンではなく、動作するため、次のように動作する必要があるパラメーターがあると思わずにはいられません。良い。

4

1 に答える 1

1

$input関数(パイプライン入力を表す)で特別な意味を持つため、使用しないでください。パラメータの名前を。のような名前に変更するだけ$OSです。

ドキュメント(manabout_automatic_variables)は次のように$input述べています。

関数に渡されるすべての入力を列挙する列挙子が含まれています。$ input変数は、関数とスクリプトブロック(無名関数)でのみ使用できます。関数のProcessブロックで、$input変数は現在パイプラインにあるオブジェクトを列挙します。Processブロックが完了すると、パイプラインにオブジェクトが残っていないため、$input変数は空のコレクションを列挙します。関数にProcessブロックがない場合、Endブロックで、$input変数は関数へのすべての入力のコレクションを列挙します。

于 2013-01-29T01:08:33.177 に答える