Запуск 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.

Другие вопросы по тегам