首页 > 解决方案 > PowerShell:关闭标准输出句柄

问题描述

任务是在进程退出之前关闭标准输出句柄。使用 WinAPI 函数,它会是这样的:

CloseHandle(GetStdHandle(STD_OUTPUT_HANDLE))

我知道我可以做到DllImportAdd-Type但我相信一定有更好的方法。

使用 PowerShell 完成相同任务的最简单方法是什么?

更广泛的任务是测试一个 Python 库,该库在 Windows 上启动并与本地(借助模块)或远程(通过 WinRM)进程灵活subprocess交互_winapi。其中一项测试是运行一个程序,该程序在退出前一段时间关闭其 stdout 和 stderr 管道的末端。(Linux 上也有类似的问题。)因此,脚本必须关闭 stdout 和 stderr,以便操作系统向调用代码发出信号,表明它们已关闭。我发现的唯一方法是调用CloseHandlestdout 和 stderr 句柄。打电话.Close.Dispose对流对象没有帮助:它们似乎只在内部对被调用进程关闭。脚本应该是某种“本机”语言,不需要额外的编译器和解释器。因此,它可以是 cmd、VBScript 或 PowerShell。只有最后一个能够调用 WinAPI 函数。(在这次更新的那一刻,我已经在 Python 上编写了脚本,它运行良好,但需要安装一个解释器,以及 Powershell,它不需要任何额外的安装,但有点麻烦而且非常慢。)

标签: powershellstdout

解决方案


推荐阅读