Я пытаюсь получить простой вывод команды PowerShell в C # с использованием функциональности, найденной в пространстве имен System.Management.Automation
.
У меня на компьютере есть консоль Exchange, и я могу успешно выдавать команды из консоли, но из C # я получаю ошибку, которую не понимаю.
Вот пример кода, который должен получить простую информацию о сервере:
static void Main(string[] args)
{
RunspaceConfiguration rsConfig = RunspaceConfiguration.Create();
PSSnapInException snapInException = null;
PSSnapInInfo info = rsConfig.AddPSSnapIn("Microsoft.Exchange.Management.PowerShell.E2010", out snapInException);
using (Runspace myRunSpace = RunspaceFactory.CreateRunspace(rsConfig))
{
myRunSpace.Open();
using (Pipeline pipeLine = myRunSpace.CreatePipeline())
{
Command serverCommand = new Command("Get-MailboxServer");
pipeLine.Commands.Add(serverCommand);
Collection<PSObject> server = pipeLine.Invoke();
foreach (PSObject cmdlet in server)
{
string cmdletName = cmdlet.Properties["Name"].Value.ToString();
Console.WriteLine(cmdletName);
}
}
}
}
Фактическая ошибка возникает в строке pipeLine.Invoke ():
Исключение System.Management.Automation.CmdletInvocationException было обработано
Значение не может быть нулевым.
Имя параметра: параметры
Источник = System.Management.Automation
Я попытался добавить параметры, например, идентификатор сервера, но происходит то же самое:
using (Pipeline pipeLine = myRunSpace.CreatePipeline())
{
Command serverCommand = new Command("Get-MailboxServer");
serverCommand.Parameters.Add("Identity", mbServerName);
pipeLine.Commands.Add(serverCommand);
Collection<PSObject> server = pipeLine.Invoke();
}