在Windows 11中,通过Tcl的 exec查询PowerShell时,我获取不到结果

编程语言 2026-07-07

在Windows 10时,我一直在使用 wmic 来获取当前的序列号。现在在Windows 11,我尝试通过 powershell 来读取它:

exec powershell.exe -Command "(Get-CimInstance Win32_BIOS).SerialNumber"

我已经尝试了各种组合,但结果始终为空,甚至 dir 也返回空字符串:

exec powershell.exe -Command "dir"

这两个命令在直接在 powershell 内运行时都会返回结果。

我在尝试Tcl 8.6的 wish和 tclsh。

你有什么想法吗?

谢谢!

02/07/2026更新:在tclsh中可以工作,我只是犯了个错。所以只有在wish中不起作用。

所以现在我在wish里尝试:

exec C:/Windows/System32/WindowsPowerShell/v1.0/powershell.exe -Command "ls | Out-File d:/test.txt"

没有错误,甚至连一个文件都没有被创建。同样的命令在tclsh中就没问题!?

在调用PowerShell时,我在Windows 10和 11也有同样的效果。

解决方案

找到了根本原因,显然通过TCL脚本无法修复。问题出在tclWinPipe.c;

将: createFlags = DETACHED_PROCESS;

改为: createFlags = CREATE_NO_WINDOW;

这修复了问题,但我不确定可能的副作用。

看起来PowerShell依赖一个控制台,否则代码不会运行。Bug报告在这里: https://core.tcl-lang.org/tcl/tktview/cbbd2511ce

站内所有文章版权归属LeftHeroAI导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。

相关文章