污染管道故障排除

时间:2015-07-11 00:09:43

标签: powershell pipeline

我有一个脚本,此代码失败,退出代码为-2145124322

$new.ExitCode > $null
$filePath = "wusa.exe"
$argumentList = "`"\\PX_SERVER\Rollouts\Microsoft\VirtualPC\Windows6.1-KB958559-x64-RefreshPkg.msu`" /quiet /norestart"
$exitCode = (Start-Process -FilePath:$filePath -argumentList:$argumentList -wait -errorAction:Stop -PassThru).ExitCode
Write-Host $exitCode

现在,主要脚本有大约15,000行“其他东西正在进行”,这些行最初并不完全像这样。变量是从XML中提取的,有数据验证和try / catch块,各种各样的东西。所以,我开始拉出相关的线条,并将它们放在一个很小的单独脚本中,并对变量进行硬编码。在那里,它的工作原理,我得到一个很好的3010退出代码,然后进入比赛。所以,我把我的工作代码,硬编码变量和所有内容都粘贴到原始脚本中,然后再次中断。 所以,我将代码从它所属的函数中移出,并在我初始化所有内容之后,在开始处理主循环之前将其放入。它有效!现在,我必须相信它是通常的“污染管道”,但是,如果我能弄清楚是什么原因导致这种情况发生了影响。我的下一步我想是开始逐步完成代码,将这个块放在某个地方,运行测试,如果它工作进一步向下移动,再试一次。 GACK! 所以,跳跃某人有一些见解。无论是它可能是什么,或者可能是一个改进的测试协议。或者实际看到整个管道并以某种方式识别污染的一些技巧。

FWIW,我通常使用PoSH v2,但我已经尝试使用v4,结果完全相同。但也许在以后的版本中有一些管道监控功能可以帮助进行故障排除?

另外,我的理解是PoSH v2存在负返回码的问题,因此它们不可信任。但我认为较新的版本修正了这个,对吗?那么我在v4中获得相同代码的事实意味着它对Google有意义吗?并不是说到目前为止我在任何地方都找到了任何退出代码的提示。

交叉的手指。

编辑:好的,多一点数据。我在没有 - 的情况下搜索退出代码,并使用DuckDuckGo代替Google,并找到了这个。 0x8024001E -2145124322 WU_E_SERVICE_STOP操作未完成,因为服务或系统正在关闭。 好的,这是一个方向。我有一些代码可以让我暂时杀死一个服务。但这似乎有点严厉。这不是重点,就像从微软安装更新的第10种方式,应该是为了简化自动化?在任何情况下,我都找不到任何迹象表明WUSA有命令行标志可以避免这个问题,但我不得不相信我做错了。

1 个答案:

答案 0 :(得分:1)

解决!在跟踪了许多尝试不同事物的不同错误(包括关闭防火墙等)之后,结果表明错误不是服务不会停止,而是服务不会启动。请参阅,在我的脚本期间,15K行代码中的一些禁止Windows Update,因为Windows Update导致许多Autodesk部署失败,这是我的代码的全部要点。当然,WUSA需要这项服务。因此,看起来,我不需要在脚本执行期间抑制Windows Update,而是需要减轻负担,并且只在部署任务的持续时间内进行抑制。这将需要几个小时来实施和测试,但完全可行。而且反正可能更优雅。活泉!

是的,因为有一次我无意中在我的管道里瞎了。 ;)