Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的Powershell会话有时拒绝运行外部命令行程序?_Powershell - Fatal编程技术网

为什么我的Powershell会话有时拒绝运行外部命令行程序?

为什么我的Powershell会话有时拒绝运行外部命令行程序?,powershell,Powershell,我遇到了一个奇怪的问题,当在Powershell命令行中执行大量操作时,它会在某个时候停止执行任何命令行应用程序,如cmd.exe或more.com,但会继续执行Powershell函数等。我可以打开一个新的Powershell窗口 形势 我正在使用 我有一个 我在尝试调试时似乎遇到了这种情况(稍后将详细介绍) 举例说明这个问题 正常情况下,我应该能够运行ping并看到如下正常输出: PS> ping google.com Pinging google.com [74.125.227.

我遇到了一个奇怪的问题,当在Powershell命令行中执行大量操作时,它会在某个时候停止执行任何命令行应用程序,如
cmd.exe
more.com
,但会继续执行Powershell函数等。我可以打开一个新的Powershell窗口

形势
  • 我正在使用
  • 我有一个
  • 我在尝试调试时似乎遇到了这种情况(稍后将详细介绍)
举例说明这个问题 正常情况下,我应该能够运行ping并看到如下正常输出:

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键。。。可能是里面有什么东西导致了这个问题吗

以下是一些想法:

  • 尝试使用-NoProfile运行PowerShell。导入PSCX模块并运行脚本
  • 尝试在不使用PSCX模块的情况下运行PowerShell(如有必要,请将配置文件脚本调整为不导入),然后尝试运行脚本
  • 一般不要使用第三方模块
  • 另一方面,我看了一下您的脚本,没有任何东西会突然出现在我面前,从而永久性地调整您的PowerShell会话。要调试此问题,请尝试考虑您的配置文件(或脚本)可能会进行的任何永久性环境更改。PSCX的开发人员可能有也可能没有对PowerShell环境进行永久性调整的代码


    使用传统的故障排除技术来帮助找出导致此问题的区域(脚本、PSCX或个人资料)。

    我遇到了这个问题。我猜您正在使用Powershell V2。请参阅此错误报告()。据称已在Powershell v3中修复。(我在v4中没有看到这个问题,使用的脚本与在v2中不工作的脚本相同)


    解决方法是将“[GC]::Collect()”放在写入控制台的循环中。

    这个问题解决了吗?遗憾的是,没有。恐怕我已经离开了那个工作,所以我没有代码或机器了。无论如何,如果你能找到一个答案,我会很有兴趣去读的。天哪,不可能,我真不敢相信有人在这么长时间后又回到了这个问题上。我再也无法访问有问题的机器了,所以我无法将其作为修复进行测试,但由于这正是我看到的行为,我将继续并将其标记为答案。非常感谢。谢谢你的投票!自从我读了这篇XKCD之后,我就一直在努力为编码世界的善业做出贡献: