2

我有一个奇怪的问题,当在 Powershell 命令行中进行大量播放时,在某些时候它会停止执行任何命令行应用程序,如cmd.exeor 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.exeGnuWin32 的wget.exe),不会发生修改。据我所知,该命令根本没有运行。

我能想到的每个非 Powershell 命令行应用程序都会发生这种情况(来自官方 Python 发行版的more.comGnuWin32 的、less.exeStrawberryPerl的等)。ping.execmd.exepython.exeperl.exe

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

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

在过去的几天里,当这个问题开始出现时,我一直在尝试编写 PS 脚本。在这里粘贴太长了(目前400行),但如果你想看的话,我已经把它上传到了pastebin 。(目前效果不是很好。)

现在我正在处理该脚本中 WinPE-AddExplorer 函数中的一些权限问题,所以很多时候我在该函数运行时使用 Ctrl-C'ing ......可能有什么导致问题?

4

2 回答 2

3

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

The workaround is to put "[GC]::Collect()" in your loop that writes to the console.

于 2015-01-06T14:11:03.047 回答
0

这里有一些想法:

  1. 尝试使用 -NoProfile 运行 PowerShell。导入 PSCX 模块并运行您的脚本
  2. 尝试在没有 PSCX 模块的情况下运行 PowerShell(如有必要,将您的配置文件脚本调整为不导入),然后尝试运行您的脚本
  3. 一般尽量不要使用第 3 方模块

另一方面,我浏览了您的脚本,没有任何事情会在我身上跳出来永久调整您的 PowerShell 会话。要调试此问题,请尝试考虑您的配置文件(或脚本)可能正在进行的任何永久性环境更改。PSCX 的开发人员可能也可能没有对您的 PowerShell 环境进行永久性调整的代码。

使用传统的故障排除技术来帮助您了解导致此问题的区域(您的脚本、PSCX 或您的配置文件)。

于 2012-05-30T22:15:09.870 回答