0

我对 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)
4

5 回答 5

0

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

于 2014-03-19T16:21:48.043 回答
0

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

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

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

于 2018-07-06T13:41:40.340 回答
0

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

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

  2. 您不能“打破” SYSTEM 上下文并执行“run as” runas 和 system account
    尝试过一次,最后通过创建一个在特定用户下运行的计划任务来完成一个丑陋的解决方法,然后从我的脚本运行该任务,该脚本作为 SYSTEM 运行。

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

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

于 2019-07-26T08:34:41.090 回答
0

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

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

还要经常检查ITninja以获取提示。

于 2016-07-04T10:12:59.207 回答
-1

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

于 2014-03-25T14:27:10.297 回答