powershell - PowerShell:关闭标准输出句柄
问题描述
任务是在进程退出之前关闭标准输出句柄。使用 WinAPI 函数,它会是这样的:
CloseHandle(GetStdHandle(STD_OUTPUT_HANDLE))
我知道我可以做到DllImport
,Add-Type
但我相信一定有更好的方法。
使用 PowerShell 完成相同任务的最简单方法是什么?
更广泛的任务是测试一个 Python 库,该库在 Windows 上启动并与本地(借助模块)或远程(通过 WinRM)进程灵活subprocess
交互_winapi
。其中一项测试是运行一个程序,该程序在退出前一段时间关闭其 stdout 和 stderr 管道的末端。(Linux 上也有类似的问题。)因此,脚本必须关闭 stdout 和 stderr,以便操作系统向调用代码发出信号,表明它们已关闭。我发现的唯一方法是调用CloseHandle
stdout 和 stderr 句柄。打电话.Close
或.Dispose
对流对象没有帮助:它们似乎只在内部对被调用进程关闭。脚本应该是某种“本机”语言,不需要额外的编译器和解释器。因此,它可以是 cmd、VBScript 或 PowerShell。只有最后一个能够调用 WinAPI 函数。(在这次更新的那一刻,我已经在 Python 上编写了脚本,它运行良好,但需要安装一个解释器,以及 Powershell,它不需要任何额外的安装,但有点麻烦而且非常慢。)
解决方案
推荐阅读
- delphi - Datasnap 客户端回调连接 KeepAlive 不起作用
- homebrew - 如何在 OSX 上安装 apg(密码生成器)?
- c - 无法释放 avltree 中的根
- protractor - 试图将 e2e 代码移动到函数中但没有成功
- python - 在 JSON 文件中添加字符并删除最后一个逗号
- python - AttributeError:“生成器”对象没有属性“to_sql”使用生成器创建数据框时
- javascript - 数据表和行详细信息
- php - Nginx 快速 CGI 缓存 ON error_page 404
- php - PHP 错误:致命错误:未捕获的 PDOException:SQLSTATE [42000]:语法错误或访问冲突:1064 您的 SQL 语法有错误;
- dart - 如何将 `ByteData` 实例写入 Dart 中的文件?