3

以下の私のコードを参照してください。スクリプトは変数 $backupFile を作成します。次のステートメントでその変数を New-Item コマンドのパス パラメーターの値として使用するにはどうすればよいですか?

        using (var ps = PowerShell.Create())
        {
            ps.RunspacePool = _runspacePool;
            ps.AddScript("$backupFile = [System.IO.Path]::Combine([System.IO.Path]::GetTempPath(),'{0}.bak')".FormatInvariant(databaseName));
            ps.AddStatement();
            ps.AddCommand("New-Item")
                .AddParameter("Force")
                .AddParameter("ItemType", "File")
                .AddParameter("Path", /* How to use $backupFile?? */));
            ps.Invoke();
        }
4

3 に答える 3

0

キースとエリスの回答は役に立ちましたが、これを読んでいる他の人がこれまでの結論で自分の回答を作成する方が役立つと思いました.

私の最初の質問に対する答えは、それは不可能であると思われます (少なくとも、今のところその方法は見つかりませんでした)。

したがって、AddCommand (AddArgument、AddParameter(s) を使用) の使用例は、1 つまたは複数のコマンドを使用して 1 つのパイプラインを構成し、結果を Invoke メソッドの出力として取得することのようです。最終的には、相互に依存しない限り、(AddStatement で区切られた) 追加のパイプラインを追加できます。Invoke メソッドの出力コレクションで複数の結果が得られます。

2 つのパイプラインを実行し、2 つ目のパイプラインが最初のパイプラインの結果に依存する場合 (そして (私のコード例のように) 結果をパイプすることはできません)、2 つのオプションがあると思います: 1) 最初のパイプラインの Invoke を呼び出す2 番目のパイプラインを構成するときに出力を使用します。または 2) スクリプトを作成し (たとえば、StringBuilder を使用)、1 回の呼び出しでそれを実行します。

リモート接続を使用している場合は、リモート サーバーへの呼び出しが 1 回しかないため、後者のオプションをお勧めします。

于 2013-09-02T07:43:26.220 に答える
0

別の Invoke を使用してみます。PowerShell.Invoke メソッド (PSDataCollection、PSDataCollection、PSInvocationSettings)を使用する場合、必要な情報をパイプラインの最後から削除しPSDataCollection<T> Output、スクリプトの残りの部分で値を使用できます。

于 2013-08-29T16:36:37.590 に答える