我是PowerShell的新手,正在C#中运行PowerShell cmd-let。具体来说,我正在尝试使用Citrix的XenDesktop SDK编写一个Web应用程序来管理我们的XenDesktop环境。
作为快速测试,我引用了Citrix BrokerSnapIn.dll,它看起来像给我不错的C#类。但是,当我点击.Invoke时出现以下错误消息:
“不能直接调用从PSCmdlet派生的Cmdlet。”
我已经搜索并尝试了很多东西,但是不知道如何调用PSCmdlet。我有点想我必须使用字符串和运行空间/管道等来执行此操作。
先谢谢了,
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();
}
}
}
最佳答案
您需要托管PowerShell引擎才能执行PSCmdlet,例如(来自MSDN docs):
// 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);
}
}
关于c# - 使用C#代码运行PSCmdLets(Citrix XenDesktop),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12712196/