【问题标题】:Powershell bug where external commands silently fail外部命令静默失败的 Powershell 错误
【发布时间】:2012-03-20 21:15:54
【问题描述】:

我有一个复杂的 powershell 脚本,它使用远程处理并执行大量文件复制以及 powershell 模块的加载和卸载。在脚本中,我使用 robocopy 仅移动更改文件,一切正常。

然而,powershell 会话时不时地进入一个奇怪的状态,它不再执行外部命令。例如,如果我在控制台中输入 robocopy,它只会立即返回,没有错误也没有输出。如果我输入 whoami,它会再次立即返回,没有输出。它只有大约十分之一的相同脚本执行进入这种状态。

如果我关闭控制台并开始一个新会话,一切都会恢复正常。知道这里发生了什么吗?我想不出调试或修复此状态的方法。

谢谢, 迈克

更新 看起来有一个 known issue 将数组传递给 write-host,这可能会导致这种行为。我不相信我正在这样做,但很难确定。当 whoami 的结果为空时,我设法设置了一个陷阱测试。奇怪的是,它似乎是在等待长时间运行的远程操作时发生的。

【问题讨论】:

  • 顺便说一句,我通过运行没有详细跟踪的脚本来解决。目前尚不清楚这是否解决了问题,因为写入控制台的内容较少,或者因为它关闭了恶意跟踪。

标签: powershell robocopy powershell-remoting


【解决方案1】:

很遗憾,我没有给你答案,但我也看到了这种确切的行为,我可以补充一些见解;我知道我没有使用 write-host,并且仅当我使用 powershell V2 的后台作业和远程处理时才会出现此问题。通常这发生在我运行了相当多的后台作业之后,就像你一样,问题被隔离到那个单一的 powershell 进程。重新启动 powershell 总能解决问题。

【讨论】:

    【解决方案2】:

    对于可能遇到此问题的任何其他人 - 检查所有具有 write-host 的行 - 在我的情况下,罪魁祸首是脚本中的这一行:

    写主机**************************************

    它在最后被用作所有循环都已完成的视觉标记,并且在它下面有一个摘要......只要我删除它,命令就会执行。如果我添加它,它们就会停止执行......也许星号会溢出一些缓冲区?不确定,但我永远不会再使用它们... :)

    【讨论】:

    • 有趣的是,我没有在跟踪中使用****。我尝试在控制台上打印 1000 次,但没有重现问题。
    【解决方案3】:

    如果您在 robocopy 命令中使用 /R 选项,请尝试增加重试次数。最好使用默认值。 希望这一切正常。

    -架构师

    【讨论】:

    • 问题是 powershell 会话已损坏,因此根本不再执行 robocopy。
    猜你喜欢
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多