在C#中首先运行PowerShell脚本,然后调用Get-Process返回0结果

时间:2013-10-06 22:24:00

标签: c# powershell powershell-v3.0

在我的c#代码中我有:

PowerShell ps = PowerShell.Create();
ps.AddScript(". ...\\WindowsPowerShell\\Microsoft.PowerShell_profile.ps1");
foreach (PSObject result in ps.Invoke())
{
    Console.WriteLine(result.ToString());
}
ps.AddCommand("Get-Process");
ICollection<PSObject> results = ps.Invoke();
Console.WriteLine(results.Count);
foreach (PSObject result in results)
{
    Console.WriteLine("---" + result.ToString());
}

如果我在不事先运行脚本的情况下运行Get-Process(通过注释掉ps.AddScript部分和循环),Get-Process会返回结果;但是,我提供的代码将始终为Get-Process返回0.

知道它为什么是0?

1 个答案:

答案 0 :(得分:1)

在每次调用之后,如果我们想要启动一个新命令而不是从上一个命令将命令传递到管道中,我们应该首先清楚:     ps.Commands.Clear();

完整的代码是:

PowerShell ps = PowerShell.Create();
ps.AddScript(". ...\\WindowsPowerShell\\Microsoft.PowerShell_profile.ps1");
foreach (PSObject result in ps.Invoke())
{
    Console.WriteLine(result.ToString());
}
ps.Commands.Clear();
ps.AddCommand("Get-Process");
ICollection<PSObject> results = ps.Invoke();
Console.WriteLine(results.Count);
foreach (PSObject result in results)
{
    Console.WriteLine("---" + result.ToString());
}

现在results.count显示正确的行数和result.ToString()打印出正确的值。