【发布时间】:2017-03-25 00:53:25
【问题描述】:
我目前正在使用 PowerShell 5.0 SDK 编写 C# cmdlet。
当从 powershell “实时”运行时,我正在尝试将第三方可执行文件的 StandardError 通过管道传输到 cmdlet 输出。
我目前正在使用 MedallionShell 库来处理运行进程。我已经使用普通的 C# win 表单进行了尝试,并使用 Command.StandardError.PipeToAsync(Console.OpenStandardOutput()) 将输出打印为可执行文件“实时”生成到控制台。
我尝试创建自己的调用 WriteVerbose 的 Stream 对象,但它似乎没有在 powershell 屏幕上打印任何内容(我在运行时将 -Verbose 传递给 cmdlet)。
我当前的流程如下所示:
- 打开 Powershell ISE
- 加载我的模块(C# dll)
- 使用参数调用我的 cmdlet
- Command.Run
- Command.StandardError.PipeToAsync(???)
- Command.Wait(在此步骤中,输出应流向 powershell 窗口)
- 检查 Command.Result.Success。
谁能指出我正确的方向?
【问题讨论】:
-
您自己的
Stream实现是直接调用WriteVerbose还是将它们编组到管道线程? -
我的流实现采用了 cmdlet 并使用它来调用 WriteVerbose。我从 Write 调用中收到的字节,我使用 Encoding.UTF8.GetString(bytes) 转换为字符串。
-
这不是我要问的。您不能只在任意线程上调用
WriteVerbose。那么,您是否将对WriteVerbose的调用编组回管道线程? -
不,我没有,你如何将调用编组回管道线程?
标签: c# powershell cmdlets cmdlet pscmdlet