1

経由でランスペースを作成して開いたと仮定します

            var rs = RunspaceFactory.CreateRunspace();
            rs.Open();

さらに、次のようにNew-Variableコマンドレットを使用して、配列として入力された変数をその実行スペースに追加するとします。

            // create a pipeline to add the variable into the runspace
            var pipeline = PowerShell.Create();
            // create a command object, add commands and parameters to it...
            var cmd = new PSCommand();
            cmd.AddCommand("New-Variable");
            cmd.AddParameter("Name", "foo");
            cmd.AddParameter("Value", "@()");
            // associate the command with the pipeline and runspace, and then invoke
            pipeline.Commands = cmd;
            pipeline.Runspace = rs;
            pipeline.Invoke();

コードは機能し、エラーは発生しませんが、変数'foo'は配列型として作成されません。「@()」でさまざまなバリエーションを試しましたが、これまでのところどれもパンアウトしていません。最終的に、質問は、Value引数をNew-Variableに適切にフォーマットして、「foo」が空のPowerShell配列型として解釈されるようにする方法に要約されると思います。

ありがとう、

マット

4

3 に答える 3

4

参考までに、次のようにC#で直接これを行うことができます。

pipeline.Runspace.SessionStateProxy.PSVariable.Set("foo", new object[0]);
于 2012-09-12T01:50:59.640 に答える
0

PSCommand.AddParameterパラメータ名には文字列を取り、パラメータ値にはオブジェクトを取ります。こちらのドキュメントをご覧ください。

同等のPowerShellスクリプトを表す文字列ではなく、「実際の」空の配列を配置する必要があります。

cmd.AddParameter("Value", new object[0]);
于 2012-09-11T23:16:06.047 に答える
0

私を救った応答は次のとおりです。

すべてをテキストから実行している場合は、AddScriptメソッドを確認できます。たとえば、var cmd = new PSCommand().AddScript("$myVar = @()");は、という名前の新しい変数を生成します$myVar

C#コードの例:

foreach (Collaborator collab in collabs)
                {
                    counter ++;
                    arrayUsers.Append("@(\"" + collab.mail + "\", \"" + collab.url + "\")");
                    if (counter < numbercollabs)
                        arrayUsers.Append(",");
                }
                string arrayUsersPowerShell =  arrayUsers.ToString();
and then :

using (PowerShell powerShellInstance = PowerShell.Create())
                {
 powerShellInstance.AddScript("$d = get-date; " +
                        "$arrayUsers = @(" + arrayUsersPowerShell + "); " +
                        "$d | Out-String; $arrayUsers[0][1]");
...
Collection<PSObject> PSOutput = powerShellInstance.Invoke();
...
}

したがって、配列を正しく構築できます

于 2017-01-10T19:04:44.020 に答える