为什么我的Powershell会话有时拒绝运行外部命令行程序?
我遇到了一个奇怪的问题,当在Powershell命令行中执行大量操作时,它会在某个时候停止执行任何命令行应用程序,如为什么我的Powershell会话有时拒绝运行外部命令行程序?,powershell,Powershell,我遇到了一个奇怪的问题,当在Powershell命令行中执行大量操作时,它会在某个时候停止执行任何命令行应用程序,如cmd.exe或more.com,但会继续执行Powershell函数等。我可以打开一个新的Powershell窗口 形势 我正在使用 我有一个 我在尝试调试时似乎遇到了这种情况(稍后将详细介绍) 举例说明这个问题 正常情况下,我应该能够运行ping并看到如下正常输出: PS> ping google.com Pinging google.com [74.125.227.
cmd.exe
或more.com
,但会继续执行Powershell函数等。我可以打开一个新的Powershell窗口
形势
- 我正在使用
- 我有一个
- 我在尝试调试时似乎遇到了这种情况(稍后将详细介绍)
PS> ping google.com
Pinging google.com [74.125.227.78] with 32 bytes of data:
Reply from 74.125.227.78: bytes=32 time=30ms TTL=49
Reply from 74.125.227.78: bytes=32 time=38ms TTL=49
Reply from 74.125.227.78: bytes=32 time=31ms TTL=49
Reply from 74.125.227.78: bytes=32 time=32ms TTL=49
Ping statistics for 74.125.227.78:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 30ms, Maximum = 38ms, Average = 32ms
PS>
但是,当我遇到此问题时,PS提示符会立即返回:
PS> ping google.com
PS>
我可以在任务管理器中验证ping在此期间没有运行。此外,对于应该修改文件系统上文件的程序(如takeown.exe
或GnuWin32的wget.exe
),不会进行修改。据我所知,该命令根本没有运行
我能想到的每一个非Powershell命令行应用程序都会出现这种情况(more.com
、GnuWin32的less.exe
、ping.exe
、cmd.exe
、python官方发行版中的python.exe
、StrawberryPerl的perl.exe
,等等)
我仍然可以运行任何Powershell函数、cmdlet或别名。此外,我还可以运行非命令行应用程序,如notepad.exe
罪魁祸首:我的剧本
在过去的几天里,当这个问题开始出现时,我一直在尝试编写一个PS脚本。粘贴在这里太长了(目前有400行),但是如果你想看的话,我已经准备好了。(目前效果不太好。)
现在我正在处理该脚本中WinPE AddExplorer函数中的一些权限问题,所以很多时候我在该函数运行时按Ctrl-C'ing键。。。可能是里面有什么东西导致了这个问题吗 以下是一些想法:
使用传统的故障排除技术来帮助找出导致此问题的区域(脚本、PSCX或个人资料)。我遇到了这个问题。我猜您正在使用Powershell V2。请参阅此错误报告()。据称已在Powershell v3中修复。(我在v4中没有看到这个问题,使用的脚本与在v2中不工作的脚本相同)
解决方法是将“[GC]::Collect()”放在写入控制台的循环中。这个问题解决了吗?遗憾的是,没有。恐怕我已经离开了那个工作,所以我没有代码或机器了。无论如何,如果你能找到一个答案,我会很有兴趣去读的。天哪,不可能,我真不敢相信有人在这么长时间后又回到了这个问题上。我再也无法访问有问题的机器了,所以我无法将其作为修复进行测试,但由于这正是我看到的行为,我将继续并将其标记为答案。非常感谢。谢谢你的投票!自从我读了这篇XKCD之后,我就一直在努力为编码世界的善业做出贡献: