繁体   English   中英

用 C# 运行 powershell

[英]Running powershell with C#

我正在尝试在 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 操作系统:Windows Server 2008 操作系统服务包:Service Pack 2 站点:xxx

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

希望这是有道理的

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

我做的第一件事是摆脱了 powershell 中的 Format-List 命令,然后我可以使用以下 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 语句来完善它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM