使用C#运行powershell

本文关键字:powershell 运行 使用 | 更新日期: 2023-09-27 17:57:31

我正试图在C#中运行以下powershell命令

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操作系统:Windows Server 2008操作系统Service Pack:Service Pack 2站点:xxx

我希望能够做一个foreach并将名称、操作系统、站点添加到列表中。

希望这是有意义的

使用C#运行powershell

好的,这是我想要的修复程序,我想我会分享它,以防它帮助其他人

我做的第一件事是去掉powershell中的FormatList命令,然后我可以用下面的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语句

来解决这个问题