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

时间:2012-05-30 20:16:10

标签: powershell

我遇到了一个奇怪的问题,当在Powershell命令行中进行大量游戏时,它会在某些时候停止执行任何命令行应用程序,如cmd.exemore.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.exeping.execmd.exepython.exe来自官方Python发行版,StrawberryPerl的perl.exe等)。

我仍然可以运行任何Powershell函数,cmdlet或别名。此外,我可以运行非命令行应用,例如notepad.exe

(可能的)罪魁祸首:我的剧本

在过去几天,当这个问题开始出现时,我一直在尝试编写PS脚本。粘贴在这里太长了(目前有400行),但如果你想看到它,我uploaded it to pastebin。 (目前效果不佳。)

现在我正在处理该脚本中WinPE-AddExplorer函数中的一些权限问题,所以很多时候我在Ctrl-C'ing运行时该函数正在运行...造成这个问题?

2 个答案:

答案 0 :(得分:3)

我遇到了这个问题。我猜测你正在使用Powershell V2。请参阅此错误报告(https://connect.microsoft.com/PowerShell/Feedback/Details/665809)。据称已在Powershell v3中修复。 (我在v4中没有看到使用在v2中不起作用的相同脚本的问题)

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

答案 1 :(得分:0)

以下是一些想法:

  1. 尝试使用-NoProfile运行PowerShell。导入PSCX模块并运行脚本
  2. 尝试在没有PSCX模块的情况下运行PowerShell(如果需要,请调整您的配置文件脚本以不导入),然后尝试运行脚本
  3. 尽量不要使用第三方模块
  4. 另一方面,我查看了您的脚本,没有任何内容突然出现,这将永久性地调整您的PowerShell会话。要调试此问题,请尝试考虑您的配置文件(或脚本)可能进行的任何永久性环境更改。 PSCX的开发人员可能有也可能没有代码,可以对PowerShell环境进行永久性调整。

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