Запуск PowerShell с C#
Я пытаюсь запустить следующую команду powershell внутри C#
Powershell:
"Get-ADDomainController -Filter * | Select-Object Name,OperatingSystem,OperatingSystemServicePack,Site | Format-List"
Вот мой код C#:
using (PowerShell inst = PowerShell.Create())
{
inst.AddCommand("Import-Module").AddParameter("Name", "ActiveDirectory");
inst.AddScript(command);
inst.Commands.AddCommand("Out-String");
foreach (PSObject result in inst.Invoke())
{
Console.WriteLine("'{0}'", result);
}
Console.ReadLine();
}
Это прекрасно работает и выводит результаты, но я хочу иметь возможность перебирать информацию
Так, например, напечатанные результаты выглядят так
Имя: xxx OperatingSystem: Windows Server 2008 OperatingSystemServicePack: Пакет обновления 2 Сайт: xxx
Я хочу иметь возможность создавать foreach и добавлять имя, операционную систему, сайт в список.
Надеюсь, что это имеет смысл
1 ответ
Итак, вот исправление, которое я хотел, подумал, что поделюсь, если оно кому-нибудь поможет
первое, что я сделал, это избавился от команды Format-List в powershell, после чего я мог бы перебрать результаты с помощью следующего кода C# и поместить его в список
List<DomainControllerLists> dcList = new List<DomainControllerLists>();
using (PowerShell inst = PowerShell.Create())
{
inst.AddCommand("Import-Module").AddParameter("Name", "ActiveDirectory");
inst.AddScript(command);
Collection<PSObject> results = inst.Invoke();
foreach (PSObject obj in results)
{
dcList.Add(new DomainControllerLists() { Name = obj.Members["Name"].Value.ToString(), OperatingSystem = obj.Members["OperatingSystem"].Value.ToString(), OperatingSystemServicePack = obj.Members["OperatingSystemServicePack"].Value.ToString(), Site = obj.Members["Site"].Value.ToString() });
}
}
return dcList;
теперь он возвращает список с информацией, которая мне нужна. Вы можете сделать это, преобразовав цикл foreach в оператор LINQ.