2

PowerShellを初めて使用し、C#でPowerShellコマンドレットを実行しています。具体的には、CitrixのXenDesktop SDKを使用して、XenDesktop環境を管理するWebアプリを作成しようとしています。

簡単なテストと同じように、Citrix BrokerSnapIn.dllを参照しました。これは、優れたC#クラスを提供しているように見えます。ただし、このエラーメッセージで.Invokeを押すと、「PSCmdletから派生したコマンドレットを直接呼び出すことはできません。」

たくさんのことを検索して試しましたが、PSCmdletsの呼び出し方法がわかりません。これを行うには、文字列やランスペース/パイプラインなどを使用する必要があると思います。

アドバンスト、NBに感謝

using System;
using System.Management.Automation;
using System.Management.Automation.Runspaces;
using Citrix.Broker.Admin.SDK;

namespace CitrixPowerShellSpike
{
    class Program
    {
        static void Main(string[] args)
        {
            var c = new GetBrokerCatalogCommand {AdminAddress = "xendesktop.domain.com"};
            var results = c.Invoke();
            Console.WriteLine("all done");
            Console.ReadLine();
        }
    }
}
4

1 に答える 1

6

PSCmdletを実行するには、PowerShellエンジンをホストする必要があります(MSDNドキュメントから)。

  // Call the PowerShell.Create() method to create an 
  // empty pipeline.
  PowerShell ps = PowerShell.Create();

  // Call the PowerShell.AddCommand(string) method to add 
  // the Get-Process cmdlet to the pipeline. Do 
  // not include spaces before or after the cmdlet name 
  // because that will cause the command to fail.
  ps.AddCommand("Get-Process");

  Console.WriteLine("Process                 Id");
  Console.WriteLine("----------------------------");

  // Call the PowerShell.Invoke() method to run the 
  // commands of the pipeline.
  foreach (PSObject result in ps.Invoke())
  {
    Console.WriteLine(
            "{0,-24}{1}",
            result.Members["ProcessName"].Value,
            result.Members["Id"].Value);
  } 
} 
于 2012-10-03T16:27:01.683 に答える