SCCM 2012应用程序部署脚本问题,任何想法?

时间:2014-03-19 04:08:52

标签: sccm

我对SCCM 2007脚本应用程序部署没有任何问题,但是SCCM 2012让我把头发拉了出来,而我只剩下很少了。 我们倾向于使用大量脚本安装,并且大多数情况下安装在SCCM 2012中失败,最新的失败是symantec企业库,我写了一个脚本,它将检查主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)

5 个答案:

答案 0 :(得分:0)

仅仅因为它在SCCM之外工作,如果你必须使它与SCCM一起使用,那么这并不意味着很多!人们总是将这种比较作为一项工作并且它意味着什么,你需要做什么,是在MSI上启用详细日志记录,命令行是这样的msiexec / x {xyz-code} / l * vc:\ somelogpath .log,尝试一下你可能会发现类似于日志文件中的1303错误的奇怪内容

答案 1 :(得分:0)

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

另一件事,在SCCM 2012中,您只需执行程序就可以执行程序,只需检查退出代码。 还有一些应用程序可以具有检测规则,可用于真正验证程序是否正确安装/执行。

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

答案 2 :(得分:0)

类似这样的事情,您可能需要确保Outlook.exe已关闭,您可能想在脚本中添加一个taskkill,然后尝试:

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

可以作为简单的.cmd文件

答案 3 :(得分:0)

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

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

  2. 您不能“脱离” SYSTEM上下文并执行“运行方式” 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并找到有关您的软件包/应用程序的更多信息。
    在您的管理机上,创建一个新的日志收集文件夹,将此文件夹添加到索引中。这使您可以将客户端的整个日志文件夹复制到admin文件夹。几分钟后,它便在本地计算机上被索引并可以完全搜索!
    Microsoft提供了一种可以在客户端上收集完整日志包的工具:ConfigMgr Support Center

答案 4 :(得分:-1)

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