【问题标题】:SCCM 2012 Application Deployment scripting issues, any ideas?SCCM 2012 应用程序部署脚本问题,有什么想法吗?
【发布时间】:2014-03-19 04:08:51
【问题描述】:

我对 SCCM 2007 脚本应用程序部署没有任何问题,但 SCCM 2012 让我大发雷霆,我所剩无几。 我们倾向于进行大量脚本安装,并且大多数情况下在 SCCM 2012 中安装失败,最近的失败是 symantec Enterprise vault,我编写了一个脚本来检查主 DLL 插件版本并使用正确的卸载字符串删除以前的版本, 在安装最新版本之前。

我的脚本非常简单,在 SCCM 之外运行良好,但在 SCCM 内部却失败了。

如果我将应用程序重新创建为 MSI 部署并使用 MSI 文件,则它可以正常安装,因此 SCCM 对客户端正常工作。 SCCM 从 MSI 进行的卸载失败,但在下面的示例中进行了介绍。我检查了所有客户端日志文件,没有发现任何问题。

我什至在脚本末尾返回成功安装返回代码 1707 和 0 以尝试获取 SCCM 以使其成功。 我首先在 VB.net 中将脚本作为控制台服务应用程序编写,然后在 vb 脚本中重写。两个脚本都失败了。过去我曾经使用 AutoIT 编写脚本,但那也失败了,所以我想我会改用更微软的东西。

为了进行检测,我使用 Windows 安装程序选择并指向获取产品代码的 msi 文件。

部署类型是脚本。

我唯一能想到的是 SCCM 2012 不喜欢脚本中的睡眠。

或者它只是不喜欢脚本。 :-(

MSI 卸载失败,因为它需要以管理员身份运行,正如您从下面的脚本中看到的那样,我以管理员身份运行,这在 SCCM 之外有效,但在 SCCM 中无效。安装使用几乎相同的代码,但更多的逻辑和更多的卸载字符串。

即使卸载失败,卸载脚本也很简单;

Set WshShell = WScript.CreateObject("WScript.Shell")
If WScript.Arguments.length = 0 Then
    Set ObjShell = CreateObject("Shell.Application")
    ObjShell.ShellExecute "wscript.exe", """" & 
          WScript.ScriptFullName & """" & "RunAsAdministrator", , "runas", 1
    Else
end if

Set objShell = CreateObject("WScript.Shell")
Set objExec = objShell.Exec("MsiExec.exe /x{ADEBB592-4986-4FD1-868C-D59DB32F0BC2} /q")

WScript.Sleep 8000
returnValue = 1707
WScript.Quit(returnValue)

【问题讨论】:

    标签: sccm


    【解决方案1】:

    仅仅因为它在 SCCM 之外工作,如果你必须让它与 SCCM 一起工作,这并没有多大意义!人们一直在进行这种比较,但这没有任何意义,您需要做的是在 MSI 上启用详细日志记录,命令行类似于 msiexec /x {xyz-code} /l*v c:\somelogpath .log,试试看,你可能会在日志文件中发现同样奇怪的东西,比如 1303 错误

    【讨论】:

      【解决方案2】:

      使用 PSEXEC 并在系统帐户下执行命令。 我发现一些设置/安装程序不喜欢在没有 GUI 或其他非用户帐户的情况下执行。

      另一件事,在 SCCM 2012 中,您拥有的包只是简单地执行程序,只需要退出代码检查。 还有一些应用程序可以有检测规则,可以用来真正验证程序是否安装/执行正确。

      还请务必查看ITninja 以获取提示。

      【讨论】:

        【解决方案3】:

        这样的事情你可能需要确保outlook.exe已关闭你可能想在你的脚本中添加一个taskkill然后尝试它:

        taskkill /IM outlook.exe /T
        msiexec /a "path to file" /qn
        

        可以作为一个简单的 .cmd 文件使用

        【讨论】:

          【解决方案4】:

          这是一个旧线程,但也许这对搜索网络的人有帮助:

          1. SCCM 应用程序通常以 SYSTEM 身份运行,无需“以管理员身份运行”(您可以在部署类型中进行配置)。

          2. 您不能“打破”系统上下文并执行“运行方式” runas and system account.
            尝试过一次,最后通过创建一个在特定用户下运行的计划任务,然后从我的脚本运行该任务,该任务以 SYSTEM 身份运行。

          3. 如前所述,使用 SYSTEM 帐户以交互方式测试您的脚本:
            psexec.exe \\localhost -s cmd
            whoami 确认您正在使用 SYSTEM 运行 cmd。
            确保将测试客户端的 COMPUTER 帐户添加到网络脚本文件夹的共享/文件夹 ACL 中,否则系统帐户没有访问权限。
            如果以 SYSTEM 身份运行脚本但 SCCM 仍然报告错误,则检测方法失败的可能性很高,而不是实际安装!
            在此处检查以下日志:C:\Windows\CCM\Logs
            (见下文4.如何使用索引服务加快故障排除日志。)

            • AppDiscovery.log
            • AppEnforce.log
            • AppIntentEval.log
          4. 打开 Windows 索引服务选项。配置 *.log 以索引文件内容。然后将路径 C:\Windows\CCM\Logs 添加到索引中。 Howto.
            通过这种方式,您可以轻松搜索应用程序名称,并找到所有处理该应用程序的日志文件。您还将找到匹配的 AppDT ID,因此您可以搜索该 ID 并找到有关您的包/应用程序的更多信息。
            在您的管理员机器上创建一个新的日志收集文件夹,将此文件夹添加到索引中。这允许您将客户端的整个日志文件夹复制到您的管理文件夹。几分钟后,它就会在您的本地计算机上被索引并完全可以搜索!
            Microsoft 提供了一个工具,可以在客户端上收集完整的日志包:ConfigMgr Support Center

          【讨论】:

            【解决方案5】:

            您是否已设置 SCCM 以在您定义的程序中以管理员身份运行它?

            【讨论】:

              猜你喜欢
              • 2020-11-06
              • 2012-12-24
              • 1970-01-01
              • 2014-06-20
              • 1970-01-01
              • 2022-11-03
              • 1970-01-01
              • 2015-05-11
              • 1970-01-01
              相关资源
              最近更新 更多