在 c# 中使用 PowerShell 命令"Get-LocalGroup"



当我尝试在我的C#应用程序中使用powershell cmdlet" get-localgroup"时,它不会在控制台上打印出此CMDLET的任何输出。

我已经包含了管理。构建过程无问题。我还试图在调试和发布模式下以管理权限启动构建的.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缺乏输出是由于您项目的CPU定位。如果是x86Any CPU,则Get-localGroup无法正常工作,因为它仅在x64主机中起作用。如果打开x86 PowerShell控制台,您可以看到此操作 - 它会抱怨没有这样的命令。您还可以在C#项目中的PowerShellInstance.Streams.Error流中列出的错误。

确定目标后,您需要手动提取/格式化结果,因为PowerShell将这些存储在集合中而不是简单的属性中。通过将结果转换为自定义对象,请查看我的先前答案,以使生活更轻松:

在C#

内与powershell处理cimobjects

最新更新