0

在 C# 中使用 PowerShell 时,我遇到了一个非常奇怪的行为。当我执行

InitialSessionState s = InitialSessionState.CreateDefault2();
var ps = PowerShell.Create(s);


ps.AddCommand("Write-Information")
    .AddArgument("<test>")
    .Invoke();

// Writes 0. But why?
Console.WriteLine(PS.Streams.Information.Count);

没有捕获流(Stream.Information、Stream.Error、...)。但是当我使用

ps.AddScript("Write-Information '<test>'")
    .Invoke();

// Writes 1 as expected
Console.WriteLine(PS.Streams.Information.Count);

一切都按预期工作。任何人都可以解释这种差异吗?我错过了一些概念吗?怎么可能有区别?如何捕获 AddCommand 调用的流?

感谢您对此的任何意见!

4

1 回答 1

0

很抱歉造成混乱,这是我的错。我在同一个 PowerShell 实例上多次调用ps.AddCommand("...").InvokeAsync(),这意味着只执行了第一个命令,而根本没有执行第二个命令(因此没有流数据)。

为我要单独调用的每个命令创建一个新的 PowerShell 实例(具有相同的运行空间)是否正确(也是最佳实践)?

于 2020-09-14T16:12:56.107 回答