3

C#のpowershellで次のことをしようとしています

$certThumbrint = "someLocationToACert"
$cert = get-item $certThumbrint

Get-RoleInstanceCount -ServiceName "someServiceName" -DeploymentSlot "someSlot" -RoleName "someRole" -SubscriptionId "someId" -Certificate $cert

これは、powershell コマンドラインで 1 つずつ実行すると完全に機能します。しかし、コードでこれを行う方法がわかりません。これまでのところ、私はこれを行ってきました。

Pipeline pipeline = runspace.CreatePipeline();

pipeline.Commands.Add("$certThumbrint = \"someLocationToACert\"");
pipeline.Commands.Add(@"$cert = get-item $certThumbrint");

Command instanceCount = new Command("Get-RoleInstanceCount");
instanceCount.Parameters.Add(new CommandParameter("ServiceName", "someServiceName"));
....
instanceCount.Parameters.Add(new CommandParameter("Certificate", "$cert"));

次に、次の例外が発生します。

「'$certThumbrint = "someLocation"' という用語は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されません。名前のスペルを確認するか、パスが含まれている場合は、パスが正しいことを確認してください。そしてさらに試みる。

変数を「AddScrips」として追加しようとしましたが、これも使用しました

SessionStateVariableEntry var2 = new SessionStateVariableEntry("cert", "get-item $certThumbrint", "Initial session state MyVar1 test");
initialSessionState.Variables.Add(var2);

実行空間を作成する前。何も機能していません。また、すべてのコードを文字列に追加し、スクリプトとして実行しようとしました。

私は実際にこれを行う方法がなく、それができなければならないのは本当に簡単なことのように感じます...ありがとう。

編集:次のことも試しました:

        const string getInstanceCountScript = "$certThumbrint = \"somecert\" \n " + 
                                              "$cert = get-item $certThumbrint \n " +
                                              "Get-RoleInstanceCount -ServiceName someservicename" +
                                                                     ...
                                                                   " -Certificate $cert";

pipeline.Commands.AddScript(getInstanceCountScript);

実行されますが、空の文字列が返されます。「Add()」で呼び出す同じコードを ps1 ファイルに入れると、実行されて正しい出力が得られます。しかし、3行以下のコードのためだけに、プロジェクトにps1ファイルをロードしたくありません。

4

2 に答える 2

0

このコードは私にとって完璧に機能します。PS1ファイルにまったく同じコードが含まれているのは確かですか?

 static void Main(string[] args)
            {


                using (Runspace rs = RunspaceFactory.CreateRunspace())
                {

                    rs.Open();
                    var pipeline = rs.CreatePipeline();
                    pipeline.Commands.AddScript("$certThumbrint = \"c:\\1.txt\"\n" +
                                                "$cert = get-item $certThumbrint\n" +
                                                "Get-Content $cert");

                    foreach (var s in pipeline.Invoke())
                    {
                        Console.WriteLine(s);

                    }

                }
                Console.ReadLine();
            }
于 2012-06-06T05:13:33.333 に答える
0

New-Variableコマンドレットを見てください。

于 2012-06-06T08:29:47.793 に答える