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吗?

4

1 回答 1

1

在每次调用之后,如果我们想启动一个新命令而不是将命令从前一个命令传递到管道中,我们应该先做一个 clear: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() 打印出正确的值。

于 2013-10-07T18:27:18.807 回答