0

C# ベースの Windows フォーム アプリケーションに統合される PS スクリプトを作成しています。これは私が試した/すでに行ったことです:

  1. 実行空間とパイプラインを介して PS スクリプトを実行できますが、関数を使用するスクリプトを実行しようとすると、「現在のホストが実装していないため、この関数を呼び出すことができません」というエラーが発生します。

  2. 私はこの問題を調査しましたが、同様の問題に遭遇した人はほとんどいませんでしたが、次の $ConfirmPreference = "None", ,-Confirm:$false, -Force を使用 (追加) する必要があることを強調した解決策の 1 つ

  3. しかし、試してみると、次のエラー メッセージが表示されました。「単項演算子 '-' の後に式がありません。」文字列を変数に割り当てて連結しようとしたことがわかりますが、役に立ちませんでした。解決方法がわかりません。誰かアイデアはありますか?どんな助けでも大歓迎です。

       // create Powershell runspace
       Runspace runspace = RunspaceFactory.CreateRunspace();
       // open it
       runspace.Open();
    
       // create a pipeline and feed it the script text
       Pipeline pipeline = runspace.CreatePipeline();
    
       //allow the functions to be exec
       string sa = "$ConfirmPreference = \"None\" ";
       string se = " -Confirm:$false -Force";
       string s = sa +scriptText + se;
       pipeline.Commands.AddScript(s);
    
4

2 に答える 2

0

-Confirm:$false -Forceは関数パラメーターであることを意図しており、単独では存在しません。

Do-Something -param1 'foo' -Confirm:$false -Force

ただし、これらのパラメーターを使用してすべての関数呼び出しを変更しても、すべての問題が解決されるわけではありません。その他のオプションについては、こちらをご覧ください。

于 2012-09-06T15:19:06.427 に答える
-1

OK、CommonParameters ( MSDN: System.Management.Automation.Internal.CommonParameters )という PowerShell に付属するオブジェクトがあります。

意味のあるパラメーターは、ここで確認できます: MSDN: Common Parameter Names

そして、私が知る限り、呼び出すたびに変数$ConfirmPreferenceを設定する必要Noneはありません。それは暗黙のうちに...ConfirmfalseCommand

また、この変数は、作成後または最初の をRunspace呼び出す前に1 回設定する必要があります。CommandCommandScript

また、この変数を次のように設定することもできます。

runspace.SessionStateProxy.SetVariable("ConfirmPreference", "none");
于 2013-08-01T12:31:41.887 に答える