PowerShell:关闭标准输出句柄

时间:2020-07-27 16:44:25

标签: powershell stdout

任务是在进程退出之前关闭stdout句柄。使用WinAPI函数,就是这样:

CloseHandle(GetStdHandle(STD_OUTPUT_HANDLE))

我知道我可以DllImport with Add-Type,但是我相信必须有更好的方法。

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

更广泛的任务是测试一个Python库的一部分,该库可以启动并与Windows上的本地(通过subprocess_winapi模块)或远程(通过WinRM)进程灵活地交互。测试之一是运行一个程序,该程序在退出前关闭stdout和stderr管道的末端。 (在Linux上也有类似的问题。)因此,脚本必须关闭stdout和stderr,以便操作系统发出的调用信号通知它们已关闭。我发现的唯一方法是在stdout和stderr句柄上调用CloseHandle。在流对象上调用.Close.Dispose并没有帮助:它们似乎仅在内部被调用的进程关闭。该脚本应使用某种“本机”语言,不需要其他编译器和解释器。因此,它可以是cmd,VBScript或PowerShell。只有最后一个能够调用WinAPI函数。 (在此更新的时候,我已经在Python上编写了脚本,该脚本可以完美运行但需要安装解释器,而Powershell可以在不进行任何其他安装的情况下编写脚本,但是有点麻烦且非常慢。)

0 个答案:

没有答案