在Windows 11中,通过Tcl的 exec查询PowerShell时,我获取不到结果
在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导航站,无授权禁止任何主体转载、抄袭、复制内容,亦不得私自架设镜像站点。一经侵权,本站将通过法律途径追责。