12

私は愚かなことをしていると感じますが、ここに問題があります:

Function getPropertyOfFile($a, $b, $c)
{
    $a.GetDetailsOf($b, $c)
}

関数に適切な$a、$ b、$ c変数を渡すと、次のように失敗します。

「[System.Object[]]に「GetDetailsOf」という名前のメソッドが含まれていないため、メソッドの呼び出しに失敗しました。」

ただし、$ a、$ b、$ cを渡した引数に直接置き換えてから実行しようとすると、正常に機能します。

一体何が起こっているのですか?

注:私はPowerShell ISEを使用しており、コンソールにコピーして貼り付けることにより、PowerShellに関数を入力しています。また、同じ名前の新しい関数を入力すると上書きされることを想定して作業を行っています。PSを.ps1から読み取るためのより良い方法はありますか?

編集:私はこの質問への答えを関数にラップしようとしています。

編集2:

Function getPropertyOfFile $a $b $c
{
    $a.GetDetailsOf($b, $c)
}

エラーが発生しMissing function body in function declaration. At line:1 char:28ます。

4

2 に答える 2

20

PowerShellの関数はコマンドレットと同様に呼び出されるため、引数をコンマで区切る必要はありません。

呼び出しは次のようになります。

getPropertyOfFile($foo, $bar, $baz)

その結果$a、値$foo, $bar, $baz(配列)がwhile$b$careになります$null

あなたはそれをこのように呼ぶ必要があります:

getPropertyOfFile $foo $bar $baz

前述のように、これはコマンドレットの呼び出し方法と同じです。あなたもすることができます

getPropertyOfFile -a $foo -c $baz -b $bar

その時点で、関数の引数の名前が適切でないことに気付くでしょう;-)

編集:前に述べたように、関数の宣言は問題ありません。問題は、投稿していないコードにありますが、PowerShellの経験がある人にとっては簡単に推測できます。つまり、関数の呼び出しです。

于 2012-02-23T20:51:16.700 に答える
3

関数をコンマではなくスペースで呼び出す場合は、引数を区切る必要があります。

getPropertyOfFile $arg1 $arg2 $arg3

それ以外の

getPropertyOfFile $arg1, $arg2, $arg3

$arg1, $arg22番目の形式は、$arg3パラメーター$aを含む単一の配列を渡します。

于 2012-02-23T20:51:54.160 に答える