当我尝试在我的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定位。如果是x86
或Any CPU
,则Get-localGroup
无法正常工作,因为它仅在x64
主机中起作用。如果打开x86
PowerShell控制台,您可以看到此操作 - 它会抱怨没有这样的命令。您还可以在C#项目中的PowerShellInstance.Streams.Error
流中列出的错误。
确定目标后,您需要手动提取/格式化结果,因为PowerShell将这些存储在集合中而不是简单的属性中。通过将结果转换为自定义对象,请查看我的先前答案,以使生活更轻松:
在C#