【问题标题】:Clear Powershell Streams in C#在 C# 中清除 Powershell 流
【发布时间】:2017-01-04 11:15:56
【问题描述】:

我有 3 个用于 powershell 的命令:

            shell.AddScript("Exit-PSSession");
            shell.AddScript("Invoke-Command -ComputerName something -ScriptBlock {some command}");
            shell.AddScript("Invoke-Command -ComputerName something -ScriptBlock {another command}");

现在我不需要前两个的任何响应,但我需要第三个的错误日志。因为我无法预见可能会发生多少错误,所以我想至少从所有错误消息中清除shell,最好是一个完全空的shell

我的解决方案是这样的:

            shell.AddScript("Exit-PSSession");
            shell.AddScript("Invoke-Command -ComputerName something -ScriptBlock {some command}");
            shell.Invoke();
            shell.Streams.ClearStreams();
            shell.AddScript("Invoke-Command -ComputerName something -ScriptBlock {another command}");

但不知何故,ClearStreams 什么都不做,shell 仍然知道所有旧错误和前两个命令。

Microsoft 方面没有提供更多信息,只是表示此方法存在并且应该清除shell。 (Microsoft Help for ClearStreams) 或Microsoft Help for streams in general

是我错过了什么,还是我误解了他们的意思

(Powershell 是 5.0 版)和 C# 运行 4.6 NET Framework

提前感谢您的帮助。

【问题讨论】:

  • ClearStreams 仅清除给定 PowerShell 实例的流。它与附加的 PowerShell Runspace (shell.Runspace) 无关。特别是,它与 $Error 变量或 Runspace 中的历史无关。

标签: c# shell powershell


【解决方案1】:

你可以用这个:

powershell.Streams.Error();

示例:

PowerShell powershell = PowerShell.Create();
powershell.Runspace = CreateRunSpace.runspace;
var exec = "Set-Mailbox -Identity John -DeliverToMailboxAndForward $true -ForwardingSMTPAddress 'manuel@contoso.com'";
powershell.AddScript(exec);
powershell.Streams.Error.Clear();
powershell.Streams.Warning.Clear();
var result = powershell.Invoke();
MessageBox.Show(powershell.Streams.Error.Count().ToString()+" error counts");

foreach (var errorRecord in powershell.Streams.Error)
{
MessageBox.Show(errorRecord.ToString()+"first - error");
}

请求您发布完整的脚本。什么样的对象外壳。我认为它会有一个方法 .Clear()

注意:我得到了这个:

sh.Commands.AddScript("Add-PSSnapin Microsoft.SystemCenter.VirtualMachineManager"); sh.Invoke(); sh.Commands.Clear();

你能检查一下吗

【讨论】:

  • 如果你使用的是Type: System.Management.Automation.PowerShell,那么你可以清除它
  • 好的,我现在看到了我的问题,我已经尝试过shell.Streams.Error.Clear();,但是由于我也没有使用Commands.Clear(),所以再次调用了相同的命令,看起来就像shell.Streams.Error.Clear();没有效果。谢谢
  • 啊...这有时也发生在我身上:) @Etaila
猜你喜欢
  • 1970-01-01
  • 2011-09-14
  • 1970-01-01
  • 2022-11-10
  • 2011-03-02
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 2013-05-30
相关资源
最近更新 更多