13

以下をコピーして新しい Powershell ISE スクリプトに貼り付け、F5 キーを押します。

workflow workflow1{
    "in workflow1"
    func1
}
function func1 {
    "in func1"
    func2
}
function func2 {
    "in func2"
}
workflow1

私が得るエラーは次のとおりです。

「func2」という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません

私はこれを理解していません。func1 がスコープ内にあるのに func2 がスコープ内にないのはなぜですか? どんな助けでも大歓迎です。ティア。

4

4 に答える 4

11

ワークフローは近視眼的なプログラミング要素と考えてください。

ワークフローは、スコープ内ですぐに利用できるものを超えて見ることはできません。したがって、ネストされた関数は単一のワークフローでは機能しません。それらを見ることができないからです。

修正は、ネストされた関数とともにワークフローをネストすることです。このような:

workflow workflow1
{
    function func1 
    {
        "in func1"
        workflow workflow2
        {
            function func2 
            {
                "in func2"
            }
            func2
        }
        "in workflow2"
        workflow2
    }
    "in workflow1"
    func1
}
workflow1

次に、ネストされた関数が表示されます。

in workflow1
in func1
in workflow2
in func2

詳細はこちら

于 2014-12-08T16:51:12.210 に答える
0

関数とその呼び出しを InlineScript 内にラップすることができます。これは、システムごとのスクリプトである可能性があります。次に、その inlinescript を foreach -Parallel ループ内で実行し、クエリを実行するシステムを処理します。

于 2016-01-31T12:33:06.660 に答える
0

すべての回答を漠然と要約すると、なぜこのように振る舞うのか疑問に思うのではなく、ただそれを受け入れて対処してください。けっこうだ。

ワークフロー以外の Powershell で展開パイプライン全体を作成しました。ワークフローの「foreach -parallel」を使用して最適化したいと考えていますが、そうすると、戻って書き直す必要があるようです。ワークフローのすべて。残念ながら、並列 foreach ループを取得するためだけに支払うには、これは負担が大きすぎます。

教訓 - 最初から Powershell ワークフローを使用する。

于 2014-12-09T08:17:25.423 に答える