从PowerShell窗口启动.exe SOMETIMES导致它在单独的窗口中运行,所以我看不到输出或获取$ lastexitcode

时间:2012-08-17 19:24:58

标签: powershell

我绝不是PowerShell专家;我花了很长时间在谷歌搜索,但没有找到答案。

我的脚本的基本思想是使用命令行参数运行名为appcert.exe的Microsoft工具。 appcert.exe返回0,1或-1;我正在使用$lastexitcode进行检查。

appcert.exe仅在Windows 7和Windows 8上运行,因此我在两者上运行了我的脚本。

在Windows 7x64(PS版本= 2.0)上一切正常。我可以手动运行所有相同的步骤。我在同一个PS窗口中看到appcert.exe的输出。

Windows 8x64(RTM)上的不同故事,PS版本= 3.0,CLRVersion = 4.0.30319.17929。

有时,appcert.exe运行“内联”(就像在Win7中一样);其他时候,启动命令窗口,appcert.exe输出飞过,命令窗口关闭。调用它的PS窗口无法检查$lastexitcode(顺便说一句,它根本没有设置)。

我在机器上尝试了所有PS版本,结果如​​下:

  1. appcert.exe在这些实例的单独窗口中启动:

    • 在PowerGUI 3.2.0.2237中(使用PS 2.0)
    • 常规PowerShell(非管理员)
    • 在Windows PowerShell ISE(非管理员)
  2. appcert.exe在这些实例中内联启动:

    • Ran Powershell作为管理员
    • 以管理员身份离开ISE
  3. 无论是否:

    ,都可以获得上述行为
    1. 启动脚本,调用appcert命令,如下所示:& $CertToolPath
    2. cd到该工具的主目录并输入。\ appcert.exe
    3. 运行此:Cmd /c appcert.exe
    4. 运行此:Invoke-expression –command appcert.exe
    5. 运行此:[system.diagnostics.process]::start("appcert.exe")
    6. 我的同事们对此同样感到难过。

      我的计算机位于测试域中,而不是工作组。我作为测试域的管理员登录到机器,所以从理论上讲,我已经是管理员了。

      我也安装了MS工具作为管理员。事实上,我从不做任何事情,因为机器的本地管理员。有任何想法吗? :)

      非常感谢, 塔尼亚

1 个答案:

答案 0 :(得分:1)

你可以用其他任何exe来重复这个吗?您是否禁用了UAC提示?

appcert.exe是否可能需要以Admin身份运行,如果没有,它会自动重新启动为Admin(这应该会导致UAC提示,但是如果你关闭了它,它会显示为只是自动生成一个新实例)?