【问题标题】:Using PowerShell command "Get-LocalGroup" in c#在 c# 中使用 PowerShell 命令“Get-LocalGroup”
【发布时间】:2019-05-22 22:51:06
【问题描述】:

当我尝试在我的 c# 应用程序中使用 PowerShell cmdlet“Get-LocalGroup”时,它不会在我的控制台上打印出此 cmdlet 的任何输出。

我已经包含了 Management.Automation NuGet。 构建过程没有问题。 我还尝试在调试和发布模式下以管理员权限启动构建的 .exe。

using System.Collections.ObjectModel;
using System.Management.Automation;

namespace RunPowershell
{
    class Program
    {
        static void Main(string[] args)
        { 
            using (PowerShell PowerShellInstance = PowerShell.Create())
            {
                PowerShellInstance.AddScript("Get-LocalGroup");

                Collection<PSObject> PSOutput = PowerShellInstance.Invoke();

                // loop through each output object item
                foreach (PSObject outputItem in PSOutput)
                {
                    if (outputItem != null)
                    {
                            System.Console.WriteLine("-"+outputItem.BaseObject);
                    }
                }
                System.Console.WriteLine("Hit any key to exit.");
                System.Console.ReadKey();
            }
        }
    }
}

我在调试窗口中看不到明显错误,但也没有“Get-LocalGroup”的输出。

【问题讨论】:

  • 我不喜欢 C#,但我认为你需要做 using (PowerShell PowerShellInstance = PowerShell.Create("Get-LocalGroup")) 并删除行 PowerShellInstance.AddScript("Get-LocalGroup");。另外,根据您想要的输出,我会尝试System.Console.WriteLine("-" + outputItem.Name);

标签: c# powershell


【解决方案1】:

Get-LocalGroup 缺少输出是由于您的项目的 CPU 目标。如果是x86Any CPU,那么Get-localGroup 将不起作用,因为它只在x64 主机中起作用。如果你打开一个x86 PowerShell 控制台,你可以看到这一点——它会抱怨没有这样的命令。您还可以在 C# 项目的PowerShellInstance.Streams.Error 流中看到列出的错误。

一旦您修复了目标,您就需要手动提取/格式化结果,因为 Powershell 将这些结果存储在一个集合中,而不是简单的属性。查看我之前的回答,了解如何通过将结果转换为自定义对象来让自己的生活更轻松:

Dealing with CimObjects with PowerShell inside C#

【讨论】:

  • 将目标更改为 x64 解决了该问题。 (MyProject -> 鼠标右键 -> 设置 -> 构建 -> 目标平台 -> x64) 非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-02
相关资源
最近更新 更多